Einzelnen Beitrag anzeigen

T.E.

Registriert seit: 27. Mai 2007
Ort: Hamburg
284 Beiträge
 
Delphi XE2 Enterprise
 
#19

Re: Tastendruck im Hintergrund registrieren und Loggen

  Alt 5. Mär 2010, 13:43
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....
Gruß Torben
  Mit Zitat antworten Zitat