CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

如何远程控制计算机

楼主hellrock(大象)2002-04-08 21:45:55 在 VB / 基础类 提问

在网吧控制系统中,刷卡后,需要在服务器端(记费系统)控制相应机器(未刷卡前锁定,不允许使用)的开锁!请问如何实现远程计算机的锁定和解锁呢?有什么方法可以实现? 问题点数: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

相关问题

  • 如何远程控制计算机
  • 请问用PCAnyWhere如何远程控制动态IP的计算机?
  • 远程控制时,如何在对方计算机上实现鼠标点击操作
  • 如何实行远程控制?
  • 如何实现远程控制???
  • 你是如何远程控制的。
  • 如何用C#实现远程控制
  • 如何用java实现远程控制
  • 如何远程控制屏幕?
  • 远程控制时,如何抓取远程计算机桌面上正在播放的媒体流,即电影视频

关键词

  • vb6.0
  • 服务器
  • 客户机
  • 控件
  • 代码
  • 计算机
  • 屏幕
  • 属性
  • 屏蔽
  • 连接

得分解答快速导航

  • 帖主:hellrock
  • HeatLoad
  • tony_jian
  • gump2000
  • lihonggen0
  • lihonggen0
  • gump2000
  • ddww

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo