Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Mehrfacher Programmstart

Empfohlene Antworten

Veröffentlicht

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

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?

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.

  • 2 Wochen später...

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.