-
Приветствую, помогите с запретом нажатия кнопки WIN. Имеется ввиду не отображение меню Windows по нажатию кнопки WIN на клавиатуре.
-
SetWindowsHookEx(WH_KEYBOARD_LL примеры наверняка есть в Инете
-
спасибо
-
> dmitry_12_08_73 (28.11.2008 13:12:00) [0]
Самое надежное - пассатижи
-
program DisableLowLevelKeys;
uses
Windows, Messages;
const
LLKHF_ALTDOWN = KF_ALTDOWN shr 8;
WH_KEYBOARD_LL = 13;
type
TKBDLLHOOKSTRUCT = record
vkCode: DWORD;
scanCode: DWORD;
flags: DWORD;
time: DWORD;
dwExtraInfo: DWORD;
end;
PKBDLLHOOKSTRUCT = ^TKBDLLHOOKSTRUCT;
var
hhkLowLevelKybd: HHOOK;
function LowLevelKeyboardProc(nCode: integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var
fEatKeystroke: boolean;
p: PKBDLLHOOKSTRUCT;
begin
fEatKeystroke := false;
if nCode = HC_ACTION then
begin
case wParam of
WM_KEYDOWN,
WM_SYSKEYDOWN,
WM_KEYUP,
WM_SYSKEYUP:
begin
p := PKBDLLHOOKSTRUCT(lParam);
fEatKeystroke := ((p^.vkCode = VK_LWIN) or (p^.vkCode = VK_RWIN)) or
((p^.vkCode = VK_TAB) and ((p^.flags and LLKHF_ALTDOWN) <> 0)) or
((p^.vkCode = VK_ESCAPE) and ((p^.flags and LLKHF_ALTDOWN) <> 0)) or
((p^.vkCode = VK_ESCAPE) and ((GetKeyState(VK_CONTROL) and $8000) <> 0)) or
((p^.vkCode = VK_F4) and ((p^.flags and LLKHF_ALTDOWN) <> 0));
end;
end;
end;
if fEatKeystroke then
result := 1
else
result := CallNextHookEx(0, nCode, wParam, lParam);
end;
begin
hhkLowLevelKybd := SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, 0);
MessageBox(0,
PChar('Alt+Esc, Ctrl+Esc, WIN, Alt+F4, and Alt+Tab are now disabled.' + #13#10 +
'Click "Ok" to terminate this application and re-enable these keys.'),
PChar('Disable Low-Level Keys'),
MB_OK);
UnhookWindowsHookEx(hhkLowLevelKybd);
end.
-
За такие хуки оторвать бы руки ! Учитесь делать программы так, что бы подобные методы не потребовались.
-
> МистерТ (01.12.08 09:25) [5]
Есть ряд приложений, где такие методы оправданы. Например, программа тестирования и оценки знаний, шеллозаменители разного рода и т.д.
-
SetWindowLong(FindWindowEx( FindWindow('Shell_TrayWnd', nil), 0, 'Button', nil), GWL_ID, -1);
-
> DVM © (01.12.08 15:15) [6]
> Есть ряд приложений, где такие методы оправданы. Например, > программа тестирования и оценки знаний,
Пускай тестирование на отдельном десктопе.
> шеллозаменители разного рода и т.д.
А чего бы оным шеллозаменителям не менять кнопу на более подходящий им заменитель.
-- Regards, LVT.
-
> Leonid Troyanovsky © (01.12.08 16:00) [8]
> Пускай тестирование на отдельном десктопе.
Пускай, я не против. Я лишь привел варианты, где такое м.б. применимо.
-
> Как можно проще (01.12.08 15:54) [7]
Попробуй это в висте.
-
>Самое надежное - пассатижи
В своё время делал драйверочег на асме - фильтр клавы. Была еще 98-я тогда. Надёжнее - только пасссатижи, да.
>шеллозаменители разного рода и т.д.
Как раз для этого.
-
SetWindowLong(FindWindowEx( FindWindow('Shell_TrayWnd', nil), 0, 'Button', nil), GWL_ID, -1);
/// что здесь надо изменить, чтобы вернуть работоспособность кнопки?)
-
да да! например, игрушки досовские играешь, играешь.. бах! мимо контрла или альта .. и, добро б еще, такая игруха восстановилась нормально. Приходится спичку под win подталкивать
-
> 12 (30.12.2009 10:02:13) [13]
Надо съемные клавиши сделать или хотя бы колпачки
-
>Приходится спичку под win подталкивать
Повторюсь. Драйверок поможет ;) Даже вырывать кнопки не придётся. Жаль, что win98 only, а так бы отдал...
-
> Дмитрий Белькевич (05.01.2010 20:25:15) [15]
> Даже вырывать кнопки не придётся.
Жалко
-
-
Дмитрий Белькевич (07.01.10 12:44) [17]
Я наверное чего-то здорово не понимаю - DDK для Windows 2003 раздается бесплатно, в него входят ВСЕ необходимые средства для написания драйвера без извратов с поисками компилятора от D3 и написание сишного кода на Delphi (даже в статье написано, что ни работу со строками, ни Delphi-йский механизм исключений использовать не получится, кстати, сишный MS-овский механизм исключений вполне применим в драйверах, написанных на С).
Может, лучше самодвижущееся пресс-папье поизобретать, чем драйверы на Delphi писать ?
-
>Может, лучше самодвижущееся пресс-папье поизобретать, чем драйверы на Delphi писать ?
Если звёзды горят, значит это кому-то нужно ;)
|