hi folks,
ich bräuchte einen WinAPI ersatz für KeyboardReleased()
sowas sollte doch auch mit GetAsyncKeyState_() ebenfalls möglich sein, oder ?!
c ya,
nco2k
(WinAPI) Frage zu GetAsyncKeyState_()
Für WinGUI-Programme macht man das über Events, also
im Callback. WM_KEYDOWN, WM_KEYUP etc..
Wenn Du nicht genau sagst was Du vorhast, kann man auch
kein Beispiel geben. Sowas passt man halt an die jeweiligen
Anforderungen an.
im Callback. WM_KEYDOWN, WM_KEYUP etc..
Wenn Du nicht genau sagst was Du vorhast, kann man auch
kein Beispiel geben. Sowas passt man halt an die jeweiligen
Anforderungen an.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
das problem ist, ich brauche es für ein nicht gui programm und da scheint GetAsyncKeyState_() sehr gut zu funktionieren. hätte ich dazu schreiben sollen sorry.
edit: ich möchte einfach aus diversen gründen, die winapi benützen anstelle von ExamineKeyboard() deswegen will ich KeyboardPushed() & KeyboardReleased() "nachbauen". KeyboardPushed() kann ich ja mittels GetAsyncKeyState_() And $80000000 und $80000001 nachbauen, nur bei KeyboardReleased() komme ich nicht weiter. ich habs so gelöst bis jetzt if GetAsyncKeyState_() = 1 aber das scheint nicht immer zu wollen, wie folgendes beispiel zeigt:
das wichtigste ist, daß es auch unter nicht gui programmen einsetzbar ist.
c ya,
nco2k
edit: ich möchte einfach aus diversen gründen, die winapi benützen anstelle von ExamineKeyboard() deswegen will ich KeyboardPushed() & KeyboardReleased() "nachbauen". KeyboardPushed() kann ich ja mittels GetAsyncKeyState_() And $80000000 und $80000001 nachbauen, nur bei KeyboardReleased() komme ich nicht weiter. ich habs so gelöst bis jetzt if GetAsyncKeyState_() = 1 aber das scheint nicht immer zu wollen, wie folgendes beispiel zeigt:
Code: Alles auswählen
#Title = "Test"
hWnd = OpenWindow(0,0,0,640,480,#PB_Window_SystemMenu|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered,#Title)
If InitSprite() = #False Or OpenWindowedScreen(hWnd,0,0,WindowWidth(),WindowHeight(),0,0,0) = #False
End
EndIf
Repeat
Event.l = WaitWindowEvent()
If GetAsyncKeyState_(#VK_SNAPSHOT) = 1
GrabSprite(0,0,0,WindowWidth(),WindowHeight())
If FileSize("C:\"+#Title) <> -2
CreateDirectory("C:\"+#Title)
EndIf
Number = 1
While FileSize("C:\"+#Title+"\"+#Title+Str(Number)+".bmp") <> -1
Number + 1
Wend
SaveSprite(0, "C:\"+#Title+"\"+#Title+Str(Number)+".bmp")
FreeSprite(0)
ElseIf (GetAsyncKeyState_(#VK_ESCAPE) And $80000001)
End
EndIf
Until Event = #PB_Event_CloseWindow
End
c ya,
nco2k
hmm... das ganze scheint problematischer zu sein, als ich zuerst dachte.
selbst bei den normalen abfragen, scheint es net ganz problemlos zu laufen.
wenn ich zuerst die enter-taste drücke und dann die alt-taste, bekomme ich trotzdem ein event zurück. das selbe gilt bei alt+f4 und das sollte ja nicht sein. woran liegt das?! wie kann ich das beheben??
c ya,
nco2k
selbst bei den normalen abfragen, scheint es net ganz problemlos zu laufen.
Code: Alles auswählen
Repeat
If ((GetAsyncKeyState_(#VK_LMENU) & $80000000) Or (GetAsyncKeyState_(#VK_RMENU) & $80000000))
If (GetAsyncKeyState_(#VK_RETURN) & $80000001)
Debug "TEST 1"
EndIf
ElseIf If ((GetAsyncKeyState_(#VK_LMENU) & $80000000) Or (GetAsyncKeyState_(#VK_RMENU) & $80000000)) And (GetAsyncKeyState_(#VK_F4) & $80000001)
Debug "TEST 2"
ElseIf (GetAsyncKeyState_(#VK_ESCAPE) & $80000001)
End
EndIf
ForEver
End

c ya,
nco2k
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
Nun, Du mußt die Abfrage in Etappen gestalten, um
eine Tasten-Reihenfolge zu erzwingen.
Betrachte den Main-Loop Rückwärts:
-Kontrolle ob Return/F4 NICHT aber ALT(Gr) schon gedrückt wird.
-Wenn ja (altpressed=1) -> Feinkontrolle
-Im letzten Schritt (keystate<>0) Tasten-Release abwarten
Ach ja, es ist notwendig vor den Tasten-Kontrollen den
Tastaturpuffer zu leeren.
Gruß,
Mischa
eine Tasten-Reihenfolge zu erzwingen.
Betrachte den Main-Loop Rückwärts:
-Kontrolle ob Return/F4 NICHT aber ALT(Gr) schon gedrückt wird.
-Wenn ja (altpressed=1) -> Feinkontrolle
-Im letzten Schritt (keystate<>0) Tasten-Release abwarten
Ach ja, es ist notwendig vor den Tasten-Kontrollen den
Tastaturpuffer zu leeren.

Code: Alles auswählen
Repeat
If keystate
If GetAsyncKeyState_(keystate)=0
keystate=0
Debug "(released)"
EndIf
ElseIf altpressed
If GetAsyncKeyState_(#VK_MENU)
If GetAsyncKeyState_(#VK_RETURN)
keystate=#VK_RETURN
Debug "Alt + Return"
ElseIf GetAsyncKeyState_(#VK_F4)
keystate=#VK_F4
Debug "Alt + F4"
EndIf
Else
altpressed=0
EndIf
Else
;Tastaturpuffer leeren
GetAsyncKeyState_(#VK_MENU)
GetAsyncKeyState_(#VK_ESCAPE)
GetAsyncKeyState_(#VK_RETURN)
GetAsyncKeyState_(#VK_F4)
If GetAsyncKeyState_(#VK_RETURN)=0 And GetAsyncKeyState_(#VK_F4)=0 And GetAsyncKeyState_(#VK_MENU)
altpressed=1
ElseIf GetAsyncKeyState_(#VK_ESCAPE)
End
EndIf
EndIf
ForEver
Mischa