The Master of Disaster Geschrieben 18. April 2003 Geschrieben 18. April 2003 Ich schreibe gerade eine Anwendung, die nur einmal zurzeit gestartet werden soll. Das Problem war leicht mit einem benannten Mutex gelöst. So, jetzt mein Problem: Ich möchte, dass beim wiederholten Startversuch der Anwendung die schon existierende Anwendung in den Vordergrund gebracht wird. So wie es beim mehrfachen Start von z.B. Outlook ist. Ich weiß bis jetzt soviel, dass ich zu einem schon existierenden benannten Mutex mit HANDLE hMutex; hMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, "NameOfMutexObject"); ein Handle bekomme. Aber wie geht es jetzt weiter? Schon mal vielen Dank und bitte keine klugen Sprüche wie "Such mal mit Google"!
The Master of Disaster Geschrieben 18. April 2003 Autor Geschrieben 18. April 2003 Ich habe mich an einer Delphi Lösung orientiert: http://www.del-net.com/delphi/topic1.html Hierbei wird mit dem Klassennamen des Fensters gearbeitet. Da ich ungern den Klassennamen im Quelltext hart reinhacken möchte, stehe ich nun vor dem nächsten Problem. Kann ich über den benannten Mutex an das dazugehörige Fenster gelangen?
Crush Geschrieben 18. April 2003 Geschrieben 18. April 2003 Schade, weil ich genau so etwas vorbereitet hatte... // lösung, falls schon 2 fenster geöffnet sind (findet das eigene immer zuerst) // ansonsten nur einmal FindWindow aufrufen CWnd * cw; cw = FindWindow( 0, "Fenstername" ); CString rg; while ( cw = cw->GetNextWindow() ) { cw->GetWindowText( rg ); if ( rg == "Fenstername" ) { cw->BringWindowToTop(); break; } } Über den Mutex hast Du glaube ich keine Chance an den Prozess oder das Fenster ranzukommen. Du könntest ja im schlimmsten Fall über eine Datei oder einen Registry-Eintrag (den Du halt wieder löschen mußt) Infos übers Hauptfenster weiterreichen. Das wäre aber nicht unbedingt die feine Art.
Shlo Geschrieben 27. April 2003 Geschrieben 27. April 2003 Eine andere Möglichkeit wäre CWnd* MyInstance = CWnd::FindWindow(NULL,"Fenstername"); if (MyInstance !=NULL) { if (MyInstance->IsIconic()) { MyInstance->ShowWindow(SW_RESTORE); } else { MyInstance->SetForegroundWindow(); return TRUE; } } alles muss ins InitInstance()
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden