Цитата(Kozel @ 19.1.2008, 11:28 ) | Пусть для примера это будет Winamp |
В общем-то MAKCim уже показал суть. Ну создай дефолтный проект Windows Application в VC++, далее в процедуру WndProc добавь следующий код:
Код | LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { ... switch (message) { case WM_COMMAND: ... case WM_CREATE: // Сюда внимание обрати. Создание таймера сразу после создания окна приложения. SetTimer(NULL, NULL, 1000, (TIMERPROC)&KillTaskRoutine); break; case WM_DESTROY: ... default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
|
Процедура KillTaskRoutine выглядит следующим обраозом:
Код | BOOL CALLBACK KillTaskRoutine(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime) { HANDLE hProcessSnap; HANDLE hProcess; PROCESSENTRY32 pe32;
hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ); if( INVALID_HANDLE_VALUE == hProcessSnap ) { MessageBox(hwnd, TEXT( "CreateToolhelp32Snapshot (of processes)\n" ), "Error", MB_OK+MB_ICONERROR); return FALSE; }
pe32.dwSize = sizeof( PROCESSENTRY32 );
if( !Process32First( hProcessSnap, &pe32 ) ) { MessageBox(hwnd, TEXT( "Process32First failed" ), "Error", MB_OK+MB_ICONERROR); CloseHandle(hProcessSnap); return FALSE; }
do { if (strstr(static_cast<const char*>(pe32.szExeFile), "winamp")) { hProcess = OpenProcess( PROCESS_TERMINATE, FALSE, pe32.th32ProcessID ); if( NULL == hProcess) MessageBox(hwnd, TEXT( "OpenProcess failed" ), "Error", MB_OK+MB_ICONERROR); else TerminateProcess( hProcess, 0 ); // Хотя так убивать приложения неприлично, не бери за правило :) } } while( Process32Next( hProcessSnap, &pe32 ) );
KillTimer(NULL, idEvent); }
|
|