GetActiveWindow() Problem



  • Hallöle

    Hab ne Anwendung, die per ShellExecute eine vorher ausgewählte Datei öffnet.

    Nach dem ShellExecute will ich mir von dem eben geöffnetem Fenster den Window Titel holen

    ShellExecute(NULL,"open",m_strDatei,NULL,NULL,SW_SHOW);
    CWnd *test = CWnd::GetActiveWindow();
    test->GetWindowText(m_strName);
    

    Problem ist nur, dass er mein Dialogfenster von MEINER Anwendung als Aktives Fenster ansieht und nicht das, was ich vorher geöffnet habe.

    Hab auch schon mal AfxGetMainWnd() versucht aber das Ergebnis ist das gleiche.

    Weiß jemand wie ich das machen kann?


  • Administrator

    Hab nicht die Lösung des ganzen Problems, aber ich kann dir sagen wieso deine Lösung nicht funktioniert. CWnd::GetActiveWindow ist soweit ich weiss so ziemlich das gleiche wie GetActiveWindow von der WinAPI. Einfach bekommt man halt anstatt eines HWND einen CWnd-Zeiger zurück. Bei der WinAPI-Version steht zu der Funktion noch eine interessante Bemerkung:

    MSDN schrieb:

    The GetActiveWindow function retrieves the window handle to the active window attached to the calling thread's message queue.

    Daher wirst du mit GetActiveWindow nie das Fenster bekommen, welche du willst, da das andere Fenster in einem anderen Thread, bzw. in einer anderen Messagequeue drin ist.

    Wenn du den Titel des Fensters wüsstest, dann könntest du es mit CWnd::FindWindow versuchen. Obwohl ich auch nicht so genau weiss, wann denn eigentlich ShellExecute genau sich beendet. Je nach dem ist das Fenster dann noch gar nicht aufgebaut, sondern einfach mal das Programm gestartet oder was auch immer.

    Grüssli



  • jeppa

    hab auch schon alles mögliche versucht

    hab hier noch nach x möglichen sachen gesucht und bin dann doch wahrscheinlich auf eine Lösung gestoßen

    und zwar kann ich das net mit der shellexecute machen, sondern muss dafür extra nen prozess starten, mit dessen id ich dann weiter arbeiten muss

    ist aber alles ein wenig kompliziert, aber wird mir wohl nichts anderes übrig bleiben *ggg*

    hatte auch schon versucht, nen neuen HWND (erster Parameter der shellExecute) zu erzeugen in dessen er dass dann ausführt. damit hätte ich ja auch zeiger und könnte weitermachen

    aber was macht er? lange zunge 🙂


Anmelden zum Antworten