Senden Von text nach delphi, macht er nicht wo liegt der...



  • 1.) Bekommst du von FindWindowEx gültige Handles?
    2.) Was sagt GetLastError?
    3.) Sind die Childs wirklich so verschachtelt, wie angenommen (mit Spy++ oder WinSpector nachprüfen)?



  • Ich hab mal den Prozess namen ausfindig gemacht: "TfrmChat"

    ich probiere mal getlast error
    So:

    HWND hWnd = FindWindow("TfrmChat" ,0); 
    ShowErrorMsg(GetLastError()); 
    SendMessage(hWnd, WM_SETTEXT, TRUE, (LPARAM)"Knuddel"); 
    ShowErrorMsg(GetLastError()); 
    hWnd = FindWindowEx(hWnd, 0, "TXTabControl", NULL); 
    ShowErrorMsg(GetLastError()); // <--- Hier kommt Das systen kann die angegebene datei nicht finden
    hWnd = FindWindowEx(hWnd, 0, "TEditControl", NULL); 
    ShowErrorMsg(GetLastError()); // <--- Hier kommt Das systen kann die angegebene datei nicht finden
    SendMessage(hWnd, WM_SETTEXT, TRUE, (LPARAM)"ein text der hinzugefügt wird"); 
    ShowErrorMsg(GetLastError()); // <--- Ungültiges Fenster Handle
    


  • sag mal, willst du in das CodeEdit-Fenster von der Delphi IDE Text schreiben oder an ein Edit von einem mit Delphi erstellten Programm?



  • Luckie schrieb:

    mit Delphi erstellten Programm?

    An einem Delphi erstellten programm.



  • Hmpf. Dann sind meine genannten Fensterklassen natürlcih höchst wahrscheinlich falsch. Das sind die Fensterklassen vom Delphi Editor. Sag mal hat es dichnicht gewundert, dass ich dir Fensterklassen nennen, obwohl ich gar nicht weiß von was für einen Programm du redest? 🙄



  • Luckie schrieb:

    Hmpf. Dann sind meine genannten Fensterklassen natürlcih höchst wahrscheinlich falsch. Das sind die Fensterklassen vom Delphi Editor. Sag mal hat es dichnicht gewundert, dass ich dir Fensterklassen nennen, obwohl ich gar nicht weiß von was für einen Programm du redest? 🙄

    Tut mir leid, wüsstest du denn noch andere class namen `?



  • Sheppard schrieb:

    Ich hab mal den Prozess namen ausfindig gemacht: "TfrmChat"

    ich probiere mal getlast error
    So:

    HWND hWnd = FindWindow("TfrmChat" ,0); 
    ShowErrorMsg(GetLastError());
    

    Der erste Parameter bei FindWindow ist der TITEL des Fensters.

    Steht im Titel Deiner Anwendung (das ist der Dicke Rahmen oban am Fenster mit dem Maximieren-, Minimieren- und Schließen-Button ganz rechts) wirklich "TfrmChat"?

    Irgendwas in mir möchte das nicht so ganz glauben...



  • Nein, der erste ist der Klassenname, zumindest nach meiner PSDK Doku. 😉

    Sheppard schrieb:

    Tut mir leid, wüsstest du denn noch andere class namen `?

    Ich könnte dir dutzende nennen. Aber was bringt dir das? Es sei denn du willst alle durchprobieren. Wäre es nicht sinnvoll endlich mal den Spy anzuwerfen und mal selber nachzukucken. 🙄



  • @Sheppard: Es wird wirklich höchste Zeit, dass du mal das, was du als Antworten bekommst auch auszuprobieren.
    Also schau endlich mit Spy++ bzw. Winspector nach, wie deinen Fenster verschachtelt sind.

    @Luckie: Dann hatte ich mit meiner Infragestellung der Fensterklassen-Namen also doch recht :p 😉



  • Luckie schrieb:

    Nein, der erste ist der Klassenname, zumindest nach meiner PSDK Doku. 😉

    Ach shit, ja, hast natürlich Recht!

    Ich bin beim quoten durch das FindWindowEx durcheinandergekommen... 🤡



  • flenders schrieb:

    @Sheppard: Es wird wirklich höchste Zeit, dass du mal das, was du als Antworten bekommst auch auszuprobieren.
    Also schau endlich mit Spy++ bzw. Winspector nach, wie deinen Fenster verschachtelt sind.

    @Luckie: Dann hatte ich mit meiner Infragestellung der Fensterklassen-Namen also doch recht :p 😉

    Ich habe es schon mit Spy++ Auseinander genommen, und da heisst das input "Edit"

    EDIT:

    So, ich hab mich nun mal ganz befasst, hier mal der src:

    HWND hWnd = FindWindow("TfrmChat", 0); // GEht
    ShowErrorMsg(GetLastError()); 
    //hWnd = FindWindowEx(hWnd, 0, "TXTabControl", NULL); // Findet er nicht
    //ShowErrorMsg(GetLastError()); 
    hWnd = FindWindowEx(hWnd, 0, "Edit", NULL); // Geht
    ShowErrorMsg(GetLastError()); 
    SendMessage(hWnd, EM_REPLACESEL, 0, (LPARAM)"ein text der hinzugefügt wird"); // ungültiges fenster handle
    ShowErrorMsg(GetLastError());
    

    Nun weiss ich nicht, wie ich das mit SendMessage machen soll.
    Kann mir jemand tip geben ?



  • Bist du dir absolut sicher, dass du von deinem FindWindowEx Aufruf ein gültiges (und das richtige - evtl. gibt es ja auch mehrere EDIT-Childs, das würdest du dann in Spy++ sehen) Handle bekommst?
    Ich habe den Code nämlich mal mit Notepad getestet (also TfrmChat durch Notepad ersetzt) und da funktioniert er einwandfrei 😉



  • flenders schrieb:

    Bist du dir absolut sicher, dass du von deinem FindWindowEx Aufruf ein gültiges (und das richtige - evtl. gibt es ja auch mehrere EDIT-Childs, das würdest du dann in Spy++ sehen) Handle bekommst?
    Ich habe den Code nämlich mal mit Notepad getestet (also TfrmChat durch Notepad ersetzt) und da funktioniert er einwandfrei 😉

    Ja, Spy++ zeigt mir das fenster wo man was reinschreibt als Edit an.

    Class: Edit

    Da kann doch nix falsch sein oder ?



  • Ist dieses Edit auch ein direktes Child des Haupt-Fensters?
    hWnd sollte auf jeden Fall != NULL sein - ansonsten: Was liefert dein GetLastError?



  • flenders schrieb:

    Ist dieses Edit auch ein direktes Child des Haupt-Fensters?
    hWnd sollte auf jeden Fall != NULL sein - ansonsten: Was liefert dein GetLastError?

    hWnd = FindWindowEx(hWnd, 0, "Edit", NULL); // Geht

    Da kommt das es geht.

    EDIT: Könnte es auch am SendMessage liegen ?



  • Wie gesagt, bei mir klappt es so mit dem EDIT des Notepad - evtl. versuchst du es zum Test damit einmal 😉



  • flenders schrieb:

    Wie gesagt, bei mir klappt es so mit dem EDIT des Notepad - evtl. versuchst du es zum Test damit einmal 😉

    Notepad geht damit.

    Nur bei: SendMessage(hWnd, EM_REPLACESEL, 0, (LPARAM)"ein text der hinzugefügt wird");

    Kommt ungültiges fenster handle könntest du mir das erklären ?



  • Das mit den ungültigen Fester-Handle sagst du jetzt aber auch zum ersten Mal!
    Also mit dem Notepad klappt das ganze bei dir jetzt auch?! Kann es sein, dass du den gepostetet Quelltext falsch eingebaut hast (poste mal bissl Code außenrum) 😕



  • flenders schrieb:

    Das mit den ungültigen Fester-Handle sagst du jetzt aber auch zum ersten Mal!
    Also mit dem Notepad klappt das ganze bei dir jetzt auch?! Kann es sein, dass du den gepostetet Quelltext falsch eingebaut hast (poste mal bissl Code außenrum) 😕

    Gesamter code, aber ich hab die getlasterror sachen bei den commands als kommentar geschrieben.

    #include <stdio.h> // standard-io
    #include <windows.h>    // windows-sdk für SendMessage() und FindWindows()
    #include <stdlib.h>
    #include <string.h>
    #include <iostream.h>
    
    INT WINAPI ShowErrorMsg(DWORD dwLastError) 
    { 
       UINT iResult; 
       LPVOID szLastError; 
    
       FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwLastError, 0, (LPTSTR)&szLastError, 0, NULL); 
       iResult = MessageBox(NULL, (char*)szLastError, "Error:", MB_OK | MB_ICONWARNING); 
    
       return iResult; 
    } 
    
    int main () {
    HWND hWnd = NULL;
    HWND hWnd2 = NULL;
    	hWnd = FindWindow("TfrmChat", 0); // GEht
    ShowErrorMsg(GetLastError()); 
    //hWnd = FindWindowEx(hWnd, 0, "TXTabControl", NULL); // Findet er nicht
    //ShowErrorMsg(GetLastError()); 
    hWnd2 = FindWindowEx(hWnd, 0, "Edit", NULL); // Geht
    ShowErrorMsg(GetLastError()); 
    SendMessage(hWnd2, EM_REPLACESEL, 0, (LPARAM)"ein text der hinzugefügt wird"); // ungültiges fenster handle
    ShowErrorMsg(GetLastError());
    	return 0; 
    
    }
    


  • Wenn der FindWindowEx-Aufruf erfolgreich ist kann nicht direkt dahinter plötzlich das Fenster-Handle ungültig sein! Hast du hWnd2 mal direkt auf != NULL gecheckt, oder warum bist du dir so sicher, dass der Aufruf erfolgreich war? Und sag mal genau, welches GetLastError was liefert.


Anmelden zum Antworten