tasten abfragen und settings setzen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
diGGa
Beiträge: 249
Registriert: 01.04.2005 11:00
Kontaktdaten:

tasten abfragen und settings setzen

Beitrag von diGGa »

ich weiss nich komm grad nich weiter. hab n programm das man mit tasten steuern kann und mach dazu auch ein settings-programm das die virtual codes in eine datei schreibt.

ich versuche schon die ganze zeit das man einfach in ein stringgadget reinklicken kann und ne taste drücken kann um dann den vK zu kriegen.. oder halt irgendnen code womit ich jede taste abfragen kann^^ ich find jetz nix... mag jemand von euch profis mir nich eben sagen wie das geht ich peils nich^^
Benutzeravatar
diGGa
Beiträge: 249
Registriert: 01.04.2005 11:00
Kontaktdaten:

Beitrag von diGGa »

hier nochmal genauer

von euch würde ich mich freuen wenn ihr mir nen tipp geben könntet wie ich durch tastendrücken die vk der gedrückten taste im settingsbereich bekomme ;)
momentan versuche ich es so:

Code: Alles auswählen

                            Case #STRING_PLAY
                                   If EventType() = #PB_EventType_Focus
                                          For I=1 To 255
                                                 If GetAsyncKeyState_(I)
                                                        MessageRequester("debug","Key " + Str(I) + " has been pressend")
                                                 EndIf
                                          Next      
                                   EndIf 
funzt aber nich^^ gibt immer mouse zurück und wenn ich stattdessen EventType_change nehme, gibt er einmal mauszurück und dann die gedrückte taste, wobei da dann auch nur abc etc gehen und f10 zB nich...
vielleicht muss ich einfach n anderes gadget nehmen?
Jake
Beiträge: 121
Registriert: 28.05.2005 04:10
Wohnort: Berlin

Beitrag von Jake »

Hallo diGGa,

die Profis hier im Forum sind wohl schon im Sommerurlaub es antwortet wohl keiner deshalb versuche ich dir mal zu helfen.

Ich kenne zum Abfragen von Tasten nur einen Weg. Wenn man ein Menu erstellt kann man doch mit AddKeyboardShortcut einen Tastaturbefehl hinzufügen. Abgefragt werden die dann mit #PB_Event_Menu.
Alos so mache ich das:

Code: Alles auswählen

Select Event
  Case #PB_Event_Menu
    Select EventMenuID()
      Case #PB_Shortcut_F1
    EndSelect
EndSelect
Das Beispiel Fragt die Taste F1 ab alle anderen Tasten findest du in der Hilfe unter AddKeyboardShortcut aber ich weiß nicht ob mann die Tasten auch abfragen kann wenn man den Shortcut vorher nicht gesetzt hat? Geht bestimmt nicht.

Dann kenne ich nur noch KeyboardInkey aber den habe ich selbst auch noch nicht benutzt.
MfG Jake
Leo
Beiträge: 420
Registriert: 26.10.2004 18:26

Beitrag von Leo »

So?

Code: Alles auswählen

