Entwickler-Ecke

Windows API - Systemweit Tastatur abfragen


Big_Boss - Fr 15.12.06 21:49
Titel: Systemweit Tastatur abfragen
Hallo (mein 1.Beitrag),


Ich möchte ein Programm machen, das auf Tastendruck von "s" reagiert.
Ich habe es soweit auch hinbekommen (mit registerhotkey) aber wenn ich mein Programm dann ausführe und im Hintergrund laufen lasse, dann wird "s" nicht mehr an die anderen Programme weitergeleitet, dann passiert blos noch das, was mein Programm machen, sonst nichts.

Wie lasse ich das "Signal" abfangen aber danach noch weiterleiten?



MfG Big_Boss


Chryzler - Fr 15.12.06 21:51

Suche in der Entwickler-Ecke TASTATUR-HOOK


Big_Boss - Fr 15.12.06 22:07

Ok, ich wollte es eigentlich mit Registerhotkey machen da ich Hooks bisher noch nicht verstanden habe aber jetzt versteh ich es einwenig.

Delphi-Quelltext
1:
2:
if ((Msg.LParam and $80000000) = 0and FDummy then        //only count once
    Inc(FCount);

Das reagiert glaube ich auf alles, wie mach ich das speziell auf "s"?

Moderiert von user profile iconmatze: Code- durch Delphi-Tags ersetzt


Jakob Schöttl - Sa 16.12.06 00:04

Wie du die HotKey-ID von "s" rausbekommst, geht so: du platzierst ein THotkey auf deinem Formular, und gibst dort den gewünschten hotkey ein, dann gibt es eine Eigenschaft, die dir eben die ID sagt.

Delphi-Quelltext
1:
2:
if ((Msg.LParam = ID) and FDummy then        //only count once
    Inc(FCount);


Aber ich empfehle dir THotkeyManager! Den gibts hier [http://www.delphipages.com/result.cfm?ID=1515].


Big_Boss - Sa 16.12.06 10:35

Der Manager ist doch blos eine Unit, kann ich mir da was abschauen oder soll ich sie einbinden???
Und wenn ich einen Thotkey platziert und angepasst habe, wie finde ich dann die ID raus?

MfG Big_Boss


Jakob Schöttl - Sa 16.12.06 13:51

user profile iconBig_Boss hat folgendes geschrieben:
Der Manager ist doch blos eine Unit, kann ich mir da was abschauen oder soll ich sie einbinden???


Also: THotkeyManager ist eine Komponente, die du aber erst anhand der Unit selbst installieren musst. Das geht so:

Delphi-Hauptmenü -> Datei -> Neu -> Weitere -> Package -> Hinzufügen -> Unit auswählen... -> Compilieren, Installieren

Die Komponente findest du dann unter der Registerkarte "System" wieder. Nun musst du noch die Unit(s), die du mit THotkeymanager heruntergeladen hast in folgendes Verzeichnis kopieren:
c:\programme\borland\delphi\lib

Das ganze brauchst du nicht speichern.



user profile iconBig_Boss hat folgendes geschrieben:
Und wenn ich einen Thotkey platziert und angepasst habe, wie finde ich dann die ID raus?


THotKey hat die Eigenschaft Hotkey, und als wert sind lauter Konstanten zur auswahl z. B. Strg+A, ...
Diese Eigenschaft ist aber vom TShortcut.
delphi-Hilfe hat folgendes geschrieben:
type TShortCut = Low(Word) .. High(Word);

Und diese Eigenschaft kannst du dann dem Hotkeymanager zuweisen, oder eben in deiner selbstgeschriebenen Procedure einbauen.


Hoffentlich hilft dir das weiter, Viele Grüße, Jakob


Big_Boss - Sa 16.12.06 20:33

user profile iconJakob Schöttl hat folgendes geschrieben:
Delphi-Hauptmenü -> Datei -> Neu -> Weitere -> Package -> Hinzufügen -> Unit auswählen... -> Compilieren, Installieren

Ich brauch ja wohl nicht zu erwähnen, dass ich ein ziehmlicher Anfänger bin :oops: .
Bis zu Schritt 5 klappt alles, aber dann steht da nirgends Hinzufügen(nur ok), wenn ich ok klicke, wird eine Art neue "Unit"(Package)gemacht. Ich weiß nicht, wo ich dann eine Unit auswählen kann und installiere.

MfG Big_Boss


Big_Boss - Mo 18.12.06 17:39

Ich habe mich mal länger mit hooks befasst und nun ein paar Fragen:
1. Muss ich bei globalen Hooks eine dll machen?
2. Mit diesem code istalliere ich meinen hook:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
function InstallHook(Hwnd: Cardinal): Boolean; stdcall;
begin
  Result := False;
  if HookHandle = 0 then begin
//Erstmal Hook installieren
//First install the hook
    HookHandle := SetWindowsHookEx(WH_KEYBOARD, @KeyboardHookProc,
    HInstance, 0);
//Uebergebenes Fensterhandle sichern
//Save the given window handle
    WindowHandle := Hwnd;
    Result := TRUE;
  end;
end;

Was passiert wenn WindowHandle auf true/false gesetzt wird?
Wie reagiere ich(mein Programm) auf einen Tastendruck?


MfG Big_Boss