15 мая "Исходники.РУ" отмечают 20-летие присутствия в сети!
Поздравляем всех причастных и неравнодушных с юбилеем сайта!
И огромное спасибо всем, кто был с нами все эти годы!

Главная Информер Журнал Форум Wiki DRKB Discuz!ML Помощь проекту


Как сделать, чтобы мою прогу нельзя было бы убить?

Я не пробовал,но imho от End Task это не спасет

From : Dmitry V. Liseev

Делать неубиваемый процесс очень просто. Перед тем, как убить винда сначала попытается завершить его по-хорошему. Тут он и должен запустить свою копию и передать ей все нужные данные перед благополучным завершением.

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);
}