Вниз
Скачать: 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.012 c
8-1179992364
namco
2007-05-24 11:39
2008.05.18
Video in Delphi


3-1197548717
kudatsky
2007-12-13 15:25
2008.05.18
Как определить количество открытых DBF-файлов ?


15-1207118358
Рамиль
2008-04-02 10:39
2008.05.18
Так, признавайтесь..


2-1208426824
Вход в папку
2008-04-17 14:07
2008.05.18
вход в папку в компоненте DirectoryListBox


4-1188934685
SKIPtr
2007-09-04 23:38
2008.05.18
Как выполнить действия при сворчивании




   Наверх