Seite 1 von 2
F10 abfragen
Verfasst: 17.03.2010 17:00
von netzcoder
Hallo,
ich möchte gerne abfragen ob F10 gedrückt wurde. Hab ein Fenster welches "Invisible" gesetzt ist. Nun möchte ich wenn F10 gedückt wird eine Aktion ausführen.
If GetAsyncKeyState_(#VK_F10) liefert leider beim drücken und beim loslassen ein Event. Das möchte ich aber nicht.
Euer netzcoder
Re: F10 abfragen
Verfasst: 17.03.2010 17:11
von c4s
Was für einen Wert liefert es denn? Denk mal ganz scharf nach.
Re: F10 abfragen
Verfasst: 17.03.2010 17:18
von STARGÅTE
Jo es gibt mehrere Werte, das sieht etwa so aus:
Code: Alles auswählen
Repeat
Delay(10)
Event = GetAsyncKeyState_(#VK_F10)
If Event
Debug Event
EndIf
ForEver
-32767
-32768
-32768
-32767
-32767
1
1 : steht für losgelassen,
wird aber nicht immer registriert!
-32767 : steht für den ersten Anschlag oder später für "dauer-Feuer"
-32768 : steht für taste wird gedrückt, soll aber noch kein "dauer-Feuer" sein.
Re: F10 abfragen
Verfasst: 17.03.2010 17:54
von netzcoder
Das hört sich ja alles irgendwie sehr wage an. Also gibt es nichts wirklich gutes?
Re: F10 abfragen
Verfasst: 17.03.2010 18:13
von Kaeru Gaman
das ist nicht vage, das ist sehr eindeutig.
lies dir bitte Stargates Posting noch mal durch.
eine Korrektur:
der Rückgabewert von GetAsyncKeystate ist
kein Event.
Code: Alles auswählen
Repeat
Delay(10)
State_F10 = GetAsyncKeyState_(#VK_F10)
If State_F10
Debug State_F10
EndIf
ForEver
nur kosmetisch, aber wichtig damit keine Verwechslungen aufkommen.
-----------------------------------
netzcoder hat geschrieben:If GetAsyncKeyState_(#VK_F10) liefert leider beim drücken und beim loslassen ein Event.
ist grundsätzlich Falsch!
wie gesagt es ist kein Event und es liefert auch kein Event.
bei jeder Abfrage wird es einen Wert liefern, gemäß der Meßreihe wie Stargate sie gezeigt hat.
wenn du jetzt natürlich durch den Aufbau deiner Eventschleife bedingt diesen Wert bei WM_KEYDOWN und WM_KEYUP ausführst, erhältst du die Zustandswerte zu diesen beiden Zeitpunkten.
Re: F10 abfragen
Verfasst: 17.03.2010 18:51
von netzcoder
Vielen Dank für die Hilfe. Hab es jetzt!
Re: F10 abfragen
Verfasst: 17.03.2010 20:51
von Pelagio
Hallo Leute,
warum so umständlich, da man ja weiß das F10 abgefragt wird kann man da nicht 'AddKeyboardShortcut ' benutzen?
Code: Alles auswählen
If OpenWindow(0, 0, 0, 400, 100, "Example", #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_Invisible)
AddKeyboardShortcut(0, #PB_Shortcut_F10, 10)
SetActiveWindow(0)
Repeat
Event = WaitWindowEvent()
If Event=#PB_Event_Menu And EventMenu()=10
HideWindow(0, #False)
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
Re: F10 abfragen
Verfasst: 17.03.2010 21:16
von ts-soft
Pelagio hat geschrieben:Hallo Leute,
warum so umständlich, da man ja weiß das F10 abgefragt wird kann man da nicht 'AddKeyboardShortcut ' benutzen?
Weil Dein Code, sobald ein anderes Fenster aktiviert wurde, nicht mehr funktioniert.
Mit folgendem Code könnte man das lösen:
Code: Alles auswählen
Macro LoWord(long)
long & $FFFF
EndMacro
Macro HiWord(long)
(long >> 16) & $FFFF
EndMacro
OpenWindow(0, #PB_Ignore, #PB_Ignore, 640, 480, "", #PB_Window_SystemMenu | #PB_Window_Invisible)
RegisterHotKey_(WindowID(0), 1, 0, #VK_F10)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow : Break
Case #WM_HOTKEY
If HiWord(EventlParam()) = #VK_F10
Debug "Hallo, F10 gedrückt!"
EndIf
EndSelect
ForEver
UnregisterHotKey_(WindowID(0), 1)
Aber nochmal in der MSDN nachschauen, im Beispiel ist keine Fehlerbehandlung usw.
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Gruß
Thomas
Re: F10 abfragen
Verfasst: 28.03.2010 19:57
von netzcoder
An ts-soft: Dein Code ist wirklich Gold wert. Genau so etwas habe ich gesucht. Vielen vielen Dank.
netzcoder
Re: F10 abfragen
Verfasst: 28.03.2010 21:13
von ts-soft
netzcoder hat geschrieben:An ts-soft: Dein Code ist wirklich Gold wert. Genau so etwas habe ich gesucht. Vielen vielen Dank.
netzcoder
Kein Problem, aber mit F10 sollteste es nicht verwenden, das könnte schief gehen. Lieber etwas ungewöhnlicher,
z.B. Alt + F10
Code: Alles auswählen
Macro LoWord(long)
long & $FFFF
EndMacro
Macro HiWord(long)
(long >> 16) & $FFFF
EndMacro
OpenWindow(0, #PB_Ignore, #PB_Ignore, 640, 480, "", #PB_Window_SystemMenu | #PB_Window_Invisible)
RegisterHotKey_(WindowID(0), 1, #MOD_ALT, #VK_F10)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow : Break
Case #WM_HOTKEY
If HiWord(EventlParam()) = #VK_F10 And LoWord(EventlParam()) = #MOD_ALT
Debug "Hallo, F10 gedrückt!"
EndIf
EndSelect
ForEver
UnregisterHotKey_(WindowID(0), 1)