Главная страница
    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
Время: 0.043 c
2-1208711955
WhiteBerkut
2008-04-20 21:19
2008.05.18
BDE


2-1208705054
AlexDan
2008-04-20 19:24
2008.05.18
замедление работы программы


2-1208423314
Ega23
2008-04-17 13:08
2008.05.18
STDIN и STDOUT


2-1208719740
worldmen
2008-04-20 23:29
2008.05.18
Загрузить с ini файла в переменную имена всех ключей


2-1208524530
Oyeme
2008-04-18 17:15
2008.05.18
Ант и POS или ...то чего нету





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский