Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Отключение Alt+F4


Автор: Crash_K 25.12.2003, 17:22
Как отключить у своей программы cрабатываниен клавиш Alt+F4 и вообще чтобы из программы нельзя было выйти даже при
нажатии лавиш Ctrl+Alt+Del

Автор: shedon 25.12.2003, 17:33
Зарегистрируй эти клавиши как Hot Keys

#define HK_BLOK 100

Код

// Регистрация
RegisterHotKey(m_hWnd, HK_BLOK, MOD_ALT, VK_F4);

//...

// Убираем hot keys
UnregisterHotKey(m_hWnd, HK_BLOK);


Правда, это код для VC.
Не знаю как он будет работать в Бюлдере

Автор: <Spawn> 25.12.2003, 18:59
Можно в OnCloseQuery формы поставить CanClose в FALSE(для отмены реакции на Alt + F4).

Автор: shedon 26.12.2003, 09:21
Тогда оно на крестик не закроется. И вообще не как не закроется.

Автор: <Spawn> 26.12.2003, 11:13
shedon Так можно переменную для этого сделать и в зависимости от случая разрешать закрывать или не разрешать.

Автор: shedon 26.12.2003, 11:27
Цитата

вообще чтобы из программы нельзя было выйти даже при
нажатии лавиш Ctrl+Alt+Del


Это можно сделать следующим образом: перед тем как завершить процесс винда посылает программе сообщение WM_DESTROY, если эта комманда не выполняется то вында убивает процесс. т.е. можно надо тловить сообщение WM_DESTROY и создать новый процесс.

Код

LRESULT WINAPI WndProc(HWND hWnd, UINT msg,
    WPARAM wParam, LPARAM lParam)
{
 switch(msg)
 {
    HANDLE_MSG(hWnd, WM_DESTROY, WndProc_OnDestroy);
    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, "MyProg.exe", NULL, NULL,
     FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi);
 CloseHandle(pi.hThread);
 CloseHandle(pi.hProcess);
 PostQuitMessage(0);
}


По моему это работает только под Win9x

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)