Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Tastendrücke protokollieren (https://www.delphipraxis.net/16522-tastendruecke-protokollieren.html)

p3ps1 18. Feb 2004 14:10


Tastendrücke protokollieren
 
Wie erreiche ich es, dass ich an Tasten komme die gedrückt werden? OnFormKeyDown zeichnet ja soweit ich weiss nur tasten auf, die direkt auf dem formular passieren, also durch edits ect.

Matze 18. Feb 2004 14:13

Re: Tastendrücke protokollieren
 
Aber stell bitte kienen Unfug damit an (Spioniere keine Passwörter oder so aus ;) )

http://www.delphipraxis.com/topic854...ight=keylogger



Nachtrag: Das Prog ist gar nicht mehr auf Luckies Webseit, sry.
Nachtrag2: www.luckie-online.de/downloads/LuckieSpy2.zip

czapie 18. Feb 2004 14:15

Re: Tastendrücke protokollieren
 
Was du brauchst sind so genannte Hooks.

Gibt es eine Menge sowohl hier im Forum, als im ganzen Web.
Ich empfehle die Asserbads Tutorial.

Czapie.

Matze 18. Feb 2004 14:16

Re: Tastendrücke protokollieren
 
Zitat:

Zitat von czapie
Ich empfehle die Asserbads Tutorial.

Wenn, dann schon Assarbad ;)

p3ps1 18. Feb 2004 20:48

Re: Tastendrücke protokollieren
 
mmh... gut! :?

Jetze finde ich das Tutorial aber etwas dünn.
---> Sprich ich bin daraus nicht wirklich schlau geworden, weil ich finde,
dass zu wenige Dinge erklärt werden.

Und das viel verlinkte Programm von Luckie ist auch nicht hilfreich, da es sehr unübersichtlich ist, und man oft kaum erkennt, ob eine Zeile jetzt Teil des Programms ist, oder dem Erstellen der Form dient. Was ich brauche, bzw. was mich interessiert sind die reinen Proceduren/Funktionen mit denen ich an dei Tastendrücke kommen kann. :!:

Z.B:
Delphi-Quellcode:
liste:TListe;

               liste.insert(getgedruecktetaste);
:duck:

Matze 18. Feb 2004 20:53

Re: Tastendrücke protokollieren
 
Also, Luckies Programm mit Ayas Unit :mrgreen: finde ich recht schön aufgebaut.

Ich hänge sie mal nicht an, ich hoffe, so ist das okay.
Er ist so lang, weil die Lizenz auch dabei ist, muss ich aus rechtlichen Gründen ja amchen. ;)
Hier die Hook-Unit:

Delphi-Quellcode:
{///////////////////////////////////////////////////////////////////////////////
//    //                              \\    //
//   //             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.

Stanlay Hanks 18. Feb 2004 20:54

Re: Tastendrücke protokollieren
 
Zitat:

was mich interessiert sind die reinen Proceduren/Funktionen mit denen ich an dei Tastendrücke kommen kann.
Hi. Entweder ganz oder gar nicht. :wink: Du musst dich glaub ich schon ein bisschen mit dem Thema beschäftigen. :wink:

Du hast geschrieben, dass dir in dem Tutorial zu wenig erklährt wird. Du kannst glaube ich gerne hier die Sachen fragen, die du nicht verstehst, irgendwer kann dir das bestimmt genauer erklähren. Dafür gibts das Forum ja :wink:

Man liest sich, Stanlay :hi:

p3ps1 18. Feb 2004 21:12

Re: Tastendrücke protokollieren
 
Zitat:

Hi. Entweder ganz oder gar nicht. Du musst dich glaub ich schon ein bisschen mit dem Thema beschäftigen.
Ich will mich schon ganz damit beschäftigen. Was mich nur etwas irritiert hat waren eben die ganzen Befehle bezüglich der Form und der eigenen Fonts.

:wink:

czapie 18. Feb 2004 21:55

Re: Tastendrücke protokollieren
 
Du mußt dich ja nicht so streng daran halten.
Prinzipiell empfehle ich dir ein bißchen Arbeit mit der Windows-API
und speziell mit Handles.

Czapie.

P.S.: Sorry, kann ja nicht jeden User-Namen auswendig kennen ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:42 Uhr.

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