Tastatureingabe an fremde Anwendung(inaktiv) senden. Wie?



  • Hallo,

    ich bastle, mittlerweile verzweifelt, in meiner Anwendung Tastendrücke zu simulieren und an eine fremde Anwendung zu senden.

    Der Focus soll dabei bei meiner Anwendung bleiben bzw. zurückkehren.

    Das WindowHandle habe ich, die Virtual-Key Codes (VK_*) rufe ich aus einem Array (keycodearray) auf.

    Mein Problem ist, dass im Beispiel auf die Anforderung des Tastendrucks 'e' zur Laufzeit folgende Variablenwerte auftauchen:

    tmp_keycode = 69
    key = 325
    scancode = 0 ???

    Wieso ist scancode = 0 ?

    Wer hat einen Tip für mich wie es funktionieren könnte.

    Danke, Erik

    Codebeispiel:

    /* Ausschnitt Beginn */
    // PostMessage
    if (s_block.prozess1bool)
    {
    BYTE buffer[256];
    if (s_block.zusint = 3) // Shift gedrückt
    {
    GetKeyboardState(buffer);
    buffer[VK_SHIFT]=1;
    SetKeyboardState(buffer);
    }
    UINT tmp_keycode = m_daten->keycodearray.GetAt(s_block.tabint);
    short key = VkKeyScan(tmp_keycode);
    UINT scancode = MapVirtualKey(key,0);
    postmessagex(handle1,WM_KEYDOWN,key,(scancode<<16)+1);
    postmessagex(handle1,WM_CHAR,key,(scancode<<16)+1);
    postmessagex(handle1,WM_KEYUP,key,(scancode<<16)+0xc0000001);
    if (s_block.zusint = 3) // Shift gedrückt
    {
    buffer[VK_SHIFT]=0;
    SetKeyboardState(buffer);
    }
    }
    /* Ausschnitt Ende */

    Dieser Funktionsaufruf ist global ausgelagert, weil ich es nicht schaffe, diese Funktion aus meiner Klasse aufzurufen (Ich will nicht CWnd::PostMessage haben). Daran hängts aber nicht...

    BOOL postmessagex( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
    {
    return PostMessage(hWnd, Msg, wParam, lParam);
    }
    (Anregung von: Chrisi_K am 10.08.2004 um 17:08:43)

    Nebenfrage: Wie rückt ihr hier im Forum Quellcode ein?


Anmelden zum Antworten