So jetzt bin ich schon mal einen kleinen Schritt weiter:
und zwar scheint das Problem darin zu liegen, das mein Programm damit nicht klarkommt, das ich die Funktion aus der
DLL Exportiere und dann in der Server App aufrufe:
Export aus der
DLL sieht folgendermaßen aus:
Delphi-Quellcode:
exports
InstallHook,
UninstallHook,
KeyboardHookProc;
Und der Import so:
function KeyboardHookProc(Code: Integer; wParam: WPARAM; lParam: LPARAM): LResult; stdcall; external 'Keyboard_Hook_Dll.dll';
Wenn ich die Funktion nun in die Server App packe, dann geht alles, bis auf das nichts mitgeschrieben wird, wenn ich aber auslagere, dann wird die anwendung gleich nach dem start gleich wieder beendet.
Wo liegt da das Problem?
Im folgenden einfahc mal die Funktionen um die es geht:
Delphi-Quellcode:
function GetHandle(HKEY: DWORD; const SubKey, ValueName: String; CanCreate: Boolean = false): DWORD;
var
Reg : TRegistry;
begin
result := DWORD(-1);
Reg := TRegistry.create;
Reg.RootKey := HKey;
if Reg.OpenKey(SubKey,CanCreate) then
if Reg.ValueExists(ValueName) then
result := Reg.ReadInteger(ValueName);
Reg.CloseKey;
Reg.Free;
end;
function KeyboardHookProc(Code: Integer; wParam: WPARAM; lParam: LPARAM): LResult; stdcall;
var
LastKey: Char;
KeyState: TKeyboardState;
KeyboardLayout: HKL;
Key: Word;
begin
Result := CallNextHookEx(HookHandle, Code, wParam, lParam);
if Code < 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
begin
Key := wParam;
if (lParam and $80000000) = 0 then
begin
if not (wParam in [16, 17, 18]) then
begin
PostMessage(GetHandle(HKEY_CURRENT_USER, 'Software\eTiT-Solutions', 'KeyVue_AppHandle_hwndTarget', False), WM_USER + 8888, Key, GetActiveWindow);
end;
end;
end;
end;
end;
Wäre für einen klärenden Blick äußerst dankbar....