FindWindow überprüfen



  • Hi,

    mit FindWindow prüfe ich ob ein nicht modaler Dialog meiner Anwendung
    bereits durch den Nutzer "abgeschossen"/beendet wurde.

    HWND meindia=::FindWindow(NULL,"Mein Dialog");
    
    if(!meindia)
    {
    
    MessageBox("Der Dialog ist nicht mehr da!");
    
    }else if (meindia)
    {
    
    MessageBox("Der Dialog ist noch da und muss nicht neu gestartet werden!",MB_ICONINFORMATION);
    
    }
    

    Diese Abfrage wird immer gestartet, sobald der Nutzer diesen Dialog
    nochmal aufrufen will. Damit möchte ich verhindern, dass der Dialog
    plötzlich 100 mal da ist 🙄

    Nur ist es jetzt so, dass ich den Dialog mal mit Alt+F4 beendet habe und
    dann meine Funktion noch immer sagt, dass der Dialog noch da ist 😕

    Liegts evtl. daran?

    MSDN: This function does not search child windows.



  • Ich seh schon dass ich FindWindoEx nehmen muss. Aber hier findet er mir
    mein childfenster nicht?

    Aber müsste doch so gehen. Ich seh den Fehler nicht!

    HWND parent = ::FindWindow(NULL, "Mein Test Prog");
    HWND child = ::FindWindowEx(parent, NULL, NULL, "Mein Dialog");
    
    if(!child)
    {
    
    MessageBox("Der Dialog ist nicht mehr da!");
    
    }else if (child)
    {
    
    MessageBox("Der Dialog ist noch da und muss nicht neu gestartet werden!",MB_ICONINFORMATION);
    
    }
    


  • Vielleicht hat noch jemand ne Ahnung warum es so nicht geht.
    Habe erstmal ne Lösung via ->DestroyWindow.


  • Mod

    Machst Du das für ein Fenster Deiner Applikation oder ist das Fenster aus einer anderen Applikation?
    Wenn es innerhalb Deiner Applikation ist, wäre es besser ein Flag zu verwenden!



  • Ja mache ich für meine Anwendung. *Dummguck*..Flag..? 😕
    Bitte um kurze Erläuterung.



  • hmm
    du könntest es auch wie folgt machen setzt den code in die InitInstance() der ...App Classe bevor dein Hauptdialog mit DoModal gestartet wird

    HANDLE handle = CreateMutex(NULL, true, "NameDeinerAnwendung");
    
    if(GetLastError() != ERROR_SUCCESS)
    {
    	MessageBox(0,"Anwendung wurde schon gestartet!!", "Warnung", MB_ICONWARNING);
    		return FALSE;
    }
    
    .....
    
    CHauptDlg dlg;
    m_pMainWnd = &dlg;
    int nResponse = dlg.DoModal();
    if (nResponse == IDOK)
    ......
    

Anmelden zum Antworten