📄 unitdll.pas
字号:
unit UnitDll;
interface
uses Windows;
const BUFFER_SIZE = 16 * 1024;
const HOOK_MEM_FILENAME = 'MEM_FILE';
const HOOK_MUTEX_NAME = 'MUTEX_NAME';
type
TShared = record
Keys: array[0..BUFFER_SIZE] of Char;
KeyCount: Integer;
end;
PShared = ^TShared;
var
MemFile, HookMutex: THandle;
hOldKeyHook: HHook;
Shared: PShared;
implementation
function KeyHookProc(iCode: Integer; wParam: WPARAM;
lParam: LPARAM): LRESULT; stdcall; export;
const
KeyPressMask = $80000000;
begin
if iCode < 0 then
Result := CallNextHookEx(hOldKeyHook,
iCode,
wParam,
lParam)
else begin
if ((lParam and KeyPressMask) = 0) then
begin
Shared^.Keys[Shared^.KeyCount] := Char(wParam and $00FF);
Inc(Shared^.KeyCount);
if Shared^.KeyCount >= BUFFER_SIZE - 1 then Shared^.KeyCount := 0;
end;
result:=0;
end;
end;
function EnableKeyHook: BOOL; export;
begin
Shared^.KeyCount := 0;
if hOldKeyHook = 0 then
begin
hOldKeyHook := SetWindowsHookEx(WH_KEYBOARD,
KeyHookProc,
HInstance,
0);
end;
Result := (hOldKeyHook <> 0);
end;
{撤消钩子过滤函数}
function DisableKeyHook: BOOL; export;
begin
if hOldKeyHook <> 0 then
begin
UnHookWindowsHookEx(hOldKeyHook);
hOldKeyHook := 0;
Shared^.KeyCount := 0;
end;
Result := (hOldKeyHook = 0);
end;
function GetKeyCount: Integer; export;
begin
Result := Shared^.KeyCount;
end;
function GetKey(index: Integer): Char; export;
begin
Result := Shared^.Keys[index];
end;
procedure ClearKeyString; export;
begin
Shared^.KeyCount := 0;
end;
exports
EnableKeyHook,
DisableKeyHook,
GetKeyCount,
ClearKeyString,
GetKey;
initialization
HookMutex := CreateMutex(nil,
True,
HOOK_MUTEX_NAME);
MemFile := OpenFileMapping(FILE_MAP_WRITE,
False,
HOOK_MEM_FILENAME);
if MemFile = 0 then
MemFile := CreateFileMapping($FFFFFFFF,
nil,
PAGE_READWRITE,
0,
SizeOf(TShared),
HOOK_MEM_FILENAME);
Shared := MapViewOfFile(MemFile,
File_MAP_WRITE,
0,
0,
0);
ReleaseMutex(HookMutex);
CloseHandle(HookMutex);
finalization
if hOldKeyHook <> 0 then DisableKeyHook;
UnMapViewOfFile(Shared);
CloseHandle(MemFile);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -