Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

прогу нельзя убить...

290
15 июля 2008 года
Patr1ot
458 / / 09.02.2008
Привет всем!!! Дело в том что я скачать с инета код, там было описано:
 
Код:
Делать неубиваемый процесс очень просто.
Перед тем, как убить винда сначала попытается завершить
его по-хорошему. Тут он и должен запустить свою копию
и передать ей все нужные данные перед благополучным
завершением.


А вот код который там приведен..

Код:
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);
}


Суть вопроса состоит в том в каком типе проекта этот код реализовать,
я пробовал в консольное загонял, пишит ошибки.
Подскажите кто знает..
9.4K
15 июля 2008 года
AIGrifon
165 / / 13.11.2007
Пока в коде нет main|/WinMain программы не получится.
332
15 июля 2008 года
Valiant
416 / / 27.09.2004
это кусок кода оконной процедуры.
это функция для перезапуска приложения
 
Код:
void WndProc_OnDestroy(HWND hWnd)

а это её вызов при получении сообщения WM_DESTROY
 
Код:
HANDLE_MSG(hWnd, WM_DESTROY, WndProc_OnDestroy);
290
15 июля 2008 года
Patr1ot
458 / / 09.02.2008
WinMain, будет в начале консольного приложения.
Я имею ввиду дальше.

Valiant-> Получается что WM_DESTROY - вызов функции void WndProc_OnDestroy(HWND hWnd). так получается.
Но вот еще какая проблемка. Когда я начинаю компилить этот код,
билдер говорит мне мол ошибка. Типа че такое "void WndProc_OnDestroy(HWND hWnd)"
И я вот думаю его ведб как класс нужно прописать, или нужно что то другое подправить.

И что тогда такое функция Swich?
535
15 июля 2008 года
Нездешний
537 / / 17.01.2008
Все используемые в программе функции надо объявлять до WinMain

Код:
LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
void WndProc_OnDestroy(HWND hWnd);

... WinMain(...)
{
}

LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
...
}

void WndProc_OnDestroy(HWND hWnd)
{
...
}



switch -- оператор в C++. Кури литературу
332
15 июля 2008 года
Valiant
416 / / 27.09.2004
Мне сложно Вам объяснять что и как в С++ ибо сам не гуру.
Купите(скачайте) книгу по С++, к примеру Бьерн Страуступ "Язык программирования С++"... После изучения оной приступайте к изучению оконной процедуры.
8.8K
16 июля 2008 года
Se AD WMD
165 / / 10.01.2007
Вообщето этот код для m$v$, для билдера надо ёще и определить обработку сообщений (чесно говоря даж не знаю куда её воткнуть в такой ситуации). Почитай в сторону BEGIN_MESSAGE_MAP...или как вариант Application придётся перекапывать (думаю в сторону Application->OnMessage).

З.Ы. А вообще влюбом случае прогу можно будет убить....ресетом.
255
16 июля 2008 года
Dart Bobr
1.4K / / 09.04.2004
По-моему, для таких хитрож****, в винде есть такая штука, как "Завершить дерево процессов".
5
16 июля 2008 года
hardcase
4.5K / / 09.08.2005
Цитата: Dart Bobr
По-моему, для таких хитрож****, в винде есть такая штука, как "Завершить дерево процессов".


А еще можно через ProcessExplorer потихоньку все нитки процесса терминировать.

1
16 июля 2008 года
kot_
7.3K / / 20.01.2000
Цитата: Patr1ot
WinMain, будет в начале консольного приложения.
Я имею ввиду дальше.

Valiant-> Получается что WM_DESTROY - вызов функции void WndProc_OnDestroy(HWND hWnd). так получается.
Но вот еще какая проблемка. Когда я начинаю компилить этот код,
билдер говорит мне мол ошибка. Типа че такое "void WndProc_OnDestroy(HWND hWnd)"
И я вот думаю его ведб как класс нужно прописать, или нужно что то другое подправить.

И что тогда такое функция Swich?


оконные сообщения потому и называються оконными - потому что посылаються они окнам. Т.е. в консоли надо использовать другое решение.
WndProc_OnDestroy(HWND hWnd) - собитие возникающее при попытке закрыть окно - в билдере ему соотвествует OnDestroy

5.3K
17 июля 2008 года
Somebody
185 / / 24.12.2006
В консольной проге можно использовать SetConsoleCtrlHandler. Но от завершения процесса это не спасёт. По-хорошему винда завершает при нажатии крестика или если в диспетчере задач на закладке "Приложения" нажимать "Снять задачу".
1.9K
04 августа 2008 года
George22
91 / / 09.12.2007
Думал, думал: Как же не дать юзеру убить мою прогу?
Решения:
1. Не давать юзеру открыть Диспетчер задач путем нахождения окна
Диспетчера и его закрытия с предупреждением:
"Не лезь..."
2. Прогу писать в виде драйвера.

Первое сделал, до второго умом не дошел.
288
04 августа 2008 года
nikitozz
1.2K / / 09.03.2007
Цитата: George22
Думал, думал: Как же не дать юзеру убить мою прогу?
Решения:
1. Не давать юзеру открыть Диспетчер задач путем нахождения окна
Диспетчера и его закрытия с предупреждением:
"Не лезь..."
2. Прогу писать в виде драйвера.

Первое сделал, до второго умом не дошел.



По-моему не лучший вариант. Есть масса альтернатив Диспетчеру задач. Так что пытливый юзер вашу прогу все равно убьет :)

1.9K
05 августа 2008 года
George22
91 / / 09.12.2007
Займусь перехватом API TerminateProcess() от Диспетчера задач и,
если он пытается закрыть мою прогу -не дам.

Написал и сам удивился!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог