Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Tastendruck im Hintergrund registrieren und Loggen (https://www.delphipraxis.net/147026-tastendruck-im-hintergrund-registrieren-und-loggen.html)

T.E. 31. Jan 2010 14:42


Tastendruck im Hintergrund registrieren und Loggen
 
Moin moin liebe DPler,

ich habe folgendes Problem: und zwar haben wir in der Firma USB Panels auf denen die F1 bis F24 Tasten (also alle Funktionstasten)ausgelagert sind. Nun haben wir vor kurzem festgestellt das es hin und wieder mal einzelne Tasten nicht funktionieren.

Um einen möglichen Fehler zu finden bzw. auszuschließen soll jetzt also ein Keylogger her, der im Hintergrund läuft und alle Tastendrücke (der F Tasten) mit Zeit mit loggt.
Soweit so gut. Grundsätzlich habe ic hdas auch aber ich habe noch dasProblem: das meien Anwendung dazu im Vordergrund sein muss, damit sie auf den Tastendruck reagiert... und ich konnte noch keine Lösung dafür finden
Hat da jemand einen Tipp oder Ratschlag?

Danke!

mkinzler 31. Jan 2010 14:44

Re: Tastendruck im Hintergrund registrieren und Loggen
 
Wie kann man mit einem Keylogger nicht funktionierende Tasten loggen?

toms 31. Jan 2010 14:45

Re: Tastendruck im Hintergrund registrieren und Loggen
 
Hallo

Ein Keyboard Hook könnte eine Lösung sein.

T.E. 31. Jan 2010 15:06

Re: Tastendruck im Hintergrund registrieren und Loggen
 
Ein Keylogger/Keyhook kann in der Hinsicht nützlich sein bzw. helfen da immer vier tasten zu einander gehören und wenn dann eine Taste mehrfach gerückt wird, bzw. die "Reihenfolge" durcheinander kommt dann hat man zumindest schon mal einen Anhaltspunkt. ZUmal das ganze noch mit einem Counter verbunden wird.

edit: ganz doofe Frage: Worin besteht der Unterschied zwischen einem Keylogger und eineme Keyhook?

toms 31. Jan 2010 15:22

Re: Tastendruck im Hintergrund registrieren und Loggen
 
Zitat:

Zitat von T.E.
edit: ganz doofe Frage: Worin besteht der Unterschied zwischen einem Keylogger und eineme Keyhook?

Einen Keylogger kann man mit einem Hook machen, ein Hook kann man auch für anderes einsetzen.
Mit einem Hook kannst du die Tasten global abfangen.

mkinzler 31. Jan 2010 15:25

Re: Tastendruck im Hintergrund registrieren und Loggen
 
Oder anders gesagt: der Hook ist das wie, und der Logger das was

T.E. 31. Jan 2010 15:39

Re: Tastendruck im Hintergrund registrieren und Loggen
 
ah gut....
Danke für die Tipps... werd mir dann wohl mal das Hook Tutorial vom DelphiTreff anschauen

T.E. 10. Feb 2010 20:20

Re: Tastendruck im Hintergrund registrieren und Loggen
 
So nachem ich mich jetzt schon etwas mit Hooks auseinandergesetzt habe, jetzt doch noch mal eine Frage:
Ich habe folgende Funktion, die aufgerufen wird, was ich jetzt noch nicht so ganz gerafft habe sind die folgenden Punkte:
1. Wieso wird die gedrückte Taste viermal eingetragen, bzw. warum wird bei Funktionstasten nicht F1 etc angezeigt, sondern z, w, etc.?
und 2. wie kann ich daraus jetzt ein Logfile mit Datum und Uhrzeit machen? (Mein Versuch mit
Delphi-Quellcode:
WriteLog(Inttostr(lParam));
ist kläglich an eiskaltem schweigen gescheitert...)
Delphi-Quellcode:
function KeyboardHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var
  sizewritten, hFile: LongWord;
begin
  Result := CallNextHookEx(HookHandle, nCode, wParam, lParam);
  case nCode < 0 of
    TRUE: exit;

    FALSE:
      begin
        hFile := CreateFile('C:\LogFile.log', GENERIC_WRITE or GENERIC_READ, 0, nil, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
        if hFile <> INVALID_HANDLE_VALUE then
        try
          SetFilePointer(hFile, 0, nil, FILE_END);
          //WriteFile(hFile, lParam, sizeof(lParam), sizewritten, nil);
          WriteFile(hFile, wParam, sizeof(wParam), sizewritten, nil);
        finally
          CloseHandle(hFile);
        end;
      end;
  end;
end;
Besten Dank im voraus!!

Astat 10. Feb 2010 23:38

Re: Tastendruck im Hintergrund registrieren und Loggen
 
Hallo T.E., ich hoffe nicht, dass ich mal das Teil in einer Signatur eines Virenscanners finden werde!!

Delphi-Quellcode:

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
      Key := wParam;
    if (lParam and $80000000) = 0 then
      if not (wParam in [16, 17, 18]) then
        PostMessage(_hwndTarget, WM_USER + 8888, Key, GetActiveWindow);
  end;
end;


//-- WndProc der Empfänger Application
procedure TForm1.WndProc(var message: TMessage);
var
  sStr: String;
begin
  if message.Msg = WM_USER + 8888 then begin // KeyHook Nachricht
    case message.wParam of
      VK_BACK   : sStr := 'VK_BACK';
      VK_TAB    : sStr := 'VK_TAB';
      VK_CLEAR  : sStr := 'VK_CLEAR';
      VK_RETURN : sStr := 'VK_RETURN';
      VK_SHIFT  : sStr := 'VK_SHIFT';
      VK_CONTROL : sStr := 'VK_CONTROL';
      VK_MENU   : sStr := 'VK_MENU';
      VK_PAUSE  : sStr := 'VK_PAUSE';
      VK_CAPITAL : sStr := 'VK_CAPITAL';
      VK_NUMLOCK : sStr := 'VK_NUMLOCK';
    else
      sStr := string(Chr(message.wParam));
    end;
    WriterLog(time + sStr);
  end;
  inherited WndProc(message);
end;
lg. Astat

alzaimar 11. Feb 2010 07:27

Re: Tastendruck im Hintergrund registrieren und Loggen
 
Muss ein globaler Keyboard-Hook nicht in einer DLL liegen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:25 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz