Prozess aus Taskleiste beenden

03/20/2012 15:34 Zwawo#1
Hay, bis jetzt habe ich 2 möglichkeiten einen Prozess zu beenden. Die erste beendet sie leider nur wenn das fenster im moment offen ist, die zweite gefällt mir überhaupt nicht. Vielleicht könntet ihr mir noch andere möglichkeiten zeigen.

Ich nehme jetzt als Beispiel MSN.
Nr. 1:
Code:
        HWND hwndmsn;
	HANDLE handlemsn;
	DWORD processIdmsn;
	DWORD exitmsn;

        hwndmsn = FindWindow(0, L"Windows Live Messenger");
	
	
	if (!hwndmsn)
	{
		cout << "MSN wurde nicht gefunden oder ist schon beendet\n" << endl;
		
	}
	else 
	{
	GetWindowThreadProcessId(hwndmsn, &processIdmsn);
	
	handlemsn = OpenProcess(PROCESS_ALL_ACCESS, false, processIdmsn);
	GetExitCodeProcess(handlemsn, &exitmsn);
	
	TerminateProcess(handlemsn, exitmsn);

	cout << "MSN wurde beendet\n" << endl;
       }
Die erste möglichkeit funktioniert leider nur wenn das Fenster auch offen ist.

Nr. 2:

Code:
 
system("taskkill /f /im msnmsgr.exe");
Die 2. Möglichkeit gefällt mir ganz und garnicht, gibt es da nicht vlt. noch was anderes?
03/20/2012 15:47 Omdi#2
[Only registered and activated users can see links. Click Here To Register...]

EndTask könnte man auch noch verwenden O;
03/20/2012 15:52 Zwawo#3
Das eigentliche Problem ist ja, dass ich bei den meisten Funktionen vorher das HWND über
FindWindow() bekommen muss, dies aber nicht funktioniert wenn der Prozess nur in der Taskleiste ist.
03/20/2012 15:56 Omdi#4
Dann nimm die Funktion und machs mit TerminateProcess O;



PHP Code:
HANDLE GetProcessHandle(const char *process_nameDWORD dwAccess//by Null
{
HANDLE hProcessSnap;
HANDLE hProcess;
PROCESSENTRY32 pe32;


hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

if(
hProcessSnap==INVALID_HANDLE_VALUE)
  {
    
cerr <<"Failed to create process snapshot!";
    return 
INVALID_HANDLE_VALUE;
  }

pe32.dwSize=sizeof(PROCESSENTRY32);

if(!
Process32First(hProcessSnap,&pe32))
  {
      
cerr <<"Process32First() failed\n";
      return 
INVALID_HANDLE_VALUE;
  }

do
  {
    if(
strcmp(pe32.szExeFile,process_name)==0)
        return 
OpenProcess(dwAccess,0,pe32.th32ProcessID);

  }while(
Process32Next(hProcessSnap,&pe32));
return 
0;

PHP Code:
HANDLE handle 0;
while(!
handle)
{
handle GetProcessHandle("bla.exe",PROCESS_ALL_ACCESS);
Sleep(10);
}
TerminateProcess(handle,0); 
03/20/2012 16:00 jacky919#5
Hab das hier, wurde ja im Grunde schon gepostet:
Code:
#include <windows.h>
#include <TlHelp32.h>
#include <tchar.h>

bool KillProcess(TCHAR* szProcessName)
{
	HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	if(hSnap != INVALID_HANDLE_VALUE)
	{
		PROCESSENTRY32  process;
		process.dwSize = sizeof(PROCESSENTRY32);
		Process32First(hSnap, &process);
		do
		{
			if(!_tcscmp(process.szExeFile, szProcessName))
			{
				HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, process.th32ProcessID);
				if(hProcess != INVALID_HANDLE_VALUE)
				{
					DWORD dwExitCode = 0;
					GetExitCodeProcess(hProcess, &dwExitCode);
					TerminateProcess(hProcess, dwExitCode);
					if(CloseHandle(hProcess) != FALSE)
						return true;
				}
			}
		} while(Process32Next(hSnap, &process));
		CloseHandle(hSnap);
	}
	return false;
}

int main()
{
	KillProcess(L"Project1.exe");

	return 0;
}