Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Tastur mitschreiben (https://www.delphipraxis.net/11522-tastur-mitschreiben.html)

daniel_sluke 8. Nov 2003 15:40


Tastur mitschreiben
 
Hallo erstmal!
Ich will praktisch jeden gedrückten Key mitschreiben auch wenn er nicht in meinem Programm gedrückt wurde... so etwa

var
inhalt: TStringList;

OnKeyDown
begein
inhalt.add(was_gerade_gedrückt_wurde);
end;

geht soetwas? wenn ja wie?

kiar 8. Nov 2003 15:45

Re: Tastur mitschreiben
 
schau hier :
luckiespy

Mirilin 8. Nov 2003 15:46

Re: Tastur mitschreiben
 
:hi:

ich glaube das geht mit Hooks

daniel_sluke 8. Nov 2003 15:59

Re: Tastur mitschreiben
 
Zitat:

Zitat von kiar
schau hier :
luckiespy

ok danke aber ich weiß nicht wie ich den jetzt für mein Programm verwenden kann den Quelltext :(
ich benutzt Delphi 3

Sharky 8. Nov 2003 16:48

Re: Tastur mitschreiben
 
Hai daniel_sluke,

Hallo und herzlich Willkommen in der Delphi-PRAXIS.

wo genau hast Du denn probleme in deinem QuellCode?

daniel_sluke 8. Nov 2003 17:33

Re: Tastur mitschreiben
 
meine erste Frage is
kann ich den Quell code in Delphi 3 überhaupt verwenden?

Luckie 8. Nov 2003 17:42

Re: Tastur mitschreiben
 
Meines Wissens schon. Versuch doch einfach ihn zu kompilieren, wenn es geut gut, wenn icht musst du ihn anpassen. Aber mir fällt jetzt nichts ein was D3 nicht können sollte, keine dynamischen Arrays, kein StringReplace, ...

daniel_sluke 8. Nov 2003 17:50

Re: Tastur mitschreiben
 
Also compilieren kann ich ihn schonmal nämlich nicht, da ensteht ein Fehler...
eben kam grad: "hook.dll." kann nicht geladen werden obwohl sie im gleichen ordner is :(

Luckie 8. Nov 2003 18:01

Re: Tastur mitschreiben
 
Du musst erst die DLL kompilieren und dann das Programm. Oder was meinst du jetzt? Ich kann bei deiner spärlichen Information nicht nachvollziehen, was du machst.

Robert Marquardt 8. Nov 2003 18:09

Re: Tastur mitschreiben
 
Bleib uebrigens in einem Forum. Im Entwickler-Forum hast du das Gleiche gefragt.

daniel_sluke 8. Nov 2003 19:13

Re: Tastur mitschreiben
 
wenn ich die KPHook compeliere kommt hier "hHook: LongWord = 0;" folgender Fehler:
undefinierter Bezeichner Longword

scp 8. Nov 2003 19:50

Re: Tastur mitschreiben
 
Dann ersetze doch einfach mal LongWord durch DWORD oder Cardinal.

daniel_sluke 8. Nov 2003 22:55

Re: Tastur mitschreiben
 
ok mit cardinal hats geklappt... danke
aber ich finde keine .pas datei in dem ganzen.. ist das absicht?

Luckie 8. Nov 2003 23:04

Re: Tastur mitschreiben
 
Delphi-Quellcode:
****************** 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.
uses windows, messages

Läßt sich ohne Schwierigkliten mit Strg+F9 unter D6 kompilieren.

Christian Seehase 8. Nov 2003 23:26

Re: Tastur mitschreiben
 
Moin Luckie,

Zitat:

Zitat von Luckie
Läßt sich ohne Schwierigkliten mit Strg+F9 unter D6 kompilieren.

Wenn man LongWord gegen cardinal tauscht gilt das auch für D2 Developer.
Sollte also wohl auch in D3 gehen.

daniel_sluke 8. Nov 2003 23:33

Re: Tastur mitschreiben
 
ging jaauch ^^

daniel_sluke 9. Nov 2003 00:49

Re: Tastur mitschreiben
 
nur ist da auch soetwas wie eine .pas datei irgendwo?

Luckie 9. Nov 2003 04:25

Re: Tastur mitschreiben
 
Nein. Wozu?

daniel_sluke 9. Nov 2003 11:54

Re: Tastur mitschreiben
 
damit man damit besser weiter arbeiten kann.... finde ich...

Luckie 9. Nov 2003 12:07

Re: Tastur mitschreiben
 
Wie so? Ob der Cod enun in der Projekt-Datei (dpr) steht oder dieser über eien sepaarte Unit (pas) in die Projektdatei eingebunden wird ist doch egal.

daniel_sluke 9. Nov 2003 12:16

Re: Tastur mitschreiben
 
nur ohne pas hab ich bei mir keine Oberfläche wo ich LAbel, Edits und so sehe :(

Luckie 9. Nov 2003 12:17

Re: Tastur mitschreiben
 
Die hättest du auch bei mir mit pas nicht. Das ist ohne VCL programmiert. Was das bedeutet kannst du hier: http://www.luckie-online.de/tutorial...uts/nonvcl.txt nach lesen.

daniel_sluke 9. Nov 2003 12:22

Re: Tastur mitschreiben
 
ahh das hat mir sehr weitergeholfen... vielen dank wusste nicht dass soetwas möglich ist :(


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:56 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