F10 abfragen

Anfängerfragen zum Programmieren mit PureBasic.
netzcoder
Beiträge: 275
Registriert: 27.08.2009 14:14
Computerausstattung: Intel Quad Core 2.5 GHz; 8GB DDR2 RAM; NVIDIA GeForce GT 130 mit 1500 MB; 2TB HDD;
Kontaktdaten:

F10 abfragen

Beitrag 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
PB 4.40 Final Full Version
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: F10 abfragen

Beitrag von c4s »

Was für einen Wert liefert es denn? Denk mal ganz scharf nach.
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: F10 abfragen

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
netzcoder
Beiträge: 275
Registriert: 27.08.2009 14:14
Computerausstattung: Intel Quad Core 2.5 GHz; 8GB DDR2 RAM; NVIDIA GeForce GT 130 mit 1500 MB; 2TB HDD;
Kontaktdaten:

Re: F10 abfragen

Beitrag von netzcoder »

Das hört sich ja alles irgendwie sehr wage an. Also gibt es nichts wirklich gutes?
PB 4.40 Final Full Version
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: F10 abfragen

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
netzcoder
Beiträge: 275
Registriert: 27.08.2009 14:14
Computerausstattung: Intel Quad Core 2.5 GHz; 8GB DDR2 RAM; NVIDIA GeForce GT 130 mit 1500 MB; 2TB HDD;
Kontaktdaten:

Re: F10 abfragen

Beitrag von netzcoder »

Vielen Dank für die Hilfe. Hab es jetzt!
PB 4.40 Final Full Version
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

Re: F10 abfragen

Beitrag 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
Ohne Zeit kein Fleiß
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win11Pro; PB6.20 LTS]. :allright:
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: F10 abfragen

Beitrag 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
netzcoder
Beiträge: 275
Registriert: 27.08.2009 14:14
Computerausstattung: Intel Quad Core 2.5 GHz; 8GB DDR2 RAM; NVIDIA GeForce GT 130 mit 1500 MB; 2TB HDD;
Kontaktdaten:

Re: F10 abfragen

Beitrag von netzcoder »

An ts-soft: Dein Code ist wirklich Gold wert. Genau so etwas habe ich gesucht. Vielen vielen Dank.

netzcoder
PB 4.40 Final Full Version
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: F10 abfragen

Beitrag 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) 
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten