Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Tastatur-Hook mit Hilfe Assarbads Tut (https://www.delphipraxis.net/4310-tastatur-hook-mit-hilfe-assarbads-tut.html)

Dichter 23. Apr 2003 22:03


Tastatur-Hook mit Hilfe Assarbads Tut
 
Hi alle!
ist mein erster beitrag hier und es ist auch ziemlich ne newbie frage von mir, hoffe ihr schlachtet mich nicht gleich :)
hab mich die letzten drei oder vier tage mit hooks, tastaturhooks und so beschäftig. ich wollte hier bissel mit nem tastaturhook rumspielen, zu übungszwecken.
ich hab die dll und das proggi so aufgebaut (naja copy&paste :roll: ) wie in diesem tut von assarbad http://www.assarbad.org/stuff/tutori...oks/index.html
und hab der einfachheit halber die statische einbindung der hook.dll verwendet. nun zieh ich zwei buttons auf die form meines hauptproggie: mit dem einen will ich ja installhook; aufrufen, nur da liefert er mir nen fehler (nicht genügend wirkliche parameter) also variable muss her. wenn ich ne canvas variable, der keinen wert zugeteilt ist benutze lässt sich das prog schonma starten, gibt aber dann natürlich nen error beim draufklicken :). also zb installhook(var1);
jo also meine erste frage wie rufe ich diese prozedur auf?
dann gleich das nächste problem wo arbeite ich mit dem hook? sagen wir ich will die tastaturanschläge in einem memo ausgeben lassen. wo mach ich das? wie komm ich an die gerade gedrückte taste?
haja das wären mal die fragen die mein wirken im keim erstickt haben :) hoffe ihr könnt mir helfen.
bis dann
Dichter

Luckie 23. Apr 2003 22:59

Mail an den Autor. Oder kuck dir mal meinen LuckieSpy an, ist auch nach dem Tutorial gebaut.

Dichter 23. Apr 2003 23:25

jap hat ich auch schon *g* :)
aber leider ist das mit non-vcl alles so verwirrend im quelltext :D
obwohl ich glaub die letzten zwei tage so viel non-vcl quelltext gelesen hab dass ichs gar nicht mehr von anderm unterscheiden kann ^^ oder sogar dass ichs am ende noch ohne zu verstehen selber kann :freak: :chat: :spin:
jo
bis denne :)

Luckie 24. Apr 2003 00:43

Na ja das installieren des Hooks, hat ja nichts mit nonVCL zu tun.

Dichter 24. Apr 2003 11:37

jo aber des drum herum is so verwirrend...
du hast ja bei dienem proggi zum installen
Code:
 if InstallHook(hDlg) = TRUE then
          begin
            lstrcpy(szBuffer, 'LuckieSpy - on');
            SetWindowText(hDlg, szBuffer);
            SendMessage(hDlg, WM_SYSCOMMAND, SC_MINIMIZE, 0);
            SetDlgItemText(hDlg, IDC_INST, 'o&ff');
            { ID's vertauschen ;)) }
            SetWindowLong(GetDlgItem(hDlg, IDC_INST), GWL_ID, IDC_UNINST);
            IsMinimized := TRUE;
          end;
oder? ich glaub des is doch die install stelle?
meine frage woher kommt dieses hdlg? was mach ich damit?

aber dass is ja nur ne abfrage das kann ja nicht der aufruf der hokkinstall funktion sein

Luckie 24. Apr 2003 11:50

hDlg ist nur mein Fensterhandle. Der kleine Trick der dich da wohl verwirrt ist die Tasache, dass ich ein und den selben Button zum installieren und deinstallieren benutze. Damit ich es dann einfacher habe, vertausche ich dessen ID. Aber um das zu erkläre, müßte man etwas tiefer in die nonVCL-Programmierung einsteigen.

Delphi-Quellcode:
if InstallHook(hDlg) = TRUE then
Das ist die entscheidende Zeile.

Bei dir müßte die ungefähr so aussehen:
Delphi-Quellcode:
if InstallHook(Form1.Handle) = TRUE then

Dichter 24. Apr 2003 13:34

oki jetzt läufts einigermassen...
nur wenn ich jetzt das memo1 auf der form1 ansprechen will, also ein char oder halt wie bei dir im prog (was allerdings auskommentiert ist) :
Code:
 function KeyboardHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT;
  stdcall;
var
  letter: Cardinal;
1begin
  case nCode < 0 of
    FALSE:
      if (lParam and $80000000) > 0 then
      begin
->     //letter := MapVirtualKey(wParam,3); <-
        //write2textfile(chr(letter));
        case wParam of
            $20, $30..$39, $41..$5A: write2textfile(chr(wParam));
          else
            if wParam <> $A then
            write2textfile(frmt(' #$%2.2X ', [pointer(wParam)]));
        end;
      end;
  end;
  Result := CallNextHookEx(KBHookHandle, nCode, wParam, lParam);
end;
ich könnt ja 'letter' an die form weitergeben und das dort mit mapvirtualkey() und chr() "auswerten" lassen, aber wie gebe ich nun diese variable an das prog weiter?

Luckie 24. Apr 2003 13:57

Daran bin ich bisher auch gescheitert. Desweitern ist es mir noch nicht gelungen, alle Zeichen richtig darzustellen.

Dichter 28. Apr 2003 17:45

dann danke schön :)
bis denne
Dichter


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