Autor Beitrag
fuba
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 125

Win7
D7 Ent.
BeitragVerfasst: Mo 30.08.10 02:21 
hi @ all

habe folgendes problem:
ich will an ein fenster einen mausclick senden.
dass funktioniert auch wunderbar, solange das fenster fokusiert ist, jedoch nicht wenn das fenster minimiert ist oder den fokus verliert.

code, welcher nicht funktioniert:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure LeftClick(wnd: hwnd; PosX, PosY: integer);
begin
  PostMessage(wnd, WM_MOUSEMOVE , 0 , MakeLParam(PosX, PosY)); // maus bewegen funktioniert

  // Mausclick funktioniert nicht
  PostMessage(Wnd, WM_LBUTTONDOWN, MK_LBUTTON, MakeLParam(PosX, PosY));
  PostMessage(Wnd, WM_LBUTTONUP , MK_LBUTTON, MakeLParam(PosX, PosY));
end;


das interessante daran ist, das bewegen der maus funktioniert, auch bei nicht fokusiertem fenster, aber der click nicht *confused*
habe schon überall gesucht, aber keine passende lösung gefunden.

man kann das fenster wiederherstellen und dann in den vordergund holen, etwa so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure LeftClick(wnd: hwnd; PosX, PosY: integer);
begin
  PostMessage(wnd, WM_SYSCOMMAND, SC_RESTORE, 0);
  BringWindowToTop(wnd);
  SetForeGroundWindow(wnd);
  PostMessage(wnd, WM_MOUSEMOVE , 0 , MakeLParam(PosX, PosY));
  PostMessage(Wnd, WM_LBUTTONDOWN, MK_LBUTTON, MakeLParam(PosX, PosY));
  PostMessage(Wnd, WM_LBUTTONUP , MK_LBUTTON, MakeLParam(PosX, PosY));
end;

damit funktioniert es wunderbar.

jedoch währe es mir lieber, wenn ich dass nicht machen müsste, gibts da ne lösung?

danke für eure vorschläge/hilfe :)
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mo 30.08.10 04:27 
Hast du mal probiert den Rückgabewert abzufragen? Dafür sind die eigentlich da. Wenn er 0 ist, dann hat was nicht geklappt und du rufst besser mal GetLastError auf. ;)

Btw, gibts einen Grund warum nicht SendMessage? Was ich so bei MSDN gelesen hab ist SendMessage extra für Fenster gemacht worden, während PostMessage eher für Threads ist. (Wenn ich Blödsinn rede bitte mich korrigieren.)

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Mo 30.08.10 07:46 
Wenn PostMessage abgeschlossen ist, wurde die Aktion (idr) noch nicht ausgeführt, daher beinhaltet der Rückgabewert die gewünschte Information nicht (höchstens vielleicht, ob der Handle ungültig war).

Ich würd's auch mal mit SendMessage probieren (oder eine der Varianten, z.B. SendMessageCallback).
fuba Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 125

Win7
D7 Ent.
BeitragVerfasst: Mo 30.08.10 15:51 
SendMessage auch schon versucht, was aber dabei komisch war, mit Sendmessage funktionierte es nichtmal mehr wenn das fenster fokus hatte.
werde mir mal bei Sendmessage das result ansehen.


// EDIT //
PostMessage gibt immer "True" zurück, auch wenn das fenster minimiert ist und der click nicht funktioniert.
SendMessage gibt immer "0" zurück, daher funktioniert weder movemouse noch ein click
(was ich aber komisch finde, denn wenn das fenster den fokus hat, clickt/moved psotmessage ja, aber warum sendmessage nicht?)