如何远程控制计算机
在网吧控制系统中,刷卡后,需要在服务器端(记费系统)控制相应机器(未刷卡前锁定,不允许使用)的开锁!请问如何实现远程计算机的锁定和解锁呢?有什么方法可以实现? 问题点数:100、回复次数:13Top
1 楼water_j(随心所欲)回复于 2002-04-08 21:49:44 得分 0
up!
gz!Top
2 楼HeatLoad(热负荷)回复于 2002-04-08 21:54:18 得分 5
一般通过 winsock 控件.
如果你牛, 就自己定义 通信协议.Top
3 楼wgku(云霄)回复于 2002-04-08 22:16:49 得分 0
UP GZTop
4 楼hellrock(大象)回复于 2002-04-09 08:46:24 得分 0
HeatLoad(热负荷) :能说清楚点吗?具体如何通过winsock实现呢?谢谢!Top
5 楼tony_jian(晕了)回复于 2002-04-09 08:54:13 得分 10
对!我前段时间做的就是用winsock控件实现的.你只需要定义服务器端和客户端的消息就行了.接收端通过判断消息的内容来执行操作.Top
6 楼gump2000(阿甘)回复于 2002-04-09 09:23:17 得分 10
www.21code.com
的网络部分详细找,有相关代码
实现了,控制对方鼠标操作等等Top
7 楼lihonggen0(李洪根,MS MVP,标准答案来了)回复于 2002-04-09 09:26:30 得分 25
参考:
用VB实现局域网屏幕监视
一、引言
局域网中,往往有定时监视同一组内机器的屏幕的需要。比如:在工业控制中,某车间有多条生产线,每条生产线有一台或几台计算机实时监控该生产线的工序参数的波动;同时,需要有一台计算机(可以称之为屏幕监视服务器)来定时循环地显示各监视器的屏幕,以达到及时发现异常情况的目的。再如学校等公共机房,为了提高机器的有效使用率,屏幕监视亦具有良好的效用。本文将介绍如何用VB来实现屏幕监视的功能。
二、VB实现屏幕监视的原理
本文把被监视的机器称为客户机,监视屏幕的机器称为服务器(程序中服务器的名称为Monitor)。首先在客户机上把显示器的屏幕作为一个窗口,并且把该窗口作为图像加在VB工程中的窗体上,而后把该图像在服务器上保存为图像文件。在服务器上则在窗体中循环加载图像文件,实现动态的、可选择地显示各个图像。
三、客户机程序的编制与设置
1、启动VB,创建缺省工程,将窗体的Visible属性改为False,并在窗体上添加一Timer控件,名称为Timer1,其Interval属性设为30000(采样间隔为30秒)。
2、API函数的声明(可通过API Text Viewer加入)
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
3、全局变量的声明
Dim ComputerName As String '本机名称,用来区分不同的机器所生成的图像。
4、再添加以下代码
Private Sub Form_Load()
Dim sBuffer As String
Dim lSize As Long
sBuffer = Space$(255)
lSize = Len(sBuffer)
Call GetComputerName(sBuffer, lSize)
ComputerName = Trim(Left$(sBuffer, lSize))
Call iniPara 'iniPara函数定义在后
End Sub
为了防止程序被终止,添加如下语句:
Private Sub Form_Unload(Cancel As Integer)
Shell "C:\Windows\System\Client.exe" '调用本程序所生成的可执行文件
End Sub
Private Sub Timer1_Timer()
Dim swnd, sdc, hd
swnd = GetDesktopWindow()
sdc = GetDC(swnd)
hd = BitBlt(Me.hdc, 0, 0, Me.Width, Me.Height, sdc, 0, 0, &HCC0020)
SavePicture Me.Image, "\\Monitor\D$\ClientScreen\image" & ComputerName & ".bmp"
hd = ReleaseDC(swnd, sdc)
Call iniPara
End Sub
当发现有异常情况时,往往需要缩短采样间隔,下面iniPara函数可实现改变定时器的Interval属性的功能。
Private Function iniPara() '读取服务器上的Client.ini文件,初使化定时器的间隔。
Dim sBuffer As String
Dim lSize As Long
Dim TimerInterval As Integer '采样间隔
Open "\\Monitor\D$\ClientScreen\Client.ini" For Input As #1
Line Input #1, sBuffer
lSize = InStr(1, sBuffer, "=")
Timer1.Interval = Val(Mid(sBuffer, lSize + 1))
Close (1)
End Function
编译生成可执行文件Client.exe,将其放在文件夹C:\Windows\System下,并把该程序设为开机即启动。
四、服务器程序的编制与设置
启动VB,创建缺省工程,将窗体的WindowState属性改为2-maximized,并在窗体上添加一Timer控件,名称为Timer1,其Interval属性设为6000(采样间隔为6秒);在窗体上增添一Image控件,名称为Image1,调整至合适尺寸,将其Stretch属性改为True,添加如下代码:
Const iNumClient = 5 '客户机的数量
Dim sClientName(1 To iNumClient) As String '存放客户机名称的数组
Dim i As Integer
然后在Form_Load中把sClientName逐个赋值为客户机的名称,再添加如下代码:
Private Sub Timer1_Timer()
i = i + 1
If (i > iNumClient) Then i = 1
Image1.Picture = LoadPicture("D:\ClientScreen\image" & sClientName(i) & " .bmp")
End Sub
编译生成可执行文件Server.exe,将其放在文件夹D:\ClientScreen下,并在该文件夹下新建一文本文件Client.ini,里面记录着客户机的采样间隔,格式为“任意字符串(不能包含等号)=时间(毫秒)”,比如:
ClientInterval=60000
即表示客户机的采样间隔为60秒。
再把服务器的D盘共享为D$,访问类型为“完全”。
下面的工作就是待各客户机运行一段时间后,在服务器就可以一览众客户机的屏幕了。
五、结束语
该程序比较简洁,使用方便,达到了“一机多显示器”的效果。当然,本程序仅仅是梗概,还很不完善,功能也不多,在实际应用中可逐步完善。
本程序是在VB6.0企业版下实现的。
Top
8 楼lihonggen0(李洪根,MS MVP,标准答案来了)回复于 2002-04-09 09:28:21 得分 25
参考:
浅谈用VB6.0编写BO程序
作者: 洪杭迪
BO又称“特洛伊木马”, 是在美国一次黑客技术讨论会上由一个黑客组织推出的。它其实是一种客户机/服务器程序,其利用的原理就是:在本机直接启动运行的程序拥有与使用者相同的权限。因此如果能够启动服务器端(即被攻击的计算机)的服务器程序,就可以使用相应的客户端工具客户程序直接控制它了。下面来谈谈如何用VB来实现它。
使用VB建立两个程序,一个为客户端程序Client,一个为服务器端程序systry。
在Client工程中建立一个窗体,加载WinSock控件,称为tcpClient,协议选择TCP,再加入两个文本框,用以输入服务器的IP地址或服务器名,然后建立一个按钮,按下之后就可以对连接进行初始化了,代码如下:
Private Sub cmdConnect_Click()
If Len(Text1.Text) = 0 And Len(Text2.Text) = 0 Then
MsgBox ("请输入主机名或主机IP地址。")
Exit Sub
Else
If Len(Text1.Text) > 0 Then
tcpClient.RemoteHost = Text1.Text
Else
tcpClient.RemoteHost = Text2.Text
End If
End If
tcpClient.Connect
Timer1.Enabled = True
End Sub
连接建立之后就可以使用DataArrival事件处理所收到的数据了。
在服务器端systry工程也建立一个窗体,加载WinSock控件,称为tcpServer,协议选择TCP,在Form_Load事件中加入如下代码:
Private Sub Form_Load()
tcpServer.LocalPort = 1999
tcpServer.Listen
End Sub
准备应答客户端程序的请求连接,使用ConnectionRequest事件来应答户端程序的请求,代码如下:
Private Sub tcpServer_ConnectionRequest(ByVal requestID As Long)
If tcpServer.State < > sckClosed Then
tcpServer.Close '检查控件的 State 属性是否为关闭的。
End If '如果不是,在接受新的连接之前先关闭此连接。
tcpServer.Accept requestID
End Sub
这样在客户端程序按下了连接按钮后,服务器端程序的ConnectionRequest事件被触发,执行了以上的代码。如果不出意外,连接就被建立起来了。
建立连接后服务器端的程序通过DataArrival事件接收客户机端程序所发的指令运行既定的程序。如:把服务器端的驱动器名、目录名、文件名等传到客户机端,客户机端接收后用TreeView控件以树状的形式显示出来,浏览服务器端文件目录;强制关闭或重启服务器端的计算机;屏蔽任务栏窗口;屏蔽开始菜单;按照客户机端传过来的文件名或目录名,而删除它;屏蔽热启动键;运行服务器端的任何程序;还包括获取目标计算机屏幕图象、窗口及进程列表;激活、终止远端进程;打开、关闭、移动远端窗口;控制目标计算机鼠标的移动与动作;交换远端鼠标的左右键;在目标计算机模拟键盘输入,下载、上装文件;提取、创建、修改目标计算机系统注册表关键字;在远端屏幕上显示消息。DataArrival事件程序如下:
Private Sub tcpServer_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
Dim i As Long
Dim mKey As String
tcpServer.GetData strData
'接收数据并存入strData
For i = 1 To Len(strData)
'分离strData中的命令
If Mid(strData, i, 1) = "@" Then
mKey = Left(strData, i - 1)
'把命令ID号存入mKey
'把命令参数存入strData
strData = Right(strData, Len(strData) - i)
Exit For
End If
Next i
Select Case Val(mKey)
Case 1
'驱动器名、目录名、文件名
Case 2
'强制关闭服务器端的计算机
Case 3
'强制重启服务器端的计算机
Case 4
'屏蔽任务栏窗口;
Case 5
'屏蔽开始菜单;
Case 6
'按照客户机端传过来的文件名或目录名,而删除它;
Case 7
'屏蔽热启动键;
Case 8
'运行服务器端的任何程序
End Select
End Sub
详细程序略。
客户机端用tcpClient.SendData发命令。命令包括命令ID和命令参数,它们用符号“@”隔开。
另外,当客户机端断开与服务器端的来接后,服务器端应用tcpServer_Close事件,来继续准备接收客户机端的请求,其代码如下:
Private Sub tcpServer_Close()
tcpServer.Close
tcpServer.Listen
End Sub
这就是一个最基本的特洛伊木马程序,只要你的机器运行了服务器端程序,那别人就可以在千里之外控制你的计算机。至于如何让服务器端程序运行就要发挥你的聪明才智了,在我的源程序中有一中方法,是修改系统注册表的方法。
成功的特洛伊木马程序要比这个复杂一些,还有程序的隐藏、自动复制、传播等问题要解决。警告:千万不要用BO程序破坏别人的系统。
Top
9 楼gump2000(阿甘)回复于 2002-04-09 09:28:55 得分 15
http://www.21code.com/codebase/?pos=down&id=1612
http://www.21code.com/codebase/?pos=down&id=1477
http://www.21code.com/codebase/?pos=down&id=811
http://www.21code.com/codebase/?pos=down&id=786
http://www.21code.com/codebase/?pos=down&id=785
http://www.21code.com/codebase/?pos=down&id=784
http://www.21code.com/codebase/?pos=down&id=756
够多了:)
Top
10 楼ddww()回复于 2002-04-09 09:30:46 得分 10
不管你用什么开发平台都可用WINSOCK来实现远程控制,你在服务器端发出控制指令,客户端收到启动指令后则调WINDOWS启动系统,同样的,也可以控制关机了。
至于WINSOCK的实现方法,你搜索一下WINSOCK,网上到处都是源码,抄一个就行了。Top
11 楼hellrock(大象)回复于 2002-04-09 14:38:02 得分 0
谢谢各位的提示。。过几天我把分数结上。。呵呵Top
12 楼thorkhan(北方的河)回复于 2002-04-09 19:07:16 得分 0
來晚了﹐蹭分Top
13 楼teaky2002(种田硬手)回复于 2002-04-09 20:56:36 得分 0
楼上有分的 话,我觉得我也应该有啊。活活。。。。Top




