Einzelnen Beitrag anzeigen

Lostriga

Registriert seit: 14. Jun 2008
28 Beiträge
 
#1

Mausklick an ein bestimmtes Handle senden.

  Alt 26. Jan 2009, 23:47
Aloa,

wieder einmal bitte ich um euren Rat.

Ich sitzte derzeit an einem Programm,
mit dem ich einen Mausklick an ein bestimmtes Fenster, auf eine bestimmte Position senden möchte.

Ich habe es bereits mit verschiedenen Varianten versucht, doch immer nur mit teilweisem, oder gar keinem Erfolg.

Am besten zeige ich euch diese erst einmal:

Mit diesem gelingt es mir, meine Cursor an eine gewünschte Position zu bewegen,
der Klick wird an der Position (400/300) des Bildschirmes ausgeführt, nicht des Fensters.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
p : TWindowPlacement ;
x, y : Integer;
hwnd : THandle;
begin
hwnd := FindWindow('Testfenster', nil);
GetWindowPlacement(hwnd, @p);
x := p.rcNormalPosition.left+400;
y := p.rcNormalPosition.top+300;
SetCursorPos(x,y);
mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, 0);
end;
Diese Art habe ich im Internet gefunden,
doch einen gewünschten Effekt hat es in keiner Hinsicht ausgeführt.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
PostMessage(FindWindowEx(FindWindow('Testfenster', nil),0, 'Button', nil),
            WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(100, 100));
PostMessage(FindWindowEx(FindWindow('Testfenster', nil),0, 'Button', nil),
            WM_LBUTTONUP, MK_LBUTTON, MAKELONG(100, 100));
end;
Auch diese bringt keinen Effekt.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
  x = 100;
  y = 100;
  xy = x or y shl 16;
var
  hwnd: THandle;
begin
  Wnd := FindWindow(nil, 'Testfenster');
  PostMessage(hwnd, WM_MOUSEMOVE , 0 , xy);
  PostMessage(hwnd, WM_LBUTTONDOWN, MK_LBUTTON, xy);
  PostMessage(hwnd, WM_LBUTTONUP , 0 , xy);
end;
Genauso wie diese.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
hwnd : THandle;
begin
hwnd := FindWindow('Testfenster', nil);
SendMessage(hwnd, MOUSEEVENTF_LEFTDOWN, 0, 0);
SendMessage(hwnd, MOUSEEVENTF_LEFTUP, 0, 0);
end;
Hier habe ich den ersten und dritten ein bisschen zusammen gehauen,
der Effekt bleibt aber wie der des ersten.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
  x = 400;
  y = 300;
  xy = x or y shl 16;
var
p : TWindowPlacement ;
hwnd : THandle;
begin
hwnd := FindWindow('Testfenster', nil);
SetCursorPos(x,y);
mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, 0);
  PostMessage(hwnd, WM_MOUSEMOVE , 0 , xy);
  PostMessage(hwnd, WM_LBUTTONDOWN, MK_LBUTTON, xy);
  PostMessage(hwnd, WM_LBUTTONUP , 0 , xy);
end;
Deswegen meine Frage:
wie würde der Source aussehen müssen, damit der Klick immer 400/300 im Fenster "Testfenster" ausgeführt wird, egal wo sich das Fenster auf dem Bildschirm befindet?

Ich freue mich auf etwas Hilfe.


Mit freundlichem Gruß

Lostriga
  Mit Zitat antworten Zitat