Tasten an Datei schicken funktioniert nicht.Wo liegt der Fehler?



  • Hallo
    Ich benutze folgenden Quellcode um an die Textdatei Test ein E zu schicken
    Das mach ich mit folgenden Quellcode:
    #include<windows.h>
    #include<iostream>
    using namespace std;

    int main()

    {
    SetWindowText ( FindWindow(0,"Test - Editor"),"TEST");
    Sleep(5000);
    HWND hWnd=FindWindow(NULL,"TEST");
    PostMessage(hWnd, WM_KEYDOWN,0x45,0x45);
    PostMessage(hWnd, WM_KEYUP,0x45,0x45);
    }

    Der funktioniert leider nicht
    Die Datei wird in TEST umbenannt aber es wird kein E gesendet
    Weiss jemand was dadran falsch ist?


  • Mod

    Tastatureingaben lassen sich so nicht simulieren.
    Verwende SendInput!



  • Martin Richter schrieb:

    Tastatureingaben lassen sich so nicht simulieren.

    Kann man so nicht sagen... Das Textfeld im Editor ist ein Edit-Feld und dem kannste ne WM_CHAR-Nachricht schicken. Darauf müsste es eigentlich reagieren. Inwiefern man damit ne Tastatureingabe simuliert, ist fraglich, aber dem Editor wird auf jeden Fall vorgegauckelt, dass ne Taste gedrückt wurde...

    @gdsggsfsd:
    Das Edit-Feld findest du mit FindWindowEx, Childklasse ist "EDIT".



  • Wie macht man das mit Sendinput?
    Bin aus Msdn leider nicht schlau geworden
    Kann mir jemand ne Funktion geben die Beispielweise mit Sendinput "E" drückt?



  • mhh



  • Tasten + Umschlag + Briefmarke + Adresse der Datei -> In den Briefkasten
    Den Rest macht die Post



  • KEYBDINPUT kbinput;
    INPUT      input;
    
    input.type = INPUT_KEYBOARD;
    input.ki.wVk = //... füll die ganze ki struct aus ... s. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/keyboardinput/keyboardinputreference/keyboardinputstructures/keybdinput.asp
    SendInput(1, &input, int cbSize);
    

    aja und dein Code:

    #include <windows.h>
    #include <iostream>
    
    int main()
    {
        ::HWND hEditorWnd = ::FindWindow(0, _T("Test - Editor"));
        if (hEditorWnd == NULL)
            return -1;
    
        ::HWND hEditorEditWnd = ::FindWindowEx(hEditorWnd, NULL, _T("Edit"), NULL);
        if (hEditorEditWnd == NULL)
            return -1;
    
        ::SendMessage(WM_CHAR, // füll das selber aus!
        std::cout << "Send WM_CHAR!" << std::endl;
    
        return 0;
    }
    

    Referenzen:
    FindWindowEx
    FindWindow
    WM_CHAR



  • Erklärbär schrieb:

    Tasten + Umschlag + Briefmarke + Adresse der Datei -> In den Briefkasten
    Den Rest macht die Post

    danke sehr


Anmelden zum Antworten