Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1208282390
lewka-serdceed
2008-04-15 21:59
2008.05.18
Ошибка "Invalid variant operation"


2-1208631399
Rasputin
2008-04-19 22:56
2008.05.18
поиск окна и родительских окон


2-1208322639
Sw
2008-04-16 09:10
2008.05.18
SQL запрос


15-1206887779
Ramzes001
2008-03-30 18:36
2008.05.18
mail.ru на чём написан?


2-1208780311
jorgunited
2008-04-21 16:18
2008.05.18
выборка во время транзакции





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский