AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Tastendruck im Hintergrund registrieren und Loggen
Thema durchsuchen
Ansicht
Themen-Optionen

Tastendruck im Hintergrund registrieren und Loggen

Ein Thema von T.E. · begonnen am 31. Jan 2010 · letzter Beitrag vom 1. Jun 2012
 
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, 12: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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz