Also ich willn prog schreiben und bin grad dran einstellungen zu proggen.
Das Programm läuft z.b. hinter spielen und kann screenshots und sowas machen.
nun wollt ich ne funktion machen, wenn man z.b. F9 drückt, kann man eine neue taste für screenshots festlegen.
aber wie frag ich ab welche tatse er danach (nach F9) drückt?
Globale Tastenabfrage
Mit der Windows-API.
Dort gibt es den Befehl GetAsynckeyState_(). Funktioniert aber nicht mit der Demoversion von PB.
Mit GetAsynckeyState_() kannst du global, d. h. auch, wenn dein Fenster nicht den Fokus hat, oder dein Programm nicht mal ein Fenster hat
, ermitteln, ob eine Taste gedrückt wurde..
Und so wird's gemacht:
Wenn die taste gedrückt wurde, wird ein Wert ungleich null zurückgegeben. Willst du zum Beispiel Strg+S abfragen, dann mach's einfach so:
Schau mal hier: http://msdn.microsoft.com/library/defau ... ystate.asp, um zu wisen, welche Virtual Keycodes es gibt, die du abfragen kannst.
Ich kann dir jetzt schon sagen, dass es folgende Virtuelle Keycodes gibt (gibt nactürlich noch mehr):
#VK_A
.
.
.
#VK_Z
#VK_0
.
.
.
#VK_9
#VK_F1
.
.
.
#VK_F12
#VK_RETURN
#VK_SHIFT
#VK_CTRL
#VK_ALT
#VK_SPACE
#VK_END
Dort gibt es den Befehl GetAsynckeyState_(). Funktioniert aber nicht mit der Demoversion von PB.
Mit GetAsynckeyState_() kannst du global, d. h. auch, wenn dein Fenster nicht den Fokus hat, oder dein Programm nicht mal ein Fenster hat

