Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.013 c
11-1189391943
Grademax
2007-09-10 06:39
2008.05.18
Обработка клавиш Up, Down в ListEdit е


2-1208602147
Алексей К.
2008-04-19 14:49
2008.05.18
Чтение параметров из INI-файла


9-1170231355
akaValerius
2007-01-31 11:15
2008.05.18
Указатель на часть массива


3-1197011406
Свой
2007-12-07 10:10
2008.05.18
Получение данных полсле запроса от TQuery


2-1208676926
Necromancer13
2008-04-20 11:35
2008.05.18
UNION в Паскале




   Наверх