Zeichen an Textfeld senden



  • Hallo!

    Ich bin gerade dabei ein Programm zu schreiben, mit dem ich ein Zeichen an ein Textfeld schicken kann. Mit dem Editor funktioniert das einwandfrei. Nur bei einem anderen Fenster (In diesem Fall der "Serial Monitor" von der "Arduino 1.0"-Software) klappt das nicht.
    Ich benutze die Befehle "FindWindow()" und "FindWindowEx()" für die Handles. Das Fenster wird gefunden aber das Textfeld offenbar nicht.

    Hier der Code:

    #include <iostream>
    #include <windows.h>
    using namespace std;
    
    int main()
    {
        HWND hWnd1 = ::FindWindow(NULL, "COM3");
        HWND hWnd2 = ::FindWindowEx(hWnd1, NULL, "Edit", NULL);
    
        cout << hWnd1 << endl;
        cout << hWnd2 << endl;
        SendMessage(hWnd2, WM_CHAR, 'H', 0);
    
        return 0;
    }
    

    Das Fenster hat den Titel "COM3" und wird auch gefunden. Lediglich das "Edit"-Textfeld nicht. Ich habe mir gedacht, dass das Textfeld vielleicht anders heißt. Wenn das so ist , weiß ich aber nicht wie ich den Namen des Feldes rausfinden soll. Dasselbe habe ich beim "Editor" probiert, wo es einwandfrei funktioniert.



  • Du kannst ja erst mal alle Kindfenster ermitteln und denen was senden, dabei mal prüfen, ob das Edit-Feld dabei ist:

    http://msdn.microsoft.com/en-us/library/windows/desktop/ms633494(v=vs.85).aspx



  • Danke für die schnelle Antwort. Ich probiers gleich aus 🙂



  • Hmm...
    Ich versteh nur nicht ganz wie ich den Befehl verwenden soll. Wie bekomme ich mit der Funktion die Child-Window-Handles oder eine andere Information über das Child-Window?



  • Ich hab hier mal ein kleines Beispiel ausgegraben, das zwar keine Kindfenster sucht, sondern Hauptfenster (EnumWindows statt - EnumChildWindows) und meldet, wenn der Windowsrechner (Start/Programme/ZubehörRechner) gestartet ist.
    Das solltest Du mit Hilfe der Informationen aus dem o.g. Link bzw. nach ein paar Experimenten für Deine Zwecke anpassen können ...

    #include "windows.h"
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam)
    {
        char title[512];
    
        GetWindowText(hWnd, title, sizeof(title)/sizeof(title[0]));
    
        string str(title);
    
        if(str == "Rechner")
        {
        	cout << "Rechner gefunden!" << endl;
    
        	/*if(IsWindowVisible(hWnd))
        		ShowWindow(hWnd, SW_MINIMIZE);
        		*/
        }
    
        return true;
    }
    
    long prc_c()
    {
        STARTUPINFO si;
        PROCESS_INFORMATION pi;
    
        ZeroMemory(&si, sizeof(si));
        ZeroMemory(&pi, sizeof(pi));
        si.cb = sizeof(si);
    
        if(!CreateProcess("c:\\windows\\system32\\calc.exe", NULL, NULL, NULL,
            FALSE, 0, NULL, NULL, &si, &pi))
        {
            cout << "execute fail";
            return 0;
        }
    
        WaitForInputIdle(pi.hProcess, INFINITE);
        return 0;
    }
    
    int main()
    {
        //prc_c();
    
        EnumWindows(EnumWindowsProc, NULL);
    
        return 0;
    }
    


  • Danke vielmals ich glaub damit kann ich das Problem lösen.


Anmelden zum Antworten