click remoto, click no acesso remoto
Boa noite Galerinha do mal ^^, hoje venho trazer uma duvida um tanto quanto matante pra min que sou iniciante em delphi, meu problema é o seguinte tenho uma aplicação remota que roda servidor/cliente. No caso seria uma conexão reversa, o servidor manda comandos para o client... E o meu problema é como o meu servidor mandaria o duplo click para o client, tenho o click normal aqui "funcionando" ele esta desalinhado por algum motivo tb que não consegui desvendar...
Tenho em tese que seria algo assim:
~ SERVIDOR :
procedure TfrmOperador.Image1DblClick(Sender: TObject);
begin
If (recConfig.MOUSE = True) Then
Begin
// SServer.Socket.Connections[0].SendText('<|MouseDC|>');
sserver.Socket.Connections[0].SendText('<|MouseDC|>'+intToStr(posx)+'<|>'+intToStr(posy)+'<<|');
End;
end;
no meu client esta do seguinte modo o click e o duplo click, no caso é apenas um procedure...
~ CLIENT
procedure TForm1.CSRead(Sender: TObject; Socket: TCustomWinSocket);
var
sMSG: String;
iPosicao, iPosicao2, iPosicao3: Integer;
Pt: TPoint;
PosX, PosY: String;
begin
sMSG := Socket.ReceiveText;
// COMANDO PARA ENVIAR / RECEBER A FOTO
iPosicao := Pos('<IMAGEM>', sMSG);
If (iPosicao > 0) Then
Begin
ImagemStream:=TMemoryStream.Create;
CapturaTela(ExtractFilePath(Application.ExeName)+'Tela.JPEG', StrToInt(Copy(sMSG, 09, 02)));
ImagemStream.Position:=0;
Socket.SendText(inttostr(ImagemStream.Size) + '<|TAMANHO_FOTO|>');
Sleep(100);
Socket.SendStream(ImagemStream);
end;
iPosicao := Pos('<CLICK>', sMSG);
If (iPosicao > 0) Then
Begin
iPosicao2 := Pos('><', sMSG);
iPosicao3 := Pos('>[', sMSG);
PosX := Copy(sMSG, iPosicao2+2, iPosicao3-iPosicao2-2);
PosY := Copy(sMSG, iPosicao3+2, Length(sMSG)-1);
PosY := StringReplace(PosY, ']', '', []);
Pt := ClientToScreen(Pt);
Pt.x := Round(StrToInt(PosX) * (65535 / Screen.Width));
Pt.y := Round(StrToInt(PosY) * (65535 / Screen.Height));
{Move o mouse}
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE, Pt.x, Pt.y, 0, 0);
{Simula o pressionamento do botãoesquerdo do mouse}
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, Pt.x, Pt.y, 0, 0);
{ Simula soltando o botãoesquerdo do mouse }
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, Pt.x, Pt.y, 0, 0);
End;
iPosicao := Pos('<|MouseDC|>', sMSG);
If (iPosicao > 0) Then
Begin
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
Sleep(10);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
Sleep(10);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
Sleep(10);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
End;
end;
Como devo proceder para que o client e o serve funcione corretamente isso ? Desde de já agradeco !
Tenho em tese que seria algo assim:
~ SERVIDOR :
procedure TfrmOperador.Image1DblClick(Sender: TObject);
begin
If (recConfig.MOUSE = True) Then
Begin
// SServer.Socket.Connections[0].SendText('<|MouseDC|>');
sserver.Socket.Connections[0].SendText('<|MouseDC|>'+intToStr(posx)+'<|>'+intToStr(posy)+'<<|');
End;
end;
no meu client esta do seguinte modo o click e o duplo click, no caso é apenas um procedure...
~ CLIENT
procedure TForm1.CSRead(Sender: TObject; Socket: TCustomWinSocket);
var
sMSG: String;
iPosicao, iPosicao2, iPosicao3: Integer;
Pt: TPoint;
PosX, PosY: String;
begin
sMSG := Socket.ReceiveText;
// COMANDO PARA ENVIAR / RECEBER A FOTO
iPosicao := Pos('<IMAGEM>', sMSG);
If (iPosicao > 0) Then
Begin
ImagemStream:=TMemoryStream.Create;
CapturaTela(ExtractFilePath(Application.ExeName)+'Tela.JPEG', StrToInt(Copy(sMSG, 09, 02)));
ImagemStream.Position:=0;
Socket.SendText(inttostr(ImagemStream.Size) + '<|TAMANHO_FOTO|>');
Sleep(100);
Socket.SendStream(ImagemStream);
end;
iPosicao := Pos('<CLICK>', sMSG);
If (iPosicao > 0) Then
Begin
iPosicao2 := Pos('><', sMSG);
iPosicao3 := Pos('>[', sMSG);
PosX := Copy(sMSG, iPosicao2+2, iPosicao3-iPosicao2-2);
PosY := Copy(sMSG, iPosicao3+2, Length(sMSG)-1);
PosY := StringReplace(PosY, ']', '', []);
Pt := ClientToScreen(Pt);
Pt.x := Round(StrToInt(PosX) * (65535 / Screen.Width));
Pt.y := Round(StrToInt(PosY) * (65535 / Screen.Height));
{Move o mouse}
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE, Pt.x, Pt.y, 0, 0);
{Simula o pressionamento do botãoesquerdo do mouse}
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, Pt.x, Pt.y, 0, 0);
{ Simula soltando o botãoesquerdo do mouse }
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, Pt.x, Pt.y, 0, 0);
End;
iPosicao := Pos('<|MouseDC|>', sMSG);
If (iPosicao > 0) Then
Begin
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
Sleep(10);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
Sleep(10);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
Sleep(10);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
End;
end;
Como devo proceder para que o client e o serve funcione corretamente isso ? Desde de já agradeco !
Anderson
Curtidas 0