Всех приветствую необходимо организовать удалённое управление курсором мыши по локальной сети с serversocket'а на clientsocket. Собственно проблема в том,что могу передавать перемещение мыши. На clientsocket'е:
Код:
x := ' ';
y := ' ';
str:= Socket.ReceiveText;
for i:=1 to Length(str) do begin
if str[i] <> '_' then x:= x + str[i];
if str[i] = '_' then Break;
end;
for j:= i+1 to Length(str) do y:= y+str[j];
SetCursorPos(StrToInt(x), StrToInt(y));
С serversocket'а отправляю с помощью таймера 190 мс:
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var Mous:Tpoint;
begin
GetCursorPos(Mous);
ServerSocket1.Socket.Connections[0].SendText(IntToStr(Mous.X)+'_'+IntToStr(Mous.Y));
end;
Однако никак не могу корректно передать клик мыши, потоки информации смешиваются и ругается в итоге на то,что присланное сообщение не является целым (видимо происходит при переводе strtoint).
Пытался передавать и через OnClick,отсылая просто букву, но просто нет реакции.
Код:
//на сервере
procedure TForm1.FormClick(Sender: TObject);
var Mous:Tpoint;
begin
GetCursorPos(Mous);
ServerSocket1.Socket.Connections[0].SendText('l'+IntToStr(Mous.X)+'_'+IntToStr(Mous.Y));
end;
На клиенте принимал:
Код:
if str[1]='l' then begin
for i:=2 to Length(str) do begin
if str[i] <> '_' then x:= x + str[i];
if str[i] = '_' then Break;
end;
for j:= i+1 to Length(str) do y:= y+str[j];
SetCursorPos(StrToInt(x), StrToInt(y));
mouse_event(MOUSEEVENTF_LEFTDOWN, StrToInt(x), StrToInt(y), 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, StrToInt(x), StrToInt(y), 0, 0);
Пытался "кликать" через
Код:
mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_RightDOWN, StrToInt(xx), StrToInt(yy), 0, 0);
mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, StrToInt(xx), StrToInt(yy), 0, 0);
Пробовал через mousedown и mouseup разделять эти две команды,но ничего не получилось.
Прошу помощи,возможно кто работал с этим и у него есть оптимизированный и рабочий алгоритм, ну и не забрасывайте тапками.