Prüfen ob foo.exe läuft
-
Hallo wie schon in der Überschrift geschrieben möchte ich prüfen ob ein Programm von dem ich nur den Dateiname kenne läuft oder nicht
die Möglichkeit übers Fenster geht leider nicht da es ein service ist.
-
siehe: http://www.henkessoft.de/C++/MFC/mfc_einsteigerbuch_kapitel17.htm
Klassische Variante mittels ::FindWindow(...):
if( ::FindWindow("GesuchterKlassenName","GesuchterFensterTitel") ) { ::PostQuitMessage(0); return 0; }Moderne Variante mit Mutex:
BOOL CMeinProgramm :: InitInstance() { BOOL Flag = FALSE; HANDLE hMutex = ::CreateMutex (NULL, TRUE, "Mutex_zur_Verhinderung_eines_Doppelstarts"); if( GetLastError() == ERROR_ALREADY_EXISTS ) Flag = TRUE; if( Flag ) { AfxMessageBox( "Ein Mehrfachstart wurde erfolgreich verhindert" ); return FALSE; } // m_pMainWnd = new CFenster(); // m_pMainWnd->ShowWindow(m_nCmdShow); // m_pMainWnd->UpdateWindow(); return TRUE; }EDIT: oh, sorry, Missverständnis, das war Verhinderung von Mehrfachstart. Naja, ich lass es mal stehen.

-
-
ooh also bleibt anscheinend nur die Methode über diesen Snapshot oder?
ist die funktion eigentlich sehr prozessorlastig?
oder kann man da irgendwas optimieren um nicht jedesmal erst alle prozesse durchprüfen zu müssen?
-
OpenService?
-
sorry da hab ich grad geschlampt
das mit OpenService kenn ich und so mache ich das in dem Programm auch der weg über Prozess ist eigentlich eher ne fallback-methode z.b. für win98(sollte es da funktionieren oder wenn der Virenscanner mal doch kein Service sein)
somit stimmt meine Angabe auch nicht das ich über den namen der exe gehen will weils ein service ohne fenster ist sondern es geht darum das ich den Anwender eben nicht zumuten kann erst mit hilfstools den namen von versteckten fenstern zu finden
aber mal schauen vielleicht baue ich die version find window mal sicherheitshalber zusätzlich ein
so viel platz nimmt die ja nicht weg