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 mache 🙂

    Mit 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,
    mit

    mouse_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 jetzt

    PostMessage(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 wird

    Najo habs erstmal mit nem Sleep(100);
    Delay gemacht 😡


Anmelden zum Antworten