OpenWindow(0,0,0,640,480,#PB_Window_ScreenCentered|#PB_Window_SystemMenu,"key")

Repeat
    Event = WaitWindowEvent()
    Select Event
        Case #PB_Event_CloseWindow 
            Quit = #True 
    EndSelect
    If EventwParam() <> 0
        Debug EventwParam()
    EndIf 
Until Quit = #True 
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Beitrag von Andreas21 »

Code: Alles auswählen

Virtual-Key Codes

The following table shows the symbolic constant names, hexadecimal values, and keyboard equivalents for the virtual-key codes used by the Microsoft Windows operating system. The codes are listed in numeric order. 

Symbolic constant name	Value (hexadecimal)	Mouse or keyboard equivalent
VK_LBUTTON	01	Left mouse button 
VK_RBUTTON	02	Right mouse button 
VK_CANCEL	03	Control-break processing 
VK_MBUTTON	04	Middle mouse button (three-button mouse) 
 ¾ 	05-07	Undefined 
VK_BACK	08	BACKSPACE key 
VK_TAB	09	TAB key 
 ¾ 	0A-0B	Undefined 
VK_CLEAR	0C	CLEAR key 
VK_RETURN	0D	ENTER key 
 ¾ 	0E-0F	Undefined 
VK_SHIFT	10	SHIFT key 
VK_CONTROL	11	CTRL key 
VK_MENU	12	ALT key 
VK_PAUSE	13	PAUSE key 
VK_CAPITAL	14	CAPS LOCK key 
 ¾ 	15-19	Reserved for Kanji systems 
 ¾ 	1A	Undefined 
VK_ESCAPE	1B	ESC key 
 ¾ 	1C-1F	Reserved for Kanji systems 
VK_SPACE	20	SPACEBAR 
VK_PRIOR	21	PAGE UP key 
VK_NEXT	22	PAGE DOWN key 
VK_END	23	END key 
VK_HOME	24	HOME key 
VK_LEFT	25	LEFT ARROW key 
VK_UP	26	UP ARROW key 
VK_RIGHT	27	RIGHT ARROW key 
VK_DOWN	28	DOWN ARROW key 
VK_SELECT	29	SELECT key 
 ¾ 	2A	Original equipment manufacturer (OEM) specific 
VK_EXECUTE	2B	EXECUTE key 
VK_SNAPSHOT	2C	PRINT SCREEN key for Windows 3.0 and later 
VK_INSERT	2D	INS key 
VK_DELETE	2E	DEL key 
VK_HELP	2F	HELP key 
VK_0	30	0 key 
VK_1	31	1 key 
VK_2	32	2 key 
VK_3	33	3 key 
VK_4	34	4 key 
VK_5	35	5 key 
VK_6	36	6 key 
VK_7	37	7 key 
VK_8	38	8 key 
VK_9	39	9 key 
 ¾ 	3A-40	Undefined 
VK_A	41	A key 
VK_B	42	B key 
VK_C	43	C key 
VK_D	44	D key 
VK_E	45	E key 
VK_F	46	F key 
VK_G	47	G key 
VK_H	48	H key 
VK_I	49	I key 
VK_J	4A	J key 
VK_K	4B	K key 
VK_L	4C	L key 
VK_M	4D	M key 
VK_N	4E	N key 
VK_O	4F	O key 
VK_P	50	P key 
VK_Q	51	Q key 
VK_R	52	R key 
VK_S	53	S key 
VK_T	54	T key 
VK_U	55	U key 
VK_V	56	V key 
VK_W	57	W key 
VK_X	58	X key 
VK_Y	59	Y key 
VK_Z	5A	Z key 
VK_LWIN	5B	Left Windows key (Microsoft Natural Keyboard) 
VK_RWIN	5C	Right Windows key (Microsoft Natural Keyboard) 
VK_APPS	5D	Applications key (Microsoft Natural Keyboard) 
 ¾ 	5E-5F	Undefined 
VK_NUMPAD0	60	Numeric keypad 0 key 
VK_NUMPAD1	61	Numeric keypad 1 key 
VK_NUMPAD2	62	Numeric keypad 2 key 
VK_NUMPAD3	63	Numeric keypad 3 key 
VK_NUMPAD4	64	Numeric keypad 4 key 
VK_NUMPAD5	65	Numeric keypad 5 key 
VK_NUMPAD6	66	Numeric keypad 6 key 
VK_NUMPAD7	67	Numeric keypad 7 key 
VK_NUMPAD8	68	Numeric keypad 8 key 
VK_NUMPAD9	69	Numeric keypad 9 key 
VK_MULTIPLY	6A	Multiply key 
VK_ADD	6B	Add key 
VK_SEPARATOR	6C	Separator key 
VK_SUBTRACT	6D	Subtract key 
VK_DECIMAL	6E	Decimal key 
VK_DIVIDE	6F	Divide key 
VK_F1	70	F1 key 
VK_F2	71	F2 key 
VK_F3	72	F3 key 
VK_F4	73	F4 key 
VK_F5	74	F5 key 
VK_F6	75	F6 key 
VK_F7	76	F7 key 
VK_F8	77	F8 key 
VK_F9	78	F9 key 
VK_F10	79	F10 key 
VK_F11	7A	F11 key 
VK_F12	7B	F12 key 
VK_F13	7C	F13 key 
VK_F14	7D	F14 key 
VK_F15	7E	F15 key 
VK_F16	7F	F16 key 
VK_F17	80H	F17 key 
VK_F18	81H	F18 key 
VK_F19	82H	F19 key 
VK_F20	83H	F20 key 
VK_F21	84H	F21 key 
VK_F22	85H	F22 key 
VK_F23	86H	F23 key 
VK_F24	87H	F24 key 
 ¾ 	88-8F	Unassigned 
VK_NUMLOCK	90	NUM LOCK key 
VK_SCROLL	91	SCROLL LOCK key 
 ¾ 	92-B9	Unassigned 
 ¾ 	BA-C0	OEM specific 
 ¾ 	C1-DA	Unassigned 
 ¾ 	DB-E4	OEM specific 
 ¾ 	E5	Unassigned 
 ¾ 	E6	OEM specific 
 ¾ 	E7-E8	Unassigned 
 ¾ 	E9-F5	OEM specific 
VK_ATTN	F6	Attn key
VK_CRSEL	F7	CrSel key
VK_EXSEL	F8	ExSel key
VK_EREOF	F9	Erase EOF key
VK_PLAY	FA	Play key
VK_ZOOM	FB	Zoom key
VK_NONAME	FC	Reserved for future use. 
VK_PA1	FD	PA1 key
VK_OEM_CLEAR	FE	Clear key


Win32 API Help ;)
Die Tasten Code sind in Hex angegeben.
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
Benutzeravatar
diGGa
Beiträge: 249
Registriert: 01.04.2005 11:00
Kontaktdaten:

