Tastenabfrage im Hintergrund

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

Yuen

Betreff: Tastenabfrage im Hintergrund

BeitragMi, Feb 13, 2008 18:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ich würde gerne wissen wie ich eine Tastenabfrage bei einem nicht aktiven Fenster anstelle ?

Ich hab folgenden Beitrag gefunden : https://www.blitzforum.de/foru...highlight=, dieser ist aber für BB und nicht für BM .... wie realisiere ich das in BlitzMax ?

MFG
Yuen

Suco-X

Betreff: ....

BeitragMi, Feb 13, 2008 19:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Code:

Strict

Extern "win32"
   Function GetAsyncKeyState(key:Int)
End Extern

Graphics 800,600,0

Repeat
   Cls
   
   Local state:Int
   
   If getAsyncKeyState(32)
      Print "SPACE GEDRÜCKT"
   EndIf
   
   
   Flip
Until KeyHit(KEY_ESCAPE)



Funktionen der WinAPI die nicht schon im win32 Modul (pub.mod Ordner) definiert sind, kannst du über extern aufrufen.
Mfg
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
 

ChristianK

BeitragMi, Feb 13, 2008 19:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Ganz so einfach ist es nicht. Die Funktion kann mit den BlitzMax-Scancodes nix anfangen, sondern braucht die Virtual-Key Codes von Windows ( http://msdn2.microsoft.com/en-...45540.aspx ). Außerdem ist der Rückgabewert nicht True oder False, sondern enthält in seinen einzelnen Bits noch weitere Informationen. Mehr dazu hier ( unter "Return Value" ) -> http://msdn2.microsoft.com/en-...46293.aspx
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT
 

#Reaper

Newsposter

BeitragMi, Feb 13, 2008 20:45
Antworten mit Zitat
Benutzer-Profile anzeigen
ChristianK hat Folgendes geschrieben:
Ganz so einfach ist es nicht. Die Funktion kann mit den BlitzMax-Scancodes nix anfangen, sondern braucht die Virtual-Key Codes von Windows ( http://msdn2.microsoft.com/en-...45540.aspx ). Außerdem ist der Rückgabewert nicht True oder False, sondern enthält in seinen einzelnen Bits noch weitere Informationen. Mehr dazu hier ( unter "Return Value" ) -> http://msdn2.microsoft.com/en-...46293.aspx


Falsch.
Funktioniert mit den BMax-KeyCodes. Genauso wie bei z.B. der WinAPI-Funktion keybd_event() um eine Taste virtuell zu drücken.
Nur B3D und B+ haben andere KeyCodes. Wink
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7
 

ChristianK

BeitragMi, Feb 13, 2008 20:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt, die KeyCodes sind gleich. Sorry.
Aber Sucos Beispiel geht trotzdem nicht, wegen dem Rückgabewert. Wink
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

Suco-X

Betreff: ....

BeitragDo, Feb 14, 2008 0:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich versteh nicht ganz wo dein Problem ist, mein Beispiel funktioniert wie es soll. Es zeigt wie man auf die WinApi Funktion Zugriff hat (Ich denke mal das war sein Hauptproblem) und die Sache mit der Space-Taste war einfach nur ein Test, ob das ganze auch dort ankommt, wenn ein anderes Fenster aktiviert ist.
Ich hatte nicht vor ihm einen WinAPI Crashkurs zu verpassen, das wollte er auch sicher nicht.
Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

Yuen

Betreff: Re: ....

BeitragDo, Feb 14, 2008 11:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Suco-X hat Folgendes geschrieben:
Code:

Strict

Extern "win32"
   Function GetAsyncKeyState(key:Int)
End Extern

Graphics 800,600,0

Repeat
   Cls
   
   Local state:Int
   
   If getAsyncKeyState(32)
      Print "SPACE GEDRÜCKT"
   EndIf
   
   
   Flip
Until KeyHit(KEY_ESCAPE)



Funktionen der WinAPI die nicht schon im win32 Modul (pub.mod Ordner) definiert sind, kannst du über extern aufrufen.
Mfg


Danke genau das habe ich gesucht, mehr wollte ich nicht ^^

MFG
Yuen

[EDIT]

Hmm ich hab verstanden das ich als Rückgabewert nicht True oder False bekomme ... wie fange ich aber den Rückgabewert ab und benutze ihn damit eine If-Abfrage möglich ist ?

Ich möchte die getippten Tasten in eienr txt abspeichern.

MFG
Yuen
 

ChristianK

BeitragDo, Feb 14, 2008 14:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir geht es nicht. Confused
Nur, wenn man die Abfrage so schreibt:

Code:
If ( GetAsyncKeyState( 32 ) Shr 16 ) And 1
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

Suco-X

Betreff: ....

BeitragDo, Feb 14, 2008 15:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Soweit ich das sehe muss man halt drauf achten ob das erste Bit gesetzt ist und wenn man das nicht macht, wird die Ausgabe halt ein wenig in die Länge gezogen, aber funktioniert hat das Beispiel ausreichend (bei mir).
Um dem ein Ende zu bereiten habe ich mir das ganze mal kurz angeschaut und zur Abfrage und Speicherung von Texten bin ich zu dieser Lösung gekommen:

Code:

Strict

Extern "win32"
   Function GetAsyncKeyState(key:Int)
   Function VkKeyScanA(char:Int)
End Extern

Graphics 800,600,0

Global buf:String = ""

OnEnd(out)

Function out()
   Print "Ausgabe: "+buf
End Function


Repeat
   Cls
   
   Local state:Int

   For Local i:Int = 32 Until 256
      state = getAsyncKeyState(VkKeyScanA(i))
        If state & $1
         buf:+Chr(i)
         Exit
      EndIf
   Next

   Flip
Until KeyHit(KEY_ESCAPE)



Neu ist hier die Funktion VkKeyScanA um einen VK umzuwandeln. Bei Punkten und anderen Zeichen war die Ausgabe halt nicht wie gewollt.
Am Ende wird das geschreibsel in die Konsole ausgegeben.
Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group