Форум: "Начинающим";
Текущий архив: 2008.05.18;
Скачать: [xml.tar.bz2];
ВнизПерехват клавиши Найти похожие ветки
← →
francuz_diletant © (2008-04-15 10:23) [0]Объясните пожалуйста - каким способом можно перехватить нажатие клавиши со значком виндовс и изменить ее назначение?
← →
francuz_diletant © (2008-04-15 15:26) [1]Нужно конкретно для того, чтобы когда играю в игру - случайно нажимаю на эту кнопку и происходит переключение приложения... А хорошо-бы еще чтобы ей в игре можно было-б присвоить действие... Кто может помочь?
← →
tesseract © (2008-04-15 16:08) [2]
> А хорошо-бы еще чтобы ей в игре можно было-б присвоить действие.
> .. Кто может помочь?
Код клавиши сказать ?
VK_LWIN (5B) - Left Windows key
VK_RWIN (5C) - Right Windows key
Соотвественно ловишь их и глушишь.
← →
easy © (2008-04-15 16:10) [3]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
tagKBDLLHOOKSTRUCT = packed record
vkCode: DWord;
scanCode: DWord;
flags: DWord;
time: DWord;
dwExtraInfo: PDWord;
end;
TKBDLLHOOKSTRUCT = tagKBDLLHOOKSTRUCT;
PKBDLLHOOKSTRUCT = ^TKBDLLHOOKSTRUCT;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
procedure SetHook;
procedure UnHook;
public
{ Public declarations }
end;
var
Form1: TForm1;
FHook: HHook;
const
LLKHF_ALTDOWN = KF_ALTDOWN shr 8;
WH_KEYBOARD_LL = 13;
implementation
{$R *.dfm}
function LLKbdHookProc(Code: Integer; wParam: wParam; lParam: lParam): lResult stdcall;
begin
Result := 1;
if Code = HC_ACTION then
with PKbDllHookStruct(lParam)^ do
case vkCode of
VK_LWIN, VK_RWIN: Exit;
VK_TAB:
if (Flags and LLKHF_ALTDOWN) <> 0 then Exit;
VK_ESCAPE:
if ((Flags and LLKHF_ALTDOWN) <> 0) or ((GetAsyncKeyState(VK_CONTROL) and $8000) <> 0) then Exit;
end;
Result := CallNextHookEx(FHook, Code, wParam, lParam);
end;
{ TForm1 }
procedure TForm1.SetHook;
begin
FHook := SetWindowsHookEx(WH_KEYBOARD_LL, LLKbdHookProc, Hinstance, 0);
end;
procedure TForm1.UnHook;
begin
if FHook > 0 then
UnHookWindowsHookEx(FHook);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
SetHook;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnHook;
end;
end.
← →
francuz_diletant © (2008-04-16 12:31) [4]Спасибо большое, что обратили внимание. Но что-т не срабатывает. Может я не совсем правильно выразился... Нужно чтобы программа контролировала левый VK_LWIN во всех приложениях, пока сама висит в памяти... Это реально?
← →
tesseract © (2008-04-16 12:37) [5]
> Нужно чтобы программа контролировала левый VK_LWIN во всех
> приложениях, пока сама висит в памяти... Это реально?
Хук писать нужно. Это DLL уже внешняя.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.05.18;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 6.556 c