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)