Text mit WM_CHAR in PostMessage an Editor senden



  • Woher hast du denn "FindFirstChild"... ist des ein Befehl?? aber ich habs schon mit so einigen variationen probiert, auch mit "FindWindow("Notepad", NULL)" aber es geht halt irgendwie nicht... ClassName vom Textfeld des Editors ist übrigens einfach nur "Edit".


  • Mod

    Man kann Tastatureingaben nicht einfach mit WM_CHAR und WM_KEYDOWN Nachrichten simulieren.

    Korrekt funktioniert es nur über SendInput bzw. keybd_event.



  • kingofmovies schrieb:

    Woher hast du denn "FindFirstChild"... ist des ein Befehl?? aber ich habs schon mit so einigen variationen probiert, auch mit "FindWindow("Notepad", NULL)" aber es geht halt irgendwie nicht... ClassName vom Textfeld des Editors ist übrigens einfach nur "Edit".

    Okay - GetFirstChild heißt der Befehl (hatte keine Doku offen) - is aber IMO auch nur n Define.

    Zum Teil geht das schon über die Nachrichten (siehe irgend so n Thread von vor Kurzem) - aber ich würds auch lieber über SendInput machen - is aber Ansichtssache ^^

    Greetz 🙂



  • So weit ich weiß, kann man mit WM_CHAR keinen Text schicken. WM_CHAR ist die Nachricht, daß eine Buchstabentaste gedrückt wurde. wParam hat nur WORD-Breite, also max. 32 Bit. Es dürfte daher nur den Code der gedrückten Taste enthalten.

    Du kannst den gewünschten Text in einem Char-Array zwischenspeichern. Dann schickst Du deinem Child-Window eine WM-CHAR-Nachricht. Wenn das Child diese Nachricht bearbeitet, kann dort der Text aus dem Array ausgelesen werden.



  • Also ich kriegs jetzt jedenfalls hin einzelne Buchstaben mit WM_CHAR zu verschicken und wenn ichs an mein eigenes Fenster schick dann kommt auch der richtige Buchstabe an, nur krieg ich halt net des editor-fenster raus. Wenn ich aber einfach nur mit WM_KEYDOWN ein VK_RETURN an ein ICQ-Fenster schick, in dem ich vorher was eingegeben hab, dann verschickt er die Nachricht auch, aber wenn ich dann einen Buchstaben mit WM_CHAR verschick, kommt der eben nicht an... Bei WM_CHAR funktionierts wenn ichs ans eigene Fenster schick jedenfalls so:

    char b[] = "abcdefghijklmnopqrstuvwxyz";
    PostMessage(hwnd, WM_CHAR, b[1], 0);
    


  • Martin Richter schrieb:

    Man kann Tastatureingaben nicht einfach mit WM_CHAR und WM_KEYDOWN Nachrichten simulieren.

    Über den Einwand solltest Du nachdenken. Es macht technisch keinen Sinn, daß die WM_CHAR mit PostMessage an ein anderes Fenster verschickt wird. WM_CHAR soll ja erstmal das aktuelle Fenster bedienen.
    Du kannst auch eigene Nachrichten-IDs generieren (z. B. mit "WM_USERCHAR = WM_APP+1") und die dann anstatt der WM_CHAR einsetzen.



  • also ich hab jetz rausgefunden wie ich einen Text an das Editor-Fenster vom Microsoft-Editor sende und der wird dann da auch angezeigt. Mein Problem ist jetzt nur noch dass ich des Handle vom Fenster nicht rausbekomm. Ich hab bis jetzt immer ein Programm in der Art von Spy++ (weil ich des net hab) verwendet damit ich das Handle rauskrieg. Also hier ist mal der Code wie ich den Text ans Fenster schick:

    SendMessage(hwnd1, WM_SETTEXT, (WPARAM) 256, (LPARAM) (LPCTSTR)"hallo");
    

    und so liest man den Text;

    char text[100];
    SendMessage(hwnd1, WM_GETTEXT, (WPARAM) 256, (LPARAM) text);
    

    das geht alles wenn ich das Handle manuell eingeb. Aber so bekomm ichs nicht raus...



  • Müßte doch eingentlich mit GetParent(hWnd) oder Get ModuleHandle zu machen sein.

    Übrigens ein interessantes Unternehmen. Würde mich glatt mal interessieren, den Code durchzuschauen 😉 😃



  • jetz hab ich des auch geschafft und zwar mit GetWindow. Also hier der Code:

    HWND hwnd1;
    hwnd1 = FindWindow("Notepad", NULL);
    hwnd1 = GetWindow(hwnd1, GW_CHILD);
    

    so funktionierts. und wenn ich dann noch wie gesagt

    char text[100];
    SendMessage(hwnd1, WM_GETTEXT, (WPARAM) 256, (LPARAM) text);
    

    mach dann schreibt er den text aus dem editor-fenster in "text".



  • ... und zerschießt dir damit den Speicher (du legst dir genug Platz für 100 Zeichen an und bittest dann Notepad, dir in diesen Speicher 256 Zeichen reinzupacken - rate mal, was dein Programm mit den 156 Zeichen macht, die nicht in "text" reinpassen).



  • jaaa des war halt jetz so die ganze Zeit dagestanden und ich habs halt nicht geändert aber des ist ja kein Problem oder?? 😉



  • kingofmovies schrieb:

    aber des ist ja kein Problem oder?? 😉

    "Kein Problem"? Du bezeichnest es als "kein Problem", wenn die Gefahr besteht, daß dein Programm irgendwelche Speicherinhalte überschreibt, die ihm nicht gehören? Bei der Einstellung wirst du nicht besonders weit kommen im Leben.

    Selbst wenn du es nicht schaffst, das Programm abzuschießen - deine Kunden werden es schaffen. Ud dann wünsche ich dir viel Spaß bei der Fehlersuche.
    (ich hab' dich gewarnt)



  • Man kann auch mit FindWindowEx mit der Suche nach Edit-Klasse verwenden, um das Edit Handle zu bekommen.



  • mit "kein Problem" hab ich gemeint dass es kein Problem ist den Speicher herauszufinden den er beschreiben soll also dass er halt die Textlänge herausfindet und dann halt statt 256 verwendet.


Anmelden zum Antworten