Jump to content
Melde dich an, um diesem Inhalt zu folgen  

Mehrfacher Programmstart

Empfohlene Beiträge

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"!

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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?

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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()

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Nimm an der Diskussion teil

Du kannst jetzt hier posten und Dich später registrieren. Wenn Du bereits über eine Konto verfügst, melde Dich jetzt an, um mit Deinem Konto zu posten.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Melde dich an, um diesem Inhalt zu folgen  

Fachinformatiker.de, 2019 SE Internet Services

fidelogo_small.png

if_icon-6-mail-envelope-closed_314900.pnSchicken Sie uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App


Get it on Google Play

Kontakt

Hier werben?
Oder senden Sie eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...

Wichtige Information

Fachinformatiker.de verwendet Cookies. Mehr dazu in unserer Datenschutzerklärung