VK_SHIFT per PostMessage senden



  • Hi,

    ich möchte gern per PostMessage ein z.B. "%" oder "&" Zeichen an ein Fenster senden. Den Ascii-Wert des Zeichens zu senden klappt in meinem Fall nicht, deswegen möchte ich Shift + "5" bzw. "6" senden.

    Nur wie stelle ich das an?

    Die Ergebnisse der Boardsuche haben mir nicht wirklich weitergeholfen.

    Ich danke Euch im Voraus.
    ravel



  • Vielleicht keybd_event? Oder auch die Nachricht WM_KEYUP, WM_KEYDOWN.



  • Hi,

    nein, kein keybd_event, ich sagte PostMessage. WM_KEYUP und WM_KEYDOWN habe ich natürlich benutzt.

    Gruß
    ravel



  • Hi,

    ist es wirklich so schwer? - Ich bin noch bestimmt nicht der Erste der einen Shift-Druck per PostMessage versenden will.

    Gruß
    ravel



  • Warum willst du kein keybd_event verwenden? Ansonsten: evtl hilft es, wenn du noch WM_CHAR sendest 🙄



  • flenders schrieb:

    Warum willst du kein keybd_event verwenden? Ansonsten: evtl hilft es, wenn du noch WM_CHAR sendest 🙄

    Hi,

    weil das empfangende Fenster im Hintergrund ist und auch dort bleiben soll.
    WM_CHAR zusätzlich mitzusenden habe ich auch bereits getestet, leider ohne Erfolg.

    Ich wäre also für weitere Hilfe sehr Dankbar!

    Gruß
    ravel



  • Wirklich Ahnung habe ich davon auch nicht, aber evtl. kannst du über AttachThreadInput und dann SendInput o.ä. was machen 🕶



  • Hi!

    Also flenders, dafür dass Du keine Ahnung hast, hast Du aber ziemlich in Schwarze getroffen und dafür danke ich Dir! 👍

    Hier erstmal die wichtigsten Stellen meines Codes:

    hwnd = FindWindow(0,"Fenstertitel");
    DWORD fenster=0;
    DWORD self = GetCurrentThreadId();
    GetWindowThreadProcessId(hwnd,&fenster);
    
    AttachThreadInput(fenster,self,true); //attach
    
    UINT scancode = MapVirtualKey(VK_SHIFT,0);
    KEYBDINPUT ki;
    INPUT ipEvent;
    UINT nNumEvents;
    ki.wVk= VK_SHIFT;
    ki.wScan=scancode;
    ki.dwFlags=KEYEVENTF_EXTENDEDKEY;
    ki.time=0;
    ki.dwExtraInfo=0;
    ipEvent.type=INPUT_KEYBOARD;
    ipEvent.ki=ki;
    
    SendInput(1,&ipEvent,sizeof(ipEvent));
    // Hier der PostMessage kram
    AttachThreadInput(fenster,self,false);  // detach
    

    Ein paar Fragen habe ich aber trotzdem noch.
    - Mit dem Code setze ich scheinbar ein globales SHIFT_DOWN, geht das auch nur für das gewünschte Fenster? Hab ich evtl. beim AttachThreadInput einen Fehler gemacht?
    - Wie kann ich Shift wieder loslassen bzw. den gedrückten Zustand aufheben? Nochmals SendInput(1,&ipEvent,sizeof(ipEvent)); zu senden hat leider nicht geklappt.
    - Kann mal jemand den Code durchsehen, gibts daran noch irgendetwas zu verbessern?

    Ich danke im Voraus und nochmal ein großes Dankeschön an flenders! (malwieder)

    Gruß
    ravel



  • AAAAHHHH!!

    Ich beiß gleich ins Keyboard (und brauch dabei nichtmal Shift zu treffen), denn diese PostMessage Nachricht macht genau das was ich will, nämlich das "/"-Zeichen senden:

    PostMessage(hwnd, WM_CHAR, 47, 0x80001);

    Naja, wenigstens habe ich jetzt was gelernt...

    PS: Hoch lebe Winspector!

    Gruß
    ravel


Anmelden zum Antworten