Autor Beitrag
dYnAm1c
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Di 21.06.11 19:39 
Hi,

bin im moment dabei für ein Spiel eine kleine Hilfe zu basteln (mit Timern und Buttons fürs richtige Timing im Spiel).
Ich wollte jetzt, damit man nicht immer aus dem Spiel gehen muss, Tasten einbauen die man drückt und im Programm den entsprechenden Knopf drücken.
Das ganze klappt ja leider nich so ganz mit den Prozeduren wie OnKeyDown, da dafür ja immer die jeweilige Komponente ausgewählt sein muss. Ich suche also was damit ich In-Game eine Taste drücken kann die dann in meinem Programm z.B. eine Prozedur ausführt.



MfG


Moderiert von user profile iconGausi: Topic aus Windows API verschoben am Di 21.06.2011 um 20:32


Zuletzt bearbeitet von dYnAm1c am So 26.06.11 17:18, insgesamt 1-mal bearbeitet
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Di 21.06.11 20:32 
Schau dir mal die Eigenschaft KeyPreview der Form an. Wenn die auf True steht, kommen die Tastendrücke zuerst auf der Form an. Das dürfte dein Problem lösen. :D

_________________
We are, we were and will not be.
dYnAm1c Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Di 21.06.11 23:01 
Das hilft mir nur Teilweise, jetzt kann ich zwar die Taste drücken egal was gerade makiert ist, jedoch geht das auch nur wenn ich auch gerade mein Programm ausgewählt habe, ich möchte aber das die Buttons immer eine Funktion haben auch wenn mein Programm gerade nicht im Vordergrund/nicht ausgewählt ist.


MfG
dYnAm1c Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mi 22.06.11 20:50 
/push
Webo
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 577
Erhaltene Danke: 14

Win 7, Debian
C# (Visual Studio 2013), PHP, C, C++ (Eclipse, KDevelop)
BeitragVerfasst: Mi 22.06.11 22:27 
Wenn deine Anwendung nicht mehr im Vordergrund ist, kann sie gar nicht wissen, welche Taste grade auf ihr gedrückt wird, da sie ja von anderen Anwendungen verdeckt wird.

Deshalb werfe ich mal den Begriff "Hook" in den Raum :D

_________________
Man kann nur das aus dem Ärmel schütteln, was man auch vorher reingesteckt hat.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 22.06.11 22:29 
Und ich "Hotkeys". :D

_________________
We are, we were and will not be.
dYnAm1c Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mi 22.06.11 23:14 
user profile iconWebo hat folgendes geschrieben Zum zitierten Posting springen:
Wenn deine Anwendung nicht mehr im Vordergrund ist, kann sie gar nicht wissen, welche Taste grade auf ihr gedrückt wird, da sie ja von anderen Anwendungen verdeckt wird.

Deshalb werfe ich mal den Begriff "Hook" in den Raum :D


Bei Hooks war ich auch schon, allerdings finde ich dazu weder Tutorials noch Ansatzpunkte speziell für Delphi. Dazu
kommt das der Hook warscheinlich in DX9 sein muss, was das ganze nochmal eingrenzt.


MfG
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Do 23.06.11 10:07 
Der Hook muss im System installiert werden, mit DX9 hat das nichts zu tun. Bei den Tutorials gibt es hier was dazu, iirc funktioniert der ohne Probleme, wird aber natürlich vo so ziemlich jedem Virenscanner erkannt und angemeckert - aus gutem Grund.

So wie ich das verstehe, benötigst du aber nicht unbedingt alle Tasten, sondern nur einige Tastenkombinationen, um bestimmte Aktionen auszuführen. Dafür wären Hotkeys deutlich besser geeignet. Such einfach mal nach RegisterHotkey, das ist einfacher zu implementieren und schonender für das System. ;-)

_________________
We are, we were and will not be.
dYnAm1c Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: So 26.06.11 03:35 
So ich hab das ganze mit registerHotkey nun geschafft zu realisieren, nun wär noch eine (kleine?!) praktische
Frage da: Kann ich damit wirklich nur Kombinationen wie z.B.: [Strg + H] realisieren? Ich habs mit nur einer Taste versucht und bekam die Fehlermeldung "Not enough actual parameters".

MfG
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19276
Erhaltene Danke: 1741

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 26.06.11 08:04 
Damit dir jemand helfen kann, musst du schon zeigen wie der Code aussieht, bei dem der Fehler auftritt. ;-)

Ich vermute aber du hast aus Versehen den dritten Parameter gelöscht statt den Modifier nur als 0 zu übergeben.
dYnAm1c Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: So 26.06.11 15:20 
Hi,
im moment sieht das bei mir so aus:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
registerHotKey(handle, 1, MOD_CONTROL, VK_NUMPAD7);
registerHotKey(handle, 2, MOD_CONTROL, VK_NUMPAD8);
registerHotKey(handle, 3, MOD_CONTROL, VK_NUMPAD4);
registerHotKey(handle, 4, MOD_CONTROL, VK_NUMPAD5);
registerHotKey(handle, 5, MOD_CONTROL, VK_NUMPAD1);
registerHotKey(handle, 6, MOD_CONTROL, VK_NUMPAD2);


und ich schätze du meinst das dann so? :

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
registerHotKey(handle, 1, VK_NUMPAD7, 0);
registerHotKey(handle, 2, VK_NUMPAD8, 0);
registerHotKey(handle, 3, VK_NUMPAD4, 0);
registerHotKey(handle, 4, VK_NUMPAD5, 0);
registerHotKey(handle, 5, VK_NUMPAD1, 0);
registerHotKey(handle, 6, VK_NUMPAD2. 0);
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19276
Erhaltene Danke: 1741

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 26.06.11 16:22 
Warum vertauschst du plötzlich die Parameter? Der Tastencode ist und bleibt an letzter Stelle und der Modifizierer (hier eben 0) davor...
dYnAm1c Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: So 26.06.11 17:17 
Ja das hab ich auch schon bemerkt nur habs vergessen hier wieder zu ändern, Thema hat sich damit erledigt danke :) .