Und so wird's gemacht:
Code: Alles auswählen
Delay(1111) ; Zeit, damit du A gedrückt halten kannst
If GetAsyncKeyState_(#VK_A)
Debug "A wurde gedrückt."
EndIf
Code: Alles auswählen
If GetAsyncKeyState_(#VK_SHIFT) And GetAsyncKeyState_(#VK_S)
Debug "Zeit, zum Speichern..."
EndIf
Ich kann dir jetzt schon sagen, dass es folgende Virtuelle Keycodes gibt (gibt nactürlich noch mehr):
#VK_A
.
.
.
#VK_Z
#VK_0
.
.
.
#VK_9
#VK_F1
.
.
.
#VK_F12
#VK_RETURN
#VK_SHIFT
#VK_CTRL
#VK_ALT
#VK_SPACE
#VK_END
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
Vielleicht hilft das dir ja weiter, hab ich mal gebastelt:
Code: Alles auswählen
Structure Key
Zeichen.s
Code.l
down.b
EndStructure
NewList Key.Key()
Procedure AddKey(Zeichen.s, Code.l)
AddElement(Key())
Key()\Zeichen = Zeichen
Key()\Code = Code
EndProcedure
Procedure InitKeys()
;Buchstaben von a bis z
AddKey("a", #VK_A)
AddKey("b", #VK_B)
AddKey("c", #VK_C)
AddKey("d", #VK_D)
AddKey("e", #VK_E)
AddKey("f", #VK_F)
AddKey("g", #VK_G)
AddKey("h", #VK_H)
AddKey("i", #VK_I)
AddKey("j", #VK_J)
AddKey("k", #VK_K)
AddKey("l", #VK_L)
AddKey("m", #VK_M)
AddKey("n", #VK_N)
AddKey("o", #VK_O)
AddKey("p", #VK_P)
AddKey("q", #VK_Q)
AddKey("r", #VK_R)
AddKey("s", #VK_S)
AddKey("t", #VK_T)
AddKey("u", #VK_U)
AddKey("v", #VK_V)
AddKey("w", #VK_W)
AddKey("x", #VK_X)
AddKey("y", #VK_Y)
AddKey("z", #VK_Z)
;Zahlen von 1 bis 0
AddKey("1", #VK_1)
AddKey("2", #VK_2)
AddKey("3", #VK_3)
AddKey("4", #VK_4)
AddKey("5", #VK_5)
AddKey("6", #VK_6)
AddKey("7", #VK_7)
AddKey("8", #VK_8)
AddKey("9", #VK_9)
AddKey("0", #VK_0)
AddKey("1", #VK_NUMPAD1)
AddKey("2", #VK_NUMPAD2)
AddKey("3", #VK_NUMPAD3)
AddKey("4", #VK_NUMPAD4)
AddKey("5", #VK_NUMPAD5)
AddKey("6", #VK_NUMPAD6)
AddKey("7", #VK_NUMPAD7)
AddKey("8", #VK_NUMPAD8)
AddKey("9", #VK_NUMPAD9)
AddKey("0", #VK_NUMPAD0 )
;Sonderzeichen
AddKey("*", #VK_MULTIPLY)
AddKey(" ", #VK_SPACE)
AddKey("+",#VK_ADD)
AddKey(",",188 )
AddKey("-",#VK_SUBTRACT)
AddKey("/",#VK_DIVIDE)
AddKey("{F1}",#VK_F1)
AddKey("{F2}",#VK_F2)
AddKey("{F3}",#VK_F3)
AddKey("{F4}",#VK_F4)
AddKey("{F5}",#VK_F5)
AddKey("{F6}",#VK_F6)
AddKey("{F7}",#VK_F7)
AddKey("{F8}",#VK_F8)
AddKey("{F9}",#VK_F9)
AddKey("{F10}",#VK_F10)
AddKey("{F11}",#VK_F11)
AddKey("{F12}",#VK_F12)
AddKey(".",190)
AddKey(":",446)
AddKey("#",191)
AddKey("ß",219)
EndProcedure
Procedure.s GetKeyboardReleasedKey()
Zeichen.s=""
ResetList(Key())
Shift.l = #False
While NextElement(Key())
If GetAsyncKeyState_(Key()\Code) & $80000000
ElseIf Key()\down
Zeichen.s = Key()\Zeichen
EndIf
If GetAsyncKeyState_(Key()\Code) & $80000000
Key()\down=1
Else
Key()\down=0
EndIf
Wend
ProcedureReturn Zeichen
EndProcedure
InitKeys()
Global Eingabe.s
start.l=GetTickCount_()
geb2=GetTickCount_()
CreateFile(1,"C:\program\starter\data\Afrikaans.lng")
Repeat
new.s=GetKeyboardReleasedKey()
If new.s
Debug new
new=""
EndIf
ForEver
Ich habe noch ein Problem
Geht nicht
Wie kann ich abfragen ob beide Tasten gedrückt worden sind
Code: Alles auswählen
Procedure GetKey(num.b)
If num>=36 : num+76
ElseIf num>=26 : num+22 ;<-- 35+22=57=#VK_9
Else : num+65 : EndIf
ProcedureReturn num
EndProcedure
key.b=35 ;Ziffer 9
Repeat
For r.b=0 To 123 : GetAsyncKeyState_(r) : Next r ;Geht nur bis #VK_F12
Sleep_(1)
If GetAsyncKeyState_(#VK_CONTROL)=-32767 And GetAsyncKeyState_(GetKey(key))=-32767 : Break : EndIf
ForEver
End
Wie kann ich abfragen ob beide Tasten gedrückt worden sind

ALT-Codes
Nicht ganz korrekt: Es gibt kein #VK_ALT, wie ich eben selber erstaunt festgestellt habe. Aber natürlich kann man auch die ALT-Tasten abfragen, die VK-Konstanten dazu heißen allerdings #VK_MENU bzw. #VK_LMENU und VK_RMENU.AND51 hat geschrieben: #VK_RETURN
#VK_SHIFT
#VK_CTRL
#VK_ALT
#VK_SPACE
#VK_END[/i]