Maxgui - Events im Tray abfragen

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

mas93

Betreff: Maxgui - Events im Tray abfragen

BeitragSo, Jun 19, 2011 16:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Leute,
Ich möchte mein Programm das im Tray ist mit "Strg + Space" wieder hervorholen.
In den Tray hab ich das ganze bekommen, nur kann ich dann eben keine Tastendrücke mehr abfragen.

Ich könnte natürlich in den Mainloop etwas wie (Activategadget,winMain) schreiben, aber dann kann ich sonst nichts mehr mit Windows anfangen da immer dieses Fenster aktiviert wird.

Habt ihr irgend eine Idee für einen Workaround?

Mit freundlichen Grüßen
mas93
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]

klin

BeitragDi, Jun 21, 2011 14:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab hier nen code teil rausgekrahmt von einer meiner alten Projekte (Windows only, denke ich):
BlitzMax: [AUSKLAPPEN]

Extern "Win32"
Function GetAsyncKeyState:Int(vKey%)
End Extern
Function IsKeyPressed:Int( key$ )
Local vkey%
vkey=Asc(Upper(key))
Return ( GetAsyncKeyState( vKey ) Shr 16 ) And 1
End Function

If IsKeyPressed("F") Then End



Sollte eigentlich noch funktionieren. Die Tasten werden immer abgefragt. Also ist es egal, ob ein Fenster oder sowas aktiviert wurde.

Achja! Die Funktion ist nicht nach "keyhit" gerichtet, sondern nach "keydown"!

MFG
Klin

Der Eisvogel

BeitragDi, Jun 21, 2011 16:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Das hab ich mir zusammen geschrieben:
BlitzMax: [AUSKLAPPEN]
SuperStrict

Private

Extern "Win32"
Function GetAsyncKeyState:Int(vKey:Int)
End Extern

Public

Function AsyncKeyDown:Int(vKey:Int)
If vKey < 0 Or vKey > 255 Then Return 0
Return GetAsyncKeyState(vKey:Int) Shl 16 Shr 31
End Function

Function AsyncKeyHit:Int(vKey:Int)
Global keystate:Byte[256]
If vKey < 0 Or vKey > 255 Then Return 0
Local hit:Int = (keystate[vKey] = False And AsyncKeyDown(vKey) = True)
keystate[vKey] = AsyncKeyDown(vKey)
Return hit
End Function

Global AsyncRKH:Byte[256]
Function AsyncRecordKeyHits()
For Local i:Int = 0 To 255
AsyncRKH[i] = AsyncKeyHit(i)
Next
End Function
Function AsyncKeyHitEx:Int(vKey:Int)
If vKey < 0 Or vKey > 255 Then Return 0
Return AsyncRKH[vKey]
End Function

Function AsyncFlushKeys()
For Local i:Int = 0 To 255
GetAsyncKeyState(i)
AsyncKeyHit(i)
Next
End Function


Es beinhaltet sowohl KeyDown, als auch KeyHit. KeyHitEx kann dann aufgerufen werden, wenn AsyncRecordKeyHits aufgerufen wurde und kann auch mehrmals in einem Schleifenaufruf aufgerufen werden. Zwischensoeichern des Werts ist nicht mehr nötig. Außerdem gibt es auch FlushKeys, um alles Tastendrücke zu löschen.

MfG
Der Eisvogel
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group