Beitrag von diGGa »

andreas und jake hier habt glaub ich nich ganz verstanden was ich will.. ich will nich alle tasten vom keybard dahinschreiben deshalb such ich etwas das alle tasten abfragt.

If EventwParam() <> 0
Debug EventwParam()
EndIf

gibt schonmal was zurück ich guck mal..


//

na das funzt nich... bekomm dann massenzahlen zurück 34564356 sowas
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

@diGGa:
Ich weiß zwar nicht so richtig was Du willst, aber vielleicht
hilft Dir das als Anfang:

Code: Alles auswählen

;
; Virtual Key Checker
;
; by Danilo, 2005/05/30, german forum
;
Global oldStringProc

Dim keystates.b(255)

NewList keynames.s()

#dontcare = (1<<25) ; DO NOT distinguish between left and right keys, for example LEFT-SHIFT and RIGHT-SHIFT
;#dontcare = 0       ; distinguish between left and right keys



Procedure UpdateImage()
  GetKeyboardState_(keystates())

  If StartDrawing(ImageOutput())
    For i = 0 To 255
      x = i%16
      y = i/16
      b.b = keystates(i)
      If b & %10000000
        Box(18+x*40,21+y*20,39,19,$FFFFFF)
        DrawingMode(1)
        FrontColor($00,$00,$FF)
        Locate(23+x*40,23+y*20)
        DrawText("$"+RSet(Hex(i),2,"0"))
      Else
        Box(18+x*40,21+y*20,39,19,$000000)
      EndIf
    Next i
    StopDrawing()
  EndIf
  SetGadgetState(1,ImageID())
EndProcedure



Procedure KeyStateChanged(lParam,up)
  Name$ = Space(1024)
  GetKeyNameText_(lParam|#dontcare,Name$,1024)
  Name$ = Trim(Name$)
  If Name$
    Name$="'"+Name$+"'"
    ForEach keynames()
      If keynames()=Name$
        If up
          DeleteElement(keynames(),1)
        Else
          found=1
        EndIf
        Break
      EndIf
    Next
    If found=0 And up=0
      LastElement(keynames())
      AddElement(keynames())
      keynames()=Name$
    EndIf
  EndIf
  ForEach keynames()
    A$+keynames()+" + "
  Next
  If A$
    A$ = Left(A$,Len(A$)-3)
  EndIf
  SetGadgetText(0,A$)
EndProcedure



Procedure StringCallback(hWnd,Msg,wParam,lParam)
  If     Msg = #WM_CHAR Or Msg = #WM_SYSCHAR
    ProcedureReturn 0
  ElseIf Msg = #WM_KEYDOWN Or Msg = #WM_SYSKEYDOWN
    KeyStateChanged(lParam,0)
    UpdateImage()
    ProcedureReturn 0
  ElseIf Msg = #WM_KEYUP Or Msg = #WM_SYSKEYUP
    KeyStateChanged(lParam,1)
    UpdateImage()
    ProcedureReturn 0
  EndIf
  ProcedureReturn CallWindowProc_(oldStringProc,hWnd,Msg,wParam,lParam)
EndProcedure



If CreateImage(0,660,343)=0
  MessageRequester("ERROR","Cant create image!"):End
EndIf
If StartDrawing(ImageOutput())
  DrawingMode(1|4)
  FrontColor($FF,$FF,$00)
  For i = 0 To 15
    Locate(34+i*40,2)
    DrawText(Hex(i))
    Locate(2,23+i*20)
    DrawText(Hex(i))
    For x = 0 To 15
      Box(17+x*40,20+i*20,41,21)
    Next x
  Next i
  StopDrawing()
EndIf



OpenWindow(0,0,0,680,393,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Virtual Key Checker")
  CreateGadgetList(WindowID())
  StringGadget(0,10,10,660,20,"")
  ImageGadget(1,10,40,660,343,ImageID())

  oldStringProc = SetWindowLong_(GadgetID(0),#GWL_WNDPROC,@StringCallback())

  SetFocus_(GadgetID(0))

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break
  EndSelect
ForEver
Hoffe das ist so ungefähr in die Richtung von dem was Du brauchst.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
diGGa
Beiträge: 249
Registriert: 01.04.2005 11:00
Kontaktdaten:

Beitrag von diGGa »

ja das triffts so etwa.
ich will halt das wenn man n string_gadget markiert hat und dann ne taste drückt, mir dieser tasten code zurückgegeben wird damit ich das in ne datei speichern kann
Antworten