PostMessage, was mache ich falsch??
-
Hab euch mal das wichtigste aus meinem Programm rauskopiert
HWND hwnd = FindWindow(NULL, "Minesweeper"); // <- Das Fenster an das ich sende cout << hwnd << endl; // <- Zum Test ob der was valides als hwnd hat Sleep(4000); // <- damit ich zeit Hab zum Test in das Programm zu switchen SetCursorPos(100,15); // <- Maus Position aendern PostMessage(hwnd, VK_LBUTTON, NULL, NULL); // <- Linke Maustaste, keine Parameter
Ausgabe auf der Konsole:
0x0174008E
Ich switche in das Programm,
er bewegt die Maus, aber der Gewünschte Klick bleibt aus.
Ich wäre euch sehr Dankbar wenn ihr mir sagt was ich falsch macheMit freundlichen Grüßen
-
Msg
[in] Specifies the message to be posted.
-
Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
nimm besser mouse_event() oder SendInput() dafür ...
-
Ok danke fuer die Tipps,
mitmouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
habe ich es schliesslich hinbekommen, wie net schon gesagt hat
Hmm iergendwie ist mir das Suspekt,
ich versuche es grade mit SendImput,
laut microsoft (Header: Winuser.h
)
befindet sich die Funktion in Winuser.h, bei mir
sagt er aber undeclared identifier...
-
1. windows.h nehmen...
2. SendMessage Hätte auch gefunzt hättest de WM_LBUTTONDOWN und dann noch WM_LBUTTONUP geschickt;)
-
(D)Evil schrieb:
1. windows.h nehmen...
2. SendMessage Hätte auch gefunzt hättest de WM_LBUTTONDOWN und dann noch WM_LBUTTONUP geschickt;)Ok danke,
ich bentuze jetztPostMessage(hwnd, MOUSEEVENTF_LEFTDOWN, NULL, NULL); PostMessage(hwnd, MOUSEEVENTF_LEFTUP, NULL, NULL);
Kompetente hilfe hier
Grüße
-
Oh nein was du machst ist völlig falsch.
-
Naja... ich war es zwar net, aber mein vorposter hat recht. Guck dir mal in der MSDN folgendes an: WM_LBUTTONDOWN Notification und WM_LBUTTONUP Notification und wenn de das dann nutzen willst kannst de bsw folgendes Makro nutzen MAKELPARAM ...
Also du musst als 1. Parameter die Linkemaustaste angeben also MK_LBUTTON (oder NULL sollte es auch tuen!) und als 2. dann die Mauskoordinaten in Low und High Word verpackt...
-
PostMessage(hwnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(mPos.x, mPos.y)); PostMessage(hwnd, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(mPos.x, mPos.y));
funktioniert nicht
-
sd333221 schrieb:
funktioniert nicht
Was heißt hier bitte 'funktioniert nicht' ...gehts n bissl genauer ?
Wie testes du den, ob es funktioniert ?
Ich würde das auch nicht via WM_LBUTTONUP/DOWN machen, sondern via WM_COMMAND,
wenn ich deine Intention richtig verstanden habe :p .sd333221 schrieb:
SetCursorPos(100,15); // <- Maus Position aendern
Und wenn einer das Fenster verschiebt ?!
-
CodeFinder schrieb:
sd333221 schrieb:
SetCursorPos(100,15); // <- Maus Position aendern
Und wenn einer das Fenster verschiebt ?!
Das spielt erstmal keine Rolle,
ich werde da später noch eine Lösung finden
(Fenster wird oben links gelockt)Muss mich allerdings korrigieren,
PostMessage(hwnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(mPos.x, mPos.y)); PostMessage(hwnd, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(mPos.x, mPos.y));
funktioniert doch, aber leider nur jedes dritte mal wenn es aufgerufen wird ^^
Naja lassen wir das, ich benutze jetzt
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
und bin zufrieden damit
Es geht nurnoch darum dass bei
if(GetAsyncKeyState(VK_NUMPAD1))
Wenn man die Taste drückt die Funktion nich 5 mal sondern nur ein mal
aufgerufen wirdNajo habs erstmal mit nem Sleep(100);
Delay gemacht