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
Endc 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 
ForEverMischa


