{///////////////////////////////////////////////////////////////////////////////
// // \\ //
// // This code is written by: AyaKoshigaya \\ //
// // ============================================= \\ //
// // Koshigaya Studios 2000 - 2003 \\ //
//// [url]http://www.Koshigaya.de[/url] [email]Aya@Koshigaya.de[/email] \\//
/// \//
////////////////////////////////////////////////////////////////////////////////
-== LIZENZ ==-
DIESES PROGRMM / DIESER QUELLCODE IST KOSTENLOS.
1. Lizenz
Diese Software wird "So wie sie ist" zur verfügung gestellt, ohne gewährleistung
irgendeiner Art. Sie haben das Recht sie weiter zu verteilen oder den Quellcode zu
modifizieren.
Diese Software darf nur für nicht kommerzielle Wwecke eingesetzt werden.
2. Haftung
In keinem Fall kann der Autor haftbar gemacht werden für irgendwelche Schäden,
gleich welcher art.
3. Copyright
Die Software wird sowohl durch Urheberrechtsgesetze und internationale
Urheberrechtsverträge geschützt, als auch durch andere Gesetze und Vereinbarungen
über geistiges Eigentum.
4. Weitergabe
Die Software darf und soll in der hier angebotenen Form weitergegeben werden.
Alle Rechte verbleiben aber beim Autor.
5. Modifizierung des Quellcodes
Der Quellcode darf verändert / modifiziert werden unter folgenden Bedingungen:
1.) Modifizierter Quellcode ist zu kennzeichen.
2.) Der Copyrightvermerk aus dem Dateikopf muß erhalten bleiben.
3.) Der Ursprung des original Quellcodes darf nicht verfälscht werden.
6. Wirksamkeit
Sollte eine der Bestimmungen dieser Lizenzbestimmungen unwirksam sein, so wird
davon die Wirksamkeit der übrigen Bestimmungen nicht berührt.
////////////////////////////////////////////////////////////////////////////////
****************** Declarations you need in your Program ***********************
const
WM_KEYBOARD_HOOK = WM_USER + 52012;
function CreateHook(hWnd: HWND; ShiftKeys: Boolean): Boolean; stdcall; external 'KoshigayaKeyboardHook.dll';
function DeleteHook: Boolean; stdcall; external 'KoshigayaKeyboardHook.dll';
********************************************************************************}
library KBHook;
uses
Windows,
Messages;
type
PHWND = ^HWND;
const
WM_KEYBOARD_HOOK = WM_USER + 52012;
var
hHook: LongWord = 0;
Key: Word;
KeyboardLayout: HKL;
GetShiftKeys: Boolean;
hWndBuffer: PHWND;
hMMF: THandle;
function KeyboardProc(nCode: Integer; wParam: LongWord; lParam: LongWord): LongWord;
stdcall;
var
LastKey: Char;
KeyState: TKeyboardState;
begin
Result:=CallNextHookEx(hHook,nCode,wParam,lParam);
if nCode<0
then
Exit
else begin
KeyboardLayout:=GetKeyboardLayout(0);
GetKeyboardState(KeyState);
if ToAsciiEx(wParam,MapVirtualKeyEx(wParam,2,KeyboardLayout),KeyState,@LastKey,0,KeyboardLayout)>0
then
Key:=Ord(LastKey)
else
Key:=wParam;
if (lParam
and $80000000)=0
then
if not (wParam
in [16,17,18])
or GetShiftKeys
then
PostMessage(hwndBuffer^,WM_KEYBOARD_HOOK,Key,GetActiveWindow);
end;
end;
function CreateHook(hWnd: HWND; ShiftKeys: Boolean): Boolean;
stdcall;
var
bHWND: PHWND;
begin
hMMF:=CreateFileMapping($FFFFFFFF,
nil,PAGE_READWRITE
or SEC_COMMIT,0,SizeOf(hWnd),'
KoshigayaKeyboardHookHandle');
bHWND:=MapViewOfFile(hMMF,FILE_MAP_WRITE,0,0,SizeOf(HWND));
bHWND^:=hWnd;
UnmapViewOfFile(bHWND);
GetMem(hWndBuffer,SizeOf(HWND));
hWndBuffer^:=hWnd;
GetShiftKeys:=ShiftKeys;
if hHook=0
then
hHook:=SetWindowsHookEx(WH_KEYBOARD,@KeyboardProc,hInstance,0);
Result:=hHook<>0;
end;
function DeleteHook: Boolean;
stdcall;
begin
FreeMem(hWndBuffer);
CloseHandle(hMMF);
Result:=UnhookWindowsHookEx(hHook);
hHook:=0;
end;
exports
CreateHook,
DeleteHook;
var
MMF: THandle;
begin
MMF:=OpenFileMapping(FILE_MAP_READ,false,'
KoshigayaKeyboardHookHandle');
if MMF<>0
then begin
hWndBuffer:=MapViewOfFile(MMF,FILE_MAP_READ,0,0,SizeOf(HWND));
CloseHandle(MMF);
end;
end.