Prozess Beenden
-
Moin,
Ich würde gern ein Programm schreiben (Konsolenanwendung) welches verschiedene Prozesse beendet. Ähnlich dem Taskmanager, wenn man auf "Prozess Beenden" klickt.
Wäre toll wenn ihr mir da Code zeigen könntet, mit dem ich das realiesieren kann,..MFG Granny
-
erstellste eine bat mit:
taskkill /F /IM dateiname.exe
^^
-
Google ist dein Freund:
Beispiel:
#include <iostream> #include <string> #include <algorithm> #include <windows.h> #include <tlhelp32.h> using namespace std; void wait_return( ); void clrscr( ); void view_processes( ); void kill_process( ); unsigned long get_pid_by_name( string name ); string get_errmsg( unsigned long error ); int main( ) { int selection; bool do_exit = false; do { cout << "Menu:" << endl; cout << "---------------------------" << endl; cout << "[ 1 ] View Processes..." << endl; cout << "[ 2 ] Kill Process..." << endl; cout << "[ 0 ] Exit" << endl; cout << "---------------------------" << endl; cin >> selection; if( cin.fail( ) ) { cout << endl << "Wrong input!" << endl; cin.clear( ); cin.ignore( cin.rdbuf( )->in_avail( ) ); wait_return( ); clrscr( ); } else { switch( selection ) { case 0: do_exit = true; break; case 1: clrscr( ); view_processes( ); wait_return( ); clrscr( ); break; case 2: clrscr( ); kill_process( ); wait_return( ); clrscr( ); break; } } } while( !do_exit ); } void wait_return( ) { cout << endl << "Press return to continue..." << endl; cin.clear( ); cin.ignore( cin.rdbuf( )->in_avail( ) ); cin.get( ); cin.clear( ); cin.ignore( cin.rdbuf( )->in_avail( ) ); } void clrscr( ) { void *con_out = GetStdHandle( STD_OUTPUT_HANDLE ); CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo( con_out, &csbi ); COORD pos; memset( &pos, 0, sizeof( COORD ) ); unsigned long chars_written; FillConsoleOutputCharacter( con_out, ' ', csbi.dwSize.X * csbi.dwSize.Y, pos, &chars_written ); SetConsoleCursorPosition( con_out, pos ); } void view_processes( ) { void *snapshot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ); if( snapshot == INVALID_HANDLE_VALUE ) { cout << "Couldn't create a snapshot of processes currently running:" << endl; cout << get_errmsg( GetLastError( ) ) << endl << endl; return; } PROCESSENTRY32 proc_entry; proc_entry.dwSize = sizeof( PROCESSENTRY32 ); if( !Process32First( snapshot, &proc_entry ) ) { unsigned long last_error = GetLastError( ); if( last_error == ERROR_NO_MORE_FILES ) { cout << "No processes are currently running." << endl; cout << "This should not be true in any case!?" << endl << endl; } else { cout << "An error occured while trying to enumerate processes currently running:" << endl; cout << get_errmsg( last_error ) << endl << endl; } CloseHandle( snapshot ); return; } do { cout << "0x"; cout.width( 6 ); cout.fill( '0' ); cout << hex << proc_entry.th32ProcessID; cout << " : " << proc_entry.szExeFile << endl; } while( Process32Next( snapshot, &proc_entry ) ); unsigned long last_error = GetLastError( ); if( last_error != ERROR_NO_MORE_FILES ) { cout << "An error occured while trying to enumerate processes currently running:" << endl; cout << get_errmsg( last_error ) << endl << endl; CloseHandle( snapshot ); return; } CloseHandle( snapshot ); } void kill_process( ) { string proc_name; cout << "Enter the name of the process you want to kill:" << endl; cin >> proc_name; unsigned long pid = get_pid_by_name( proc_name ); cout << endl; if( !pid ) { cout << "Process \"" << proc_name << "\" does not exist!" << endl; return; } void *process = OpenProcess( PROCESS_TERMINATE, false, pid ); if( !process ) { cout << "An error occured while trying to open process \"" << proc_name << "\":" << endl; cout << get_errmsg( GetLastError( ) ) << endl; return; } if( !TerminateProcess( process, 0 ) ) { cout << "An error occured while trying to terminate process \"" << proc_name << "\":" << endl; cout << get_errmsg( GetLastError( ) ) << endl; } else { cout << "Process \"" << proc_name << "\" has been killed successfully!" << endl; } CloseHandle( process ); } unsigned long get_pid_by_name( string name ) { transform( name.begin( ), name.end( ), name.begin( ), toupper ); void *snapshot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ); if( snapshot == INVALID_HANDLE_VALUE ) return 0; PROCESSENTRY32 proc_entry; proc_entry.dwSize = sizeof( PROCESSENTRY32 ); if( !Process32First( snapshot, &proc_entry ) ) { CloseHandle( snapshot ); return 0; } unsigned long pid = 0; string exe_name; do { exe_name = proc_entry.szExeFile; transform( exe_name.begin( ), exe_name.end( ), exe_name.begin( ), toupper ); if( name.compare( exe_name ) == 0 ) pid = proc_entry.th32ProcessID; proc_entry.dwSize = sizeof( PROCESSENTRY32 ); } while( Process32Next( snapshot, &proc_entry ) && ( pid == 0 ) ); CloseHandle( snapshot ); return pid; } string get_errmsg( unsigned long error ) { void *buffer; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, 0, error, MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ), reinterpret_cast< char* >( &buffer ), 0, 0 ); string errmsg = string( reinterpret_cast< char* >( buffer ) ); LocalFree( buffer ); return errmsg; }
Greetz, Swordfish
-
Danke Swordfish, das hilft mir sehr,...
___
MFG Granny
-
Ist es auch möglich, zu sehen welche Prozesse auf einem anderen Computer ausgeführt werden, bzw. einfluss auf sie zu nehmen, ohne das man an diesem "Ziel" computer irgendetwas verändert, bzw. Installiert?
Ich würde gern in meinem Heim Netzwerk von meinem Schribtisch aus Einfluss auf die Prozesse von meinem Notebook nehmen,..
Wäre über Hilfe und codebeispiele echt Dankbar
euere Nicol
-
@Nicol
ja das geht sieh dir mal "tasklist" und "taskkill" genauer an.