用Delphi实现远程控制
广东省东莞市大朗镇财政所 江 勇
WinSock是一组API,用于在网络上传输数据和交换信息。虽然现在有很多工具如FTP 程序可以在网络上传输数据和文件,但是通过WinSock编程有更大的灵活性,它不需要关心网络连接的细节,不过用WinSock编程却很复杂。在Delphi中我们并不需要直接与 WinSock的API打交道,因为TClientSocket元件和TServerSocket元件(在Internet页)封装了WinSock的大部分API,使得对WinSock的访问大大简化。下面这个远程控制的例子就很清楚地说明了这个问题,它可以发送一个消息给对方,并能够使对方的电脑关闭、重新启动或重新登录。
private
ConnectFlag:Boolean;
2.ClientSocket1的OnConnect事件代码如下:
procedure TForm1.ClientSocket1Connect
(Sender: TObject;Socket: TCustomWinSocket);
begin
ConnectFlag:=True; //表示连接成功
end;
3.ClientSocket1的OnError事件代码如下:
procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent:
TErrorEvent;var ErrorCode: Integer);
begin
Application.MessageBox(Pchar
(‘不能连接到IP地址 : ' + Edit2.Text+‘。'+
#13+‘可能是监听程序没有运行或网络故障!'),
‘连接错误',MB_OK+MB_ICONSTOP);
ErrorCode := 0;
end;
4.Button1的OnClick事件代码如下:
procedure TForm1.Button1Click(Sender: TObject);
begin
with ClientSocket1 do begin
if Active then begin
Active := False;//在连接之前首先关闭
ConnectFlag:=False; //置连接标志为假
end;
if Length(Edit2.Text) > 0 then begin
Host := Edit2.Text; //指定IP地址或主机名
Active := True;
end;
end;
end;
5.Button2的OnClick事件代码如下:
procedure TForm1.Button2Click(Sender: TObject);
begin
if ConnectFlag then
ClientSocket1.Socket.SendText(Edit1.Text)
//如果连接成功则发送字符串
else
Application.MessageBox(PChar(‘没有连接到地址 :
' + Edit2.Text+‘。'+#13+‘检查IP地址是否
存在或是否已经连接!'),‘提示信息',MB_OK+MB
_ICONSTOP);
end;
2.ServerSocket1的OnClientRead事件代码如下:
procedure TForm1.ServerSocket1ClientRead
(Sender: TObject;Socket: TCustomWinSocket);
var
Str:PChar;
Code,V:Integer;
begin
Str:=PChar(Socket.ReceiveText);
//接收字符串
Val(Str,V,Code);
//处理接收的字符串,首先转换字符串为整数
if Code<>0 then
Application.MessageBox(Str,
‘提示信息',MB_OK+MB_ICONINFORMATION)
//如果转换后的数据不是一个整型数
//就通过消息框来显示字符串
else
if (V=0)or(V=1)or(V=2) then
ExitWindowsEx(V,0)
//调用Windows的API函数(V=0表示重新登录、
//V=1表示关机、V=2表示重启动)
else
Application.MessageBox
(Str,‘提示信息',MB_OK+MB_ICONINFORMATION);
//转换后数据不为0、1、2时在消息框内显示字符串
end;
3.修改项目文件,不让窗口显示并且防止它运行两次,修改begin和end之间的代码如下:
begin
Application.Initialize;
if FindWindow(‘TForm1',‘Form1')=
0 then begin //当没有找到Form1时执行下面代码
Application.ShowMainForm:=False; //不显示主窗口
Application.CreateForm(TForm1, Form1);
Application.Run;
end;
end.
上述程序用Delphi5.0编写,在Windows98对等网、 WindowsNT4.0局域网以及Internet上运行通过。最后要声明的是此程序由于能够控制对方的计算机,在实验时要事先经过他人同意,不要给别人造成影响。