明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

怎么用Delphi6完成對計算機(jī)的遠(yuǎn)程控制

[摘要]WinSock是一組API,用于在網(wǎng)絡(luò)上傳輸數(shù)據(jù)和交換信息。雖然現(xiàn)在有很多工具如FTP程序可以在網(wǎng)絡(luò)上傳輸數(shù)據(jù)和文件,但是通過WinSock編程有更大的靈活性,它不需要關(guān)心網(wǎng)絡(luò)連接的細(xì)節(jié),然而用Wi...
WinSock是一組API,用于在網(wǎng)絡(luò)上傳輸數(shù)據(jù)和交換信息。雖然現(xiàn)在有很多工具如FTP程序可以在網(wǎng)絡(luò)上傳輸數(shù)據(jù)和文件,但是通過WinSock編程有更大的靈活性,它不需要關(guān)心網(wǎng)絡(luò)連接的細(xì)節(jié),然而用WinSock編程卻很復(fù)雜,但是在Delphi中我們并不需要直接與WinSock的API打交道,因為TClientSocket元件和TServerSocket元件(Internet頁)封裝了WinSock的大部分API,使得對WinSock的訪問大大簡化。下面這個遠(yuǎn)程控制的例子就很清楚地說明了這個問題,它可以發(fā)送一個消息給對方,并能夠使對方的電腦關(guān)閉、重新啟動或重新登錄。

一、實現(xiàn)原理
  實行遠(yuǎn)程控制,實際上就是一個服務(wù)器程序(以下簡稱被控程序)和一個客戶程序(以下簡稱主控程序):被控方即為服務(wù)器程序,它監(jiān)聽客戶的請求,并作出處理;主控方即為客戶程序,它連接上服務(wù)器后,發(fā)出自己的請求,服務(wù)器便根據(jù)自已的請求進(jìn)行不同的響應(yīng)。

二、編寫主控程序
  新建一個項目Client.dpr,并把一個TClientSocket元件放到Form上,它的屬性設(shè)置如下:Port設(shè)為100(端口號可任意設(shè)置,只要求雙方統(tǒng)一),其它屬性按默認(rèn)值。在窗體上添加兩個TEdit:Edit1用來輸入發(fā)送的字符,Edit2用來輸入IP地址;添加兩個TButton:Button1點擊后用來連接被控機(jī),Button2點擊后用來發(fā)送字符,然后聲明一個私有變量ConnectFlag,表示雙方是否連接好:


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+'可能是監(jiān)聽程序沒有運行或網(wǎng)絡(luò)故障!'),'
連接錯誤',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;//在連接之前首先關(guān)閉
ConnectFlag:=False; //置連接標(biāo)志為假
end;
if Length(Edit2.Text) > 0 then begin
Host := Edit2.Text; //指定IP地址或主機(jī)名
Active := True;
end;
end;
end;

---- 5、Button2的OnClick事件代碼如下:


procedure TForm1.Button2Click(Sender: TObject);
begin
if ConnectFlag then
ClientSocket1.Socket.SendText(Edit1.Text)
//如果連接成功則發(fā)送字符串
else
Application.MessageBox(PChar(' 沒有連接到地址 :
' + Edit2.Text+'。'+
#13+'檢查IP地址是否存在或是否已經(jīng)連接!'),'
提示信息',MB_OK+MB_ICONSTOP);
end;

三、編寫被控程序
---- 1、新建一個項目Server.dpr,并把一個TServerSocket元件放到Form上,

它的屬性設(shè)置如下:Active設(shè)為True;Port設(shè)為100,其它屬性按默認(rèn)值。

---- 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); //處理接收的字符串,首先轉(zhuǎn)換字符串為整數(shù)
if Code< >0 then
Application.MessageBox(Str,'提示信息',
MB_OK+MB_ICONINFORMATION)
//如果轉(zhuǎn)換后的數(shù)據(jù)不是一個整型數(shù)就通過消息框來顯示字符串
else
if (V=0)or(V=1)or(V=2) then
ExitWindowsEx(V,0)
//調(diào)用Windows的API函數(shù)(V=0表示重新登錄、
V=1表示關(guān)機(jī)、V=2表示重啟動)
else
Application.MessageBox(Str,'提示信息',
MB_OK+MB_ICONINFORMATION);
//轉(zhuǎn)換后數(shù)據(jù)不為0、1、2時在消息框內(nèi)顯示字符串
end;

---- 3、修改項目文件,不讓窗口顯示并且防止它運行兩次,修改begin和end之

間的代碼如下:


begin
Application.Initialize;
if FindWindow('TForm1','Form1')=0 then begin
//當(dāng)沒有找到Form1時執(zhí)行下面代碼
Application.ShowMainForm:=False; //不顯示主窗口
Application.CreateForm(TForm1, Form1);
Application.Run;
end;
end.

四、注意事項
---- 1、網(wǎng)絡(luò)要裝配正確并安裝TCP/IP協(xié)議,且要正常運行。

---- 2、首先要運行被控程序。

---- 3、必須知道對方的IP地址或主機(jī)名。

不過要注意的是,此程序可以遠(yuǎn)程控制對方的計算機(jī),請慎用.如果出現(xiàn)問題,筆者概不負(fù)責(zé).