Prozess



  • Im Debugmodus auf Menü Debug->Threads.
    Das sollte helfen.

    Ansonsten lass dir doch einfach eine MessageBox() ausgeben wenn der Thread beendet wird.



  • ???

    ich will doch nix mit Threads.. es geht doch um Prozesse 😕



  • strg + alt + entf Taskmanager Reiter Prozesse *gg* 😃

    kannst ja mal bei Codeguru und so weiter nach PID suchen, vielleicht bringt dich das weiter



  • hab ich bereits, aber da komme ich nicht weiter.

    ich möchte die info natürlich zur Laufzeit. kenne nur den Prozessnamen.



  • der Prozess dessen Prozessname dir bekannt ist, Hast du den selbst geschrieben? Weil wenn ja kannst ja nen gemeinsamen Speicherbereich einrichten in dem du ne Variable setzt wenn das Programm geöffnet ist oder du machst dir ne Pipe bzw. named-Pipe
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore98/html/_crt__popen.2c_._wpopen.asp
    Wobei du natürlich auf Raceconditions achten musst wenn du nen gemeinsamen Speicherbereich anlegst



  • nein, der Prozess ist nicht von mir 🙂



  • Ist das Problem nicht klar, oder kennt ihr einfach keine Lösung?

    Ich möchte doch lediglich feststellen, ob ein Programm gestartet ist oder nicht. Ich dachte, ich mache das am besten über den Prozess, aber vielleicht kennt ihr ja auch eine andere Möglichkeit!?!?



  • Du könntest vielleicht mit EnumProcesses(...) alle Prozesse bestimmen.
    Dann (in einer Schleife) mit OpenProcess(...) zu jedem Prozess ein Handle besorgen.
    Dann mit EnumProcessModules(...) überprüfen, ob es ein gültiger Prozess ist.
    Dann mit GetModuleBaseName(...) den Prozessnamen bestimmen und mit dem bekannten vergleichen.

    Keine Ahnung, ob es auch einfacher geht.

    ^Und keine Ahnung, ob es so überhaupt funktioniert...^



  • #include <tlhelp32.h> 
    
    bool CProzesse::Suche_Prozess(CString oProzess)
    {
    	typedef BOOL(WINAPI *TH32_PROCESS)(HANDLE hSnappyShot, LPPROCESSENTRY32 lppe);
    	static TH32_PROCESS pFirst = NULL; 
    	static TH32_PROCESS pNext  = NULL;
    	bool bGefunden=false;
    	PROCESSENTRY32 processentry32 = { 0 };
    	HANDLE hSnappyShot            = NULL;
    	HINSTANCE hDll                = LoadLibrary("kernel32.dll");
    
    	pFirst = (TH32_PROCESS)GetProcAddress(hDll, "Process32First");
    	pNext  = (TH32_PROCESS)GetProcAddress(hDll, "Process32Next");
    	hSnappyShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);              
    	if(hSnappyShot != (HANDLE)-1)
    	{
    		processentry32.dwSize = sizeof(PROCESSENTRY32);
    		int iProcs = 0, iThreads = 0;
    		if(pFirst(hSnappyShot, &processentry32))
    		{		
    			do
    			{					
    				iThreads += processentry32.cntThreads;
    				iProcs++;
    				int test=processentry32.th32ProcessID;
    				int t1=processentry32.pcPriClassBase ;
    				if (oProzess==processentry32.szExeFile)
    				{
    					bGefunden=true;
    				}
    				//pList->InsertItem(pList->GetItemCount()+1,processentry32.szExeFile);
    				//pList->SetItem(pList->GetItemCount()-1,1,LVIF_TEXT,test3,0,0,0,0);
    				//pList->SetItem(pList->GetItemCount()-1,2,LVIF_TEXT,test4,0,0,0,0);
    			}
    			while(pNext(hSnappyShot, &processentry32));
    		}
    		CloseHandle(hSnappyShot); 
    	}	
    	return bGefunden;
    }
    

    dass es bei codeguru und so weiter(codeproject.com) nix gibt kann eigentlich nicht sein.

    Esco

    PS: das ding geht nur fuer prozesse, nicht fuer dienste, da wirds dann bissle aufwaendiger.



  • Danke Esco, danke isabeau

    ich habe es jetzt so gelöst, wie isabeau es vorgeschlagen hat ( es ging also ) 🙂

    Allerdings durchlaufe ich so die handles aller module der jeweiligen Prozesse. Das sind nicht wenige...

    Frage 1: mit wievielen Modulen pro Prozess muss ich rechnen?

    Frage 2: kann ich das auch vermeiden? muss doch auch eine Funktion geben, die direkt den Prozessnamen angibt oder?

    Thank You !!



  • @ Little Bird

    könntest du vielleicht posten wie du deinen Code nun geschrieben hast, den ich bräuchte ihn auch, aber irgendwie mach ich da etwas falsch!

    LG FLo


Anmelden zum Antworten