Entwickler-Ecke
Windows API - Mausclicks Posten
Comp-Freak - Sa 21.04.07 04:14
Titel: Mausclicks Posten
Wie poste ich ein mouse click auf einer handle oder einem fenster?
Ich will nicht das das fenster offen und ganz vorne ist sondern irgendwo.
Kann man auch anderes posten?
Danke :)
Moderiert von
Narses: Topic aus Sonstiges (Delphi) verschoben am Di 07.07.2009 um 00:23
elundril - Sa 21.04.07 10:13
hääää?!?
lg el
elundril - Sa 21.04.07 11:12
warum darfs ich nicht posten?? vielleicht will ich ja was lernen und das kann man nun mal schwer wenn man nicht einmal die frage versteht!!! :evil:
lg el
Comp-Freak - Sa 21.04.07 11:37
@ Elundril
ich mochte ein mausclick virtuell erzeugen ohne das ich die (reale)maus bewege.
ich mochet aber nicht setcursorpos(x,y) benuezten weil es im hintergruind laufe sollte.
@ GTA-Place
danke. hab noch ein bischen gegoogelt unter postmeassage() und hab noch sehr viel anderes schoenes zeug gefunden :)
Fals ihr euch wundert gehts so:
Delphi-Quelltext
1: 2:
| PostMessage(HWND , WM_LBUTTONDOWN, 0, MakeLParam(Pos.X, Pos.Y)); Procedure (Handle, Welcher Button, 0, Position ; |
Nochmahl danke :)
Moderiert von
Narses: Delphi-Tags hinzugefügt
elundril - Sa 21.04.07 11:39
ahhh! jetzt versteh ich! danke!
lg el
Rupert - Sa 07.02.09 20:19
Hi miteinander!
Also ich krieg´s nicht auf die Reihe.
Ich trasportiere die Maus mit
Delphi-Quelltext
1:
| setcursorpos(365,674); |
auf eine Stelle am Monitor, wo das Fenster Form1 geöffnet ist und will, dass nun ein Mausclick stattfindet.
Delphi-Quelltext
1: 2: 3:
| WindowHandle := FindWindow(nil, PChar('Form1')); if WindowHandle <> 0 then PostMessage(WindowHandle , WM_LBUTTONDOWN, 0, 0); |
Test mit einer anderen Funktion.
Ich habe schon getestet, ob die Funktion PostMessage ausgeführt wird
Delphi-Quelltext
1:
| PostMessage(WindowHandle , WM_SYSCOMMAND,SC_MINIMIZE,0)) |
Beim Test wurde das Fenster minimiert.
Merkwürdig ist dabei, dass dieser Vorgang nicht wiederholbar ist, wenn die Funktion einmal ausgeführt wurde. (Form1 wieder maximieren und den Vorgang wiederholen) - nix passiert mehr.
??????
Moderiert von
Narses: Delphi-Tags hinzugefügt
jaenicke - Sa 07.02.09 20:20
Du vergisst die Maus wieder loszulassen (WM_LBUTTONUP). ;-)
Delete - Sa 07.02.09 20:23
Es könnte evtl. funktionieren, wenn man die Maustaste auch virtuell wieder loslässt. Wobei ich nicht ganz verstehe, wieso hier die Kombination von SetCursorPos und PostMessage verwendet wird. Wenn man schon den Mauscursor verschiebt, kann man auch gleich mouse_event benutzen.
Rupert - Mo 09.02.09 14:41
Danke @DeddyH & jaenicke!
Das loslassen der Maus brachte nichts, aber die Frage, wozu überhaupt Postmessage zu verwenden war überzeugend. Ich verwende nun:
Delphi-Quelltext
1: 2: 3:
| SetCursorPos (-1000,300); mouse_event(MouseEventF_leftDown,0,0,0,0); mouse_event(MouseEventF_leftup,0,0,0,0); |
SetCursorPos muss ich davor stellen, weil das mouse_event keine negativen Koordinaten annimmt.
FragSalat - Sa 04.07.09 22:08
kannst du ma pls die methode MakeLParm() posten pls
jaenicke - Sa 04.07.09 22:12
FragSalat hat folgendes geschrieben : |
kannst du ma pls die methode MakeLParm() posten pls |
Wie meinst du das? Wenn du die richtig schreibst (MakeLPar
am), dann ist die in Delphi enthalten (in der Unit Windows).
In deren Quelltext kannst du dort ja schauen, wenn es dich interessiert.
FragSalat - Sa 04.07.09 23:27
aso hatte gehofft das es dazu ne methode gibt die ich mir in c# umschreiben kann
jaenicke - Sa 04.07.09 23:55
Hmm, ich kann es jetzt schlecht testen, aber wie wäre es so?
C#-Quelltext
1: 2: 3: 4:
| private long MakeLParamMacro(ushort lo, ushort hi) { return lo | hi << 16; } |
FragSalat - Mo 06.07.09 23:28
aber da muss ich doch keinen point angeben oder weil bei dem oben wird ja Pos.X/Y verlangt (Point Pos) also nen point
denn ich habs jetzt so
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| static uint WM_LBUTTONDOWN = 0x201; static uint WM_LBUTTONUP = 0x202; static uint MK_LBUTTON = 0x1; static uint WM_MOUSEMOVE = 0x200;
[DllImport("user32.dll", SetLastError = true)] static extern bool PostMessage( IntPtr hWnd, uint msg, uint wParam, int lParam );
public static void SendClick(IntPtr HWND, int x, int y) {
PostMessage(HWND, WM_MOUSEMOVE, 0, MakeLParam(x, y)); PostMessage(HWND, WM_LBUTTONDOWN, MK_LBUTTON, MakeLParam(x, y)); PostMessage(HWND, WM_LBUTTONUP, MK_LBUTTON, MakeLParam(x, y)); }
private static int MakeLParam(int LoWord, int HiWord) { return (int) ((HiWord << 16) | (LoWord & 0xffff)); }
hWnd = WinApi.FindWindow(listBox1.SelectedItem.ToString()); WinApi.SendClick(hWnd, 1219, 157); |
aber das funzt nit weiß wer wieso??
jaenicke - Mo 06.07.09 23:31
Dazu solltest du lieber eine entsprechende Frage im C#-Teil des Forums aufmachen. ;-)
Popov - Di 07.07.09 00:15
Comp-Freak hat folgendes geschrieben : |
Wie poste ich ein mouse click auf einer handle oder einem fenster?
Ich will nicht das das fenster offen und ganz vorne ist sondern irgendwo.
Kann man auch anderes posten?
Danke :) |
Suchst du sowas?
Siehe Anhang:
FragSalat - Di 07.07.09 22:22
was macht dieses prog????
und es hilft 0%
Popov - Mi 08.07.09 00:38
FragSalat hat folgendes geschrieben : |
was macht dieses prog????
und es hilft 0% |
Also du solltest dich schon entscheiden was du willst. Entweder willst du fragen was das Programm macht, oder du weißt es und bist der Meinung, daß es 0% hilft. Was jetzt? Leute die nicht wissen was sie wollen, nerven nur. Also, denk noch mal in Ruhe nach was du mir sagen willst.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!