Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];

Вниз

Пример low level хука   Найти похожие ветки 

 
Сергей К. ©   (2004-10-29 10:05) [16]

вот код хука :

{KALMYKOV SERGEY 2004.
KEYBOARD HOOK DLL
Version : 0.1

Control state result :

1 - Ctrl
2 - Alt
3 - Win
4 - Ctrl+Alt
5 - Ctrl+Win
6 - Ctrl+Shift
7 - Alt+Win
8 - Ctrl+Shift+Alt
9 - Ctrl+Win+Alt

}
library hook;

uses
 Windows,
 SySUtils,
 Messages;
Const
MMF1 = "MMF_LISTHOTKEYS001"; //Список блокируемых комбинаций
MMF2 = "MMF_GLOBALHOOKDATA";
//структура, поля которой будут отображены в файл подкачки
Type
PGlobalData = ^TGlobalData;
TGlobalData = Packed Record
SysHook: HWND; // дескриптор установленной ловушки
MyAppWnd: HWND; // Дескриптор нашего приложения
End;

PList = ^TList;
TList = Packed Record
List : String[255]; // Список сочетаний ползволяет вместить около 50 комбинаций
End;

var
GlobalData :PGlobalData;
MMFHandle1, MMFHandle2, MMFHandle3 : THandle;
WM_HOOK_KEYPRESSED, WM_HOOK_KEYBLOCK, WM_HOOK_KEYALLBLOCK : Cardinal;

//HOOK
function SysMsgProc(code : integer; wParam : word; lParam : longint) : longint; export; stdcall;

function ControlKeyState :Byte;
function KeyState(VirtualKeyCode :Byte) : Boolean;
var
 State : TKeyboardState;
begin
 GetKeyboardState(State);
 Result := ((State[VirtualKeyCode] And 128) <> 0);
end;
begin
Result := 0;
if KeyState(VK_CONTROL) then result := 1;
if KeyState(VK_MENU) then result := 2;
if KeyState(VK_RWIN) or KeyState(VK_LWIN) then result := 3;
if KeyState(VK_CONTROL) and KeyState(VK_MENU) then result := 4;
if KeyState(VK_CONTROL) then  if KeyState(VK_RWIN) or KeyState(VK_LWIN) then result := 5;
if KeyState(VK_CONTROL) and KeyState(VK_SHIFT) then result := 6;
if KeyState(VK_MENU) then if KeyState(VK_RWIN) or KeyState(VK_LWIN) then result := 7;
if KeyState(VK_CONTROL) and KeyState(VK_SHIFT) and KeyState(VK_MENU) then result := 8;
if KeyState(VK_CONTROL) and KeyState(VK_MENU) then if KeyState(VK_RWIN) or KeyState(VK_LWIN) then result := 9;
end;
var
Str :PList;
begin
Result := CallNextHookEx(GlobalData^.SysHook, Code, wParam, lParam);
MMFHandle3 := OpenFileMapping(PAGE_READWRITE ,FALSE , MMF1);
if MMFHandle3 = 0 then Exit;
Str := MapViewOfFile(MMFHandle3, FILE_MAP_READ, 0, 0, SizeOf(TList));
if Str = nil then begin CloseHandle(MMFHandle3); exit; end;
if (code = HC_ACTION) and (lParam <> lParam or $8000 shl 16) and (lParam <> lParam or $8000 shl 15) then
if (wParam <> VK_RWIN) and (wParam <> VK_LWIN) and (wParam <> VK_SHIFT) and (wParam <> VK_CONTROL) and (wParam <> VK_MENU) Then Begin
SendMessage(GlobalData^.MyAppWnd,WM_HOOK_KEYPRESSED,ControlKeyState,wParam);
//Блокировать все клавиши
If UpperCase(Str^.List) <> "ALL" Then begin
//format example 0+32 - нажат пробел
If Pos(IntToStr(ControlKeyState)+"+"+IntToStr(wParam),Str^.List) <> 0 Then begin
SendMessage(GlobalData^.MyAppWnd,WM_HOOK_KEYBLOCK,ControlKeyState,wParam);
Result := 1;
end;
end else begin
SendMessage(GlobalData^.MyAppWnd,WM_HOOK_KEYALLBLOCK,ControlKeyState,wParam);
result := 1;
end;
End;
UnmapViewOfFile(Str);
CloseHandle(MMFHandle3);
end;



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.049 c
3-1100079486
}|{yk
2004-11-10 12:38
2004.12.12
Консолидация данных


14-1101145603
_Дельфин_
2004-11-22 20:46
2004.12.12
Учебник по WinAPI


14-1100981122
Piter
2004-11-20 23:05
2004.12.12
Почему ВЫ не используете клиент?


8-1094821384
_Demik_
2004-09-10 17:03
2004.12.12
WebCam Logitech - как записать ролик и получить снимок


4-1098804856
dms_main
2004-10-26 19:34
2004.12.12
Потоки. Waitfor.





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