Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.05.18;
Скачать: CL | DM;

Вниз

Перехват клавиши   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.024 c
8-1179987008
NewZ
2007-05-24 10:10
2008.05.18
Формат *.wav файла. Как разрезать *.wav файл?


2-1208434063
VlGrig
2008-04-17 16:07
2008.05.18
Как сделать thread так, чтобы вып-ся в нем SQLзапр не вешал проу


2-1208623339
Alexey
2008-04-19 20:42
2008.05.18
Как свернуть форму


3-1197297073
Fregl
2007-12-10 17:31
2008.05.18
Ошибка добавления lookup поля в TADOTable


2-1208846129
switch
2008-04-22 10:35
2008.05.18
Работа с БД Access