远程鼠标的控制问题!(100分)

  • 主题发起人 主题发起人 dark_eagle
  • 开始时间 开始时间
D

dark_eagle

Unregistered / Unconfirmed
GUEST, unregistred user!
编写了一个远程屏幕抓取的程序,现在我想从取得的客户机的屏幕实现远程控制,也就
用鼠标点击(包括单击、双击、右击)image控件(客户机的屏幕用image控件显示)
的某一个图标,在客户机上相应的地方也有相应的操作(Image控件上的图标的坐标
和客户机屏幕上的相应的图标一一对应)。
例如右击某个图标,在image控件的onmousedown事件写以下代码:
if shift=[ssright] then
begin
clientsocket1.socket.sendtext(‘ssright’);
clientsocket1.socket.sendtext(inttostr(x));
clientsocket1.socket.sendtext(inttostr(y));
end;

在server端将坐标值保存下来。

哪位能帮我设计一个好的算法?
请将两端的程序详细的写出来,谢谢。
 
没有人能帮我一把吗?
 
也想知道
 
帮帮忙吧!
 
不错,我找的就是这个,终于找到了,真谢谢你!
 
我也非常需要这个,太感谢了!!
 
dark_eagle
能给源程序给我么?
 
不是已经写了吗?
 
我这样做只是权宜这计,我手上有一个这样的软件,做得还可以,谁有delphi的反编译工具,
把它反编译出来?
 
我见过的,只有VNC做的最好。两端都没有延迟,
可惜源代码是VC的,,现在看不懂,,,,:(
BTW:谁会用DIRECTX截屏?GETDC的截屏太烂了,用的实在不爽。
 
我手上的软件可能就是用GETDC截屏,两端都有延迟。但有些功能还可以参考一下。
我也在找用DIRECTX截屏的源代码,谁有呀?
 
remote administrator 比VNC做得更好!估计是在VNC的基础上做的
 
没有人帮我就算了,我自己搞掂啦.
 
客户端:
procedure TForm1.Image1DblClick(Sender: TObject);
begin
clientsocket1.Socket.SendText(inttostr(cx)+'ssdouble'+inttostr(cy));
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
cx:=x;
cy:=y;
if shift=[ssleft] then
begin
clientsocket1.Socket.SendText(inttostr(x)+'ssleft'+inttostr(y));
end;
if shift=[ssright] then
begin
clientsocket1.Socket.SendText(inttostr(x)+'ssright'+inttostr(y));
end;
end;
cx,cy是两个自定义变量.

服务器端:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
s:string;
s2:pchar;
sx,sy:integer
begin
s:=socket.ReceiveText;
s2:=pchar(s);
if strpos(s2,'ssdouble')<>nil then
begin
sx:=strtoint(copy(s,1,strpos(s2,'ssdouble')-s2));
sy:=strtoint(copy(s,(strpos(s2,'ssdouble')-s2)+9,length(s)-(strpos(s2,'ssdouble')-s2)-8));
setcursorpos(sx,sy);
mouse_event(MOUSEEVENTF_LEFTDOWN, sx, sy, 0, 0 );
mouse_event(MOUSEEVENTF_LEFTUP, sx, sy, 0, 0 );
mouse_event(MOUSEEVENTF_LEFTDOWN, sx, sy, 0, 0 );
mouse_event(MOUSEEVENTF_LEFTUP, sx, sy, 0, 0 );
end;
if strpos(s2,'ssleft')<>nil then
begin
sx:=strtoint(copy(s,1,strpos(s2,'ssleft')-s2));
sy:=strtoint(copy(s,(strpos(s2,'ssleft')-s2)+7,length(s)-(strpos(s2,'ssdouble')-s2)-6));
setcursorpos(sx,sy);
mouse_event(MOUSEEVENTF_LEFTDOWN, sx, sy, 0, 0 );
mouse_event(MOUSEEVENTF_LEFTUP, sx, sy, 0, 0 );
end;
if strpos(s2,'ssright')<>nil then
begin
sx:=strtoint(copy(s,1,strpos(s2,'ssright')-s2));
sy:=strtoint(copy(s,(strpos(s2,'ssright')-s2)+8,length(s)-(strpos(s2,'ssright')-s2)-7));
setcursorpos(sx,sy);
mouse_event(MOUSEEVENTF_RIGHTDOWN, sx, sy, 0, 0 );
mouse_event(MOUSEEVENTF_RIGHTUP, sx, sy, 0, 0 );
end;
end;
 
接受答案了.
 
后退
顶部