Делать неубиваемый процесс очень просто. Перед тем, как убить винда сначала попытается завершить его по-хорошему. Тут он и должен запустить свою копию и передать ей все нужные данные перед благополучным завершением. LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { //HANDLE_MSG(hWnd, WM_CREATE, WndProc_OnCreate); HANDLE_MSG(hWnd, WM_DESTROY, WndProc_OnDestroy); //HANDLE_MSG(hWnd, WM_SIZE, WndProc_OnSize); //HANDLE_MSG(hWnd, WM_COMMAND, WndProc_OnCommand); default: return DefWindowProc(hWnd, msg, wParam, lParam); } }
void WndProc_OnDestroy(HWND hWnd) { STARTUPINFO si; PROCESS_INFORMATION pi;
// Создадим другой процесс, а этот благополучно завершим. memset(&si, 0, sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); CreateProcess(NULL, "program.exe", NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi); CloseHandle(pi.hThread); CloseHandle(pi.hProcess); PostQuitMessage(0); //return FORWARD_WM_DESTROY(hWnd, DefWindowProc); } |