Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Linken mausklick minimiert simulieren? (https://www.delphipraxis.net/106391-linken-mausklick-minimiert-simulieren.html)

k4ni 10. Jan 2008 00:26


Linken mausklick minimiert simulieren?
 
Hey leute,

Ist es möglich einen mausklick an einer bestimmten stelle and eine minimierte anwendung zu senden?
also z.b
RightClick(222, 444);

Ohne damit sich die Maus bewegt natürlich.

Möglich?

_frank_ 10. Jan 2008 01:58

Re: Linken mausklick minimiert simulieren?
 
wenn du das handle des entsprechenden Fensters hast, lässt sich das mitttels SendMessage/PostMessage und WM_LButtonDown/WM_LButtonUp machen. Da ich die Vermutung habe, du möchtest einen button anklicken, musst du dessen handle verwenden, wenn dieser eins hat, da du sonst "dahinter" klickst ;)

informationen zu der message findest du im MSDN

mein Testprogramm (um zu testen ob die message im minimierten zustand verabeitet wird):

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var wnd:Hwnd;
begin
  wnd:=findwindow(nil,'Image-Scanner');
  if wnd<>0 then
  begin
    sendmessage(wnd,WM_LButtonDown,0,0);
    sendmessage(wnd,WM_LButtonUp,0,0);
  end else
    showmessage('not found');
end;
das gegenprogramm hatte einfach nur ne showmessage() im Mousedown. Diese ist jedoch erst beim restore sichtbar geworden ;)

( auch ein schönes Beispiel um den Unterschied zwischen Sendmessage und Postmessage zu demonstrieren :mrgreen: )

HTH Frank

SirThornberry 10. Jan 2008 09:55

Re: Linken mausklick minimiert simulieren?
 
bei einigen Anwendungen klappt es nicht da diese die aktuelle Mausposition nochmal abfragen. Und wenn die Maus an einer anderen Stelle ist wird nichts gemacht.

_frank_ 10. Jan 2008 12:06

Re: Linken mausklick minimiert simulieren?
 
man könnte sich natürlich auch die mausposition merken, auf die entsprechende position setzen, sendmessage verwenden und dann die maus wieder zurücksetzen ;)

je nachdem wie schnell das andere Programm die Nachricht bearbeitet, ist es möglich dass man den Maussprung gar nicht groß merkt...
die Frage ist halt, ob das bei seiner Anwendung nötig ist...

HTH Frank

k4ni 10. Jan 2008 12:17

Re: Linken mausklick minimiert simulieren?
 
Oh okay danke.
Doch das simuliert doch nur einen mausklick irgendwo oder?
Ich will es aber an bestimmten stellen haben, und die procedure bei der ich das benützen werde macht das öfters an verschiedenen stellen. Ist das überhaupt möglich?

Oder wird das bei der minimierten anwendung da simuliert, wo sich die maus gerade bei der anderen befindet?

_frank_ 10. Jan 2008 12:21

Re: Linken mausklick minimiert simulieren?
 
hast du meinen Text genau durchgelesen? besonders den MSDN-Artikel? dort steht, wie du die Koordinaten angibst, ich mache momentan einen klick bei x=0,y=0. die kordinaten kannst du natürlich auch mittels random ermitteln, ggf. ger getWindowRect (weis jetzt nicht, ob das im minimierten Zustand korrekt funktioniert) die fenstergröße ermitteln.

Gruß Frank

k4ni 14. Jan 2008 20:13

Re: Linken mausklick minimiert simulieren?
 
Sorry für bump aberr:

Ich hab das nicht hinbekommen und hab ein bisschen rumgegoogelt freund gefragt usw.
Und dann bin ich zu diesem ergebnis gekommen:
Delphi-Quellcode:
SendMessage(wnd, WM_LButtonDown, MK_LBUTTON, MakeLParam(189, 887));
SendMessage(wnd, WM_LButtonUp, MK_LBUTTON, MakeLParam(189, 887));
Aber irgendwie funktioniert das auch nicht...Idee?

warmuth 27. Aug 2009 23:47

Re: Linken mausklick minimiert simulieren?
 
Ich hab leider keine idee aber ich würde mich über eine lösung sehr freuen!


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:54 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz