Форум: "Начинающим";
Текущий архив: 2008.10.05;
Скачать: [xml.tar.bz2];
ВнизГорячие клавиши Найти похожие ветки
← →
demon © (2008-08-27 12:49) [0]Подскажите, как сделать так, чтобы пргамма реагировала на горячую клавишу, а другое приложение в котором назначено тоже сочетание клавишь не реагировало на него?
К примеру, если нажать WinKey, то вызоветься меню пуск, а нужно чтобы только моя прогамма на это среагировала и меню не вызывалось.
Что-то пахожее умеет делать Active Keyboard 2.9
← →
Leonid Troyanovsky © (2008-08-27 13:23) [1]
> demon © (27.08.08 12:49)
> Подскажите, как сделать так, чтобы пргамма реагировала на
> горячую клавишу, а другое приложение в котором назначено
> тоже сочетание клавишь не реагировало на него?
WH_KEYBOARD_LL
--
Regards, LVT.
← →
DVM © (2008-08-27 13:46) [2]
> К примеру, если нажать WinKey, то вызоветься меню пуск,
> а нужно чтобы только моя прогамма на это среагировала и
> меню не вызывалось.
Еще Ctrl+ESC надо ловить. WH_KEYBOARD_LL, как уже сказали, где то в MSDN был пример, кажется от Рихтера.
← →
Leonid Troyanovsky © (2008-08-27 14:23) [3]
> DVM © (27.08.08 13:46) [2]
> где то в MSDN был пример, кажется от Рихтера.
Моя любимая ссылка
http://msdn.microsoft.com/en-gb/magazine/cc302329.aspx
--
Regards, LVT.
← →
demon © (2008-08-27 20:38) [4]А можно ли это сделать без установки глобального хука (без подгрузки dll)?
Active Keyboard не подгружает dll...
← →
DVM © (2008-08-27 22:39) [5]
> А можно ли это сделать без установки глобального хука (без
> подгрузки dll)?
> Active Keyboard не подгружает dll...
Ты даже не попытался разобраться в том, что тебе предлагают, я смотрю. Где ты тут dll углядел?
/************************************************************************
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 ///////////////////////////////
← →
ЛшдлуттнСфе (2008-08-27 23:44) [6]
> DVM © (27.08.08 22:39) [5]
ну, где-нить там один фиг длл вызовется. :)
← →
Palladin © (2008-08-27 23:54) [7]как говорится, увидев три буквы, читатель понял ВСЕ... :)
← →
Германн © (2008-08-28 01:16) [8]
> Palladin © (27.08.08 23:54) [7]
>
> как говорится, увидев три буквы, читатель понял ВСЕ... :
> )
>
Но почему он (читатель) решил, что буквы написаны на заборе? Вот что особенно непонятно.
← →
demon © (2008-08-28 02:13) [9]Ну, поперло...
Лучше бы как это на делфи выглядит показали, у самого ума не хватает переписать это на делфи.
← →
ЛшдлуттнСфе (2008-08-28 08:38) [10]а это разве не делфи ?!
← →
ЛшдлуттнСфе (2008-08-28 08:39) [11]
> у самого ума не хватает
так может и не стоит браться, коль не по рылу каравай?
← →
DVM © (2008-08-28 11:11) [12]
> demon © (27.08.08 20:38) [4]
Мог бы и сам перевести.
(************************************************************************
Module: DisableLowLevelKeys.cpp
Notices: Written 2000 Jeffrey Richter
Translated by: Dmitry Muratov
**************************************************************************)
program DisableLowLevelKeys;
{$APPTYPE CONSOLE}
uses
Windows, Messages, SysUtils;
const
LLKHF_ALTDOWN = KF_ALTDOWN shr 8;
WH_KEYBOARD_LL = 13;
type
pKBDLLHOOKSTRUCT = ^TKBDLLHOOKSTRUCT;
TKBDLLHOOKSTRUCT = record
vkCode: DWORD;
scanCode: DWORD;
flags: DWORD;
time: DWORD;
dwExtraInfo: DWORD;
end;
var
hhkLowLevelKybd: HHOOK;
//------------------------------------------------------------------------------
function LowLevelKeyboardProc(nCode: integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var
fEatKeystroke: BOOL;
p: PKBDLLHOOKSTRUCT;
begin
fEatKeystroke := LongBool(0);
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
(* Install the low-level keyboard & mouse hooks*)
hhkLowLevelKybd := SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, 0);
(* Keep this app running until we"re told to stop*)
MessageBox(0, PChar("Alt+Esc, Ctrl+Esc, 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.
← →
demon © (2008-08-28 13:21) [13]Спасибо!
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.10.05;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c