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 HotKey registrieren geht nicht...? (https://www.delphipraxis.net/10984-hotkey-registrieren-geht-nicht.html)

Patrick 29. Okt 2003 09:17


HotKey registrieren geht nicht...?
 
Ich hätte ich da noch ne Frage, und zwar wie ich mit
Delphi-Quellcode:
RegisterHotKey(Handle, 1, 0, key{vk_F10/Ord('A')});
die Taste "Print" registriere...
Ich habe auch schon Probiert mit der "HotKey-Komponente" zu arbeiten, aber diese akzeptiert auch kein Print...

Warum reagiert mein Programm eigentlich nur auf HotKeys, welche nicht im Programm, welches im Vordergrund läuft, benutzt werden? Also wenn "A" ein HotKey ist, dann reagiert mein Programm nur auf "A", wenn das Programm im Vordergrund die Taste "A" nicht benutzt...

Christian Seehase 29. Okt 2003 12:10

Re: HotKey registrieren geht nicht...?
 
Moin Patrick,

Zitat:

Zitat von Patrick
Warum reagiert mein Programm eigentlich nur auf HotKeys, welche nicht im Programm, welches im Vordergrund läuft, benutzt werden?

Bei RegisterHotkey gilt: Wer zuerst kommt mahlt zuerst.
Das Programm, dass einen Hotkey als erstes registriert, bekommt ihn auch zugewiesen.

Du könntest in diesem Falle nur noch über einen Keyboard [dp]*Hook*[/dp] Zugriff auf eine bestimmte Tastenkombination nehmen.

Bei PRINT möchte ich mal stark annehmen, dass das Betriebssystem sich diesen Hotkey registriert, und dieser somit von einer anderen Anwendung nicht mehr registriert werden kann.

Füg' mal nach RegisterHotkey folgende Zeile ein:

Delphi-Quellcode:
ShowMessage(SysErrorMessage(GetLastError));
dann solltest Du genauer Erfahren, was schiefgegangen ist.

[EDIT]
Ausserdem verschieb ich den Thread mal nach "Windows API"
[/EDIT]

Patrick 30. Okt 2003 10:48

Re: HotKey registrieren geht nicht...?
 
Danke, aber da hätte ich noch ein problem, ich weis garnicht wie ich die "Print"-Taste definiere...
Delphi-Quellcode:
vk_F10 Ord('A')
Wie sieht das bei der "Print"-Taste aus?

Treffnix 30. Okt 2003 11:53

Re: HotKey registrieren geht nicht...?
 
Drucktaste ist VK_PRINT oder VK_SNAPSHOT

Steht in der Hilfe unter "Virtuelle Tastencodes"

Patrick 2. Nov 2003 10:25

Re: HotKey registrieren geht nicht...?
 
Wenn ich den Code
Delphi-Quellcode:
ShowMessage(SysErrorMessage(GetLastError));
einbaue sagt er mir immer: "Diese Abkürzungstaste ist nicht eingetragen"
Funktionieren tut es immernoch nicht...

Luckie 2. Nov 2003 10:28

Re: HotKey registrieren geht nicht...?
 
Diese Aktion von Christian war ja auch nur dazu gedacht, um zu sehen warum es nicht klappt. Wie es aussieht gibst du also eine ungültige Taste an.

Christian Seehase 2. Nov 2003 13:12

Re: HotKey registrieren geht nicht...?
 
Moin Patrick,

wie sieht denn Deine RegisterHotkey Zeile aus?

Patrick 2. Nov 2003 13:35

Re: HotKey registrieren geht nicht...?
 
Delphi-Quellcode:
RegisterHotKey(Handle, 1, 0,vk_print);
So sieht die Zeile aber überall aus....

Christian Seehase 2. Nov 2003 13:40

Re: HotKey registrieren geht nicht...?
 
Moin Patrick,

dann lass Dir bitte mal den Fehlercode numerisch ausgeben.

Delphi-Quellcode:
ShowMessage(IntToStr(GetLastError));
Dabei müsste dann 1409 oder 1419 rauskommen.

Patrick 2. Nov 2003 14:00

Re: HotKey registrieren geht nicht...?
 
Jo, da kommt die 1419 raus, und was sagt uns das jetzt???

Christian Seehase 2. Nov 2003 14:45

Re: HotKey registrieren geht nicht...?
 
Moin Patrick,

damit hab' ich jetzt mal im PSDK nach der Originalmeldung gesucht:
ERROR_HOTKEY_NOT_REGISTERED

Ich fand die deutsche Meldung nicht so sonderlich klar. Es hätte auch heissen können, dass er die einzutragende Taste nicht kennt.
Allerdings muss ich zugeben, dass mir die andere Meldung, ERROR_HOTKEY_ALREADY_REGISTERED, irgendwie lieber gewesen wäre. Dann hätte man davon ausgehen können, dass die Taste bereits anderweitig registriert ist. So weiss man nur, dass sie nicht registriert wurde, aber nicht warum.

Nachdem ich es jetzt ausprobiert habe, wird die Sache für mich noch unerklärlicher, mal abgesehen davon, dass ich davon ausgehe, dass das Betriebssystem sich diese Taste reserviert hat.
Ich habe mit

Delphi-Quellcode:
if not RegisterHotkey(self.Handle,1,0,VK_PRINT) then begin
 ShowMessage(SysErrorMessage(GetLastError));
end;
geprüft, ob die Funktion fehlgeschlagen ist, oder nicht. Sie war nicht fehlgeschlagen, denn es wurde keine Meldung gezeigt, allerdings wurde die Taste auch nicht an mein Programm weitergereicht. Auch Modifier einzutragen hat daran nichts geändert.
Aus welchen Gründen auch immer scheint man VK_PRINT nicht nutzen zu können, ohne das RegisterHotkey eine vernünftige Meldung zurückgibt.
Auch das MSDN hat für VK_PRINT HOTKEY keinerlei Informationen anzubieten.
Ich vermute mal, das OS registriert den gewünschten Hotkey, fängt dann aber selber die Meldung ab, und leitet sie nicht weiter.

scp 2. Nov 2003 15:59

Re: HotKey registrieren geht nicht...?
 
Shaut mal in der Windows SDK unter WM_HOTKEY

Zitat:

IDHOT_SNAPDESKTOP The "snap desktop" hot key was pressed.
IDHOT_SNAPWINDOW The "snap window" hot key was pressed.
Das bedeutet wohl, das man den Key nicht registrieren muss, es wird automatisch eine WM_HOTKEY Message an alle Fenster geschickt.


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