Форум: "WinAPI";
Текущий архив: 2002.06.13;
Скачать: [xml.tar.bz2];
Вниз
Как перехватить нажатие Ctrl+Alt+Del? Найти похожие ветки
← →
copyr25 (2002-04-09 17:07) [0]Спасибо.
← →
wicked (2002-04-09 17:09) [1]издевается, гад... :)
← →
Виктор Щербаков (2002-04-09 17:12) [2]http://delphi.mastak.ru/cgi-bin/search.pl?n=7&words=Ctrl+Alt+Del
← →
copyr25 (2002-04-09 17:47) [3]Виктор Щербаков, спасибо, конечно, но мне хотелось узнать, не как программу, там, скрыть от
клавиш, или их, там, запретить. А как при нажатии Ctrl+Alt+Del сделать так, чтобы не Билл-Гейтсовский
обработчик вмешивался.
Dear Sir named "Wicked". Обзываться - не хорошо. Я Вам, добрый сэр, никаких таких гадостей
не присылал, правда? Так, какого же @@@@@ ?
← →
cok (2002-04-09 18:11) [4]2 copyr25 ©
Это уже не смешно
← →
Anatoly Podgoretsky (2002-04-09 18:14) [5]copyr25 © (09.04.02 17:47)
А ты пошли, чтобы было по справедливости.
← →
copyr25 (2002-04-09 18:27) [6]cok © : А чего "не смешного"? Я задал вопрос. Вежливо. Имею право на вежливый же ответ.
Ведь правда? Не, если, кто тут, типа, не знает - так и пишите, - "Ду нот кнов"...
Разве вопрос - издевательство?
Anatoly Podgoretsky © :
Не буду. Мне ОТВЕТ нужен.
← →
copyr25 (2002-04-09 18:35) [7]А если "ответ" такой, прям секретный... Ну, тогда на мой email, pls. Может и я, чем-нить поделюсь?
Ещё раз, спасибо всем:))
← →
Mystic (2002-04-09 23:32) [8]Под 9х/ME мне удавалось запретить Ctr+Alt+Del средствами DirectX. Доки под рукой нет, но при установлении монопольного доступа к экрану один из флагов относиться к этомйу сочетанию клавиш. Осталось только следить вручную за нажатиями и отпусканиями клавиш Ctl, Alt и Del. А вот в Windows NT/2000 это вряд ли возможно (по крайней мере вряд ли предусмотрено). По крайней мере я не видел ни одной программы, которая бы делала это раз, и в VMWare для эмуляции нажатия Ctl+Alt+Del используется Ctl+Alt+Ins, а в RHIDE - Ctl+Alt+End.
Безумная идея - пиши драйвер клавиатуры
← →
copyr25 (2002-04-09 23:52) [9]Mystic: запретить можно, конечно:
...
public
{ Public declarations }
end; // after public only!!
function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external "KERNEL32.DLL";
procedure HideApplication;
procedure ShowApplication;
var
...
procedure HideApplication;
begin
RegisterServiceProcess(GetCurrentProcessID, 1);
end;
procedure ShowApplication;
begin
RegisterServiceProcess(GetCurrentProcessID, 0);
end;
В NT, и в 2000 совершенно верно, это не работает. Только в 9х.
Идея насчет своего драйвера совсем не безумная! Но сложноватая:))
← →
Song (2002-04-10 08:25) [10]2copyr25 © (09.04.02 23:52)
В W9x не обязательно создавать сервис, можно просто сказать, что запущен хранитель экрана.
А для w2k есть решение, его недавно Биороботу предложили :)), но он трудноёмкое и было приведено на С.
← →
paul_shmakov (2002-04-10 13:03) [11]еще возможность:
начиная с winnt4 sp3 появились низкоуровневые клавиатурные хуки WH_KEYBOARD_LL. не знаю как насчет ctrl+alt+del, но сtrl+esc, alt+tab и alt+esc они точно позволяют перехватывать.
см. статью Джеффри Рихтера:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnmag00/html/win320700.asp
/************************************************************************
Module: DisableLowLevelKeys.cpp
Notices: Written 2000 Jeffrey Richter
**************************************************************************/
#define _WIN32_WINNT 0x0400
#include <Windows.h>
/////////////////////////////////////////////////////////////////////////
LRESULT CALLBACK LowLevelKeyboardProc(int nCode,
WPARAM wParam, LPARAM lParam) {
BOOL fEatKeystroke = FALSE;
if (nCode == HC_ACTION) {
switch (wParam) {
case WM_KEYDOWN: case WM_SYSKEYDOWN:
case WM_KEYUP: case WM_SYSKEYUP:
PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT) lParam;
fEatKeystroke =
((p->vkCode == VK_TAB) && ((p->flags & LLKHF_ALTDOWN) != 0)) ||
((p->vkCode == VK_ESCAPE) &&
((p->flags & LLKHF_ALTDOWN) != 0)) ||
((p->vkCode == VK_ESCAPE) && ((GetKeyState(VK_CONTROL) &
0x8000) != 0));
break;
}
}
return(fEatKeystroke ? 1 : CallNextHookEx(NULL, nCode, wParam,
lParam));
}
/////////////////////////////////////////////////////////////////////////
int WINAPI WinMain(HINSTANCE hinstExe, HINSTANCE, PTSTR pszCmdLine, int) {
// Install the low-level keyboard & mouse hooks
HHOOK hhkLowLevelKybd = SetWindowsHookEx(WH_KEYBOARD_LL,
LowLevelKeyboardProc, hinstExe, 0);
// Keep this app running until we"re told to stop
MessageBox(NULL,
TEXT("Alt+Esc, Ctrl+Esc, and Alt+Tab are now disabled.\n")
TEXT("Click \"Ok\" to terminate this application and re-enable
these keys."),
TEXT("Disable Low-Level Keys"), MB_OK);
UnhookWindowsHookEx(hhkLowLevelKybd);
return(0);
}
///////////////////////////// End Of File ///////////////////////////////
← →
watcher (2002-04-10 15:40) [12]В WinNT есть Dll называемая GINA DLL. Так вот - это Dll, которая отвечает за вход юзера в систему и другие вещи. Например то окошко которое показываеться при нажатии ctrl+alt+del...
Эту Dll Microsoft сделал заменяемой - то есть можна написать свою и заменить весь процесс входа юзера в систему. Так, например, делает Novell Netware. Gina Dll экспортирует примерно 15 функций, которые нужно описать. Одна из них вызывается WinLogon в ответ на нажатие ctrl+alt+del. В нашем случае можна сделать Dll которая все вызовы переадресовует стандартной (msgina.dll), а тот который нам нужно написать самому.
Хэлп есть в MSDN. Там такжэ есть экзампл готовой Dll и StubDll.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.06.13;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.041 c