Results 1 to 2 of 2

Thread: TBGL_GetWindowKeyState - left Alt-key sucks

  1. #1
    thinBasic MVPs
    Join Date
    Oct 2012
    Location
    Germany
    Age
    54
    Posts
    1,529
    Rep Power
    170

    TBGL_GetWindowKeyState - left Alt-key sucks

    I wrote some little utility to find out, which key is related to what %VK-equate and to find out numbers of keys that don't have equates and also to find out what those strange keys as %VK_KANA, %VK_JUNJA or %VK_MODECHANGE are...


    If you run this you can do some input and the script will tell what occured. It's to fast to read if a key was pushed down or released, but it tells if you hold one.

    Now I experience the following:

    If I push the left ALT-key once, TBGL_GetWindowKeyState() keeps on returning <> 0 all the time until I push the same key a second time.

    Is it my keyboard that has malfunctions or the TBGL-function? ALT-key doesn't have a "lock"-state, does it? I'm not sure about that so I did not create an issue yet.

    Another odd thing: if using "editing keys" as arrows, insert, page down etc. there's always Key 255 displayed together with them. So I thought it would mark editing-keys, if key 255 is true. But the only key that displays 255 all alone is the Pause-Key (above Page Up on my keyboard) - so it might have some "Edit-Key-Flag" but not an assigned key-number.

    here's the script for testing:
    Uses "TBGL"
                                                              
    Begin Const  
      ' -- key-states
      %KS_Up   = -1
      %KS_Not  
      %KS_Down 
      %KS_Hold  
    End Const                            
    
    Global hWnd      As DWord       
    
    Global keyState(255)    As Long
    Global keyLastDown As Long
    
    Dim MouseWheel, MouseDeltaX, MouseDeltaY As Long
    
    Function TBMain()  
    
      Local i, row As Long
      
      
      ' -- Create and show window
      hWnd = TBGL_CreateWindowEx("TBGL script - press ESC to quit", 384, 256, 32, _ 
                             %TBGL_WS_DONTSIZE _
                        Or %TBGL_WS_WINDOWED _
                        Or %TBGL_WS_CLOSEBOX) 
      TBGL_ShowWindow 
      
      TBGL_BuildFont TBGL_FontHandle("System", 9), 1
      
      ' -- Resets status of all keys 
      TBGL_ResetKeyState()
      
      TBGL_UseTexturing(FALSE)  ' will just draw text and boxes...
      TBGL_RenderMatrix2D(0, 256, 384, 0) ' and just 2D 
      
      TBGL_SetActiveFont 1
      TBGL_Color 255, 255, 127   
        
      ' -- Main loop
      While TBGL_IsWindow(hWnd) 
        
        TBGL_ClearFrame 
          TBGL_PrintFont("do some input", 4, 24)
            
          If is_Input Then 
            row = 3
            If Mousewheel < 0 Then
              TBGL_PrintFont("mousewheel down", 4, 12 + 16 * row)
            ElseIf Mousewheel > 0 Then
              TBGL_PrintFont("mousewheel up", 4, 12 + 16 * row)
            EndIf
            row += 1
            If MouseDeltaX < 0 Then
              TBGL_PrintFont("mouse moved left", 4, 12 + 16 * row)
            ElseIf MouseDeltaX > 0 Then
              TBGL_PrintFont("mouse move right", 4, 12 + 16 * row)
            EndIf
            row += 1
            If MouseDeltaY < 0 Then
              TBGL_PrintFont("mouse move up", 4, 12 + 16 * row)
            ElseIf MouseDeltaY > 0 Then
              TBGL_PrintFont("mouse move down", 4, 12 + 16 * row)
            EndIf
            
            For i = 1 To 255
              Select Case keystate(i)
                Case %ks_Up
                   row += 1
                   TBGL_PrintFont(get_VK_Equate(i) + "---> %ks_UP", 4, 12 + 16 * row)
                   
                Case %ks_Not
                
                Case %ks_Down
                   row += 1
                   TBGL_PrintFont(get_VK_Equate(i) + "---> %ks_DOWN", 4, 12 + 16 * row)
                
                Case %ks_Hold
                  row += 1
                  TBGL_PrintFont(get_VK_Equate(i) + "---> %ks_HOLD", 4, 12 + 16 * row)
              End Select
            Next i
            If keyLastDown Then
              row += 1
              TBGL_PrintFont("just went down " + get_VK_Equate(keyLastDown), 4, 12 + 16 * row)
            EndIf 
          EndIf
          
        TBGL_DrawFrame 
        
        ' -- ESCAPE key to exit application
        If TBGL_GetWindowKeyState(hWnd, %VK_ESCAPE) Then Exit While 
    
      Wend 
    
      TBGL_DestroyWindow
    End Function 
    
    ' -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 
    
       
    Function is_Input() As Boolean
    
      Static lX, lY As Long
      Static doOnce As Boolean
      
      Local i As Long
      
      ' -- check & store the key- and mousebutton-states
      
      
      keyLastDown = 0
      
      For i = 1 To 255
        If TBGL_GetWindowKeyState(hWnd, i) Then
          Select Case keyState(i)
            Case %KS_Not,%KS_Up              
              keyState(i) = %KS_Down 
              ' remember key last down  
              keyLastDown = i
            Case Else
              keyState(i) = %Ks_Hold
          End Select
          Function = TRUE
        Else
          Select Case keystate(i)
            Case %KS_Down, %KS_Hold
              keyState(i) = %KS_Up
              Function = TRUE
            Case Else
              keyState(i) = %KS_Not
          End Select
        EndIf   
      Next i
      ' -- check and store mouse-movements to global
     
      If doOnce Then
      ' don't return "True" for the very first frame
       
        MouseWheel = TBGL_MouseGetWheelDelta
        MouseDeltaX = TBGL_MouseGetPosX - lX
        MouseDeltaY = TBGL_MouseGetPosY - lY 
      EndIf
      
      If MouseDeltaX Then Function = TRUE
      If MouseDeltaY Then Function = TRUE
      If Mousewheel  Then Function = TRUE
      
      
      lY = TBGL_MouseGetPosY
      lX = TBGL_MouseGetPosX
      
      doOnce = TRUE
      
    End Function                                                              
    
    '------------------------------------------------  
    
    Function get_VK_Equate(ByVal vKey As Long) As String
    
    ' just return a string of the keys equate
    
    Select Case vKey
      
      Case %VK_LBUTTON
        Return "%VK_LBUTTON "
      Case %VK_RBUTTON
        Return "%VK_RBUTTON "
      Case %VK_MBUTTON
        Return "%VK_MBUTTON "
      Case %VK_LEFT
        Return "%VK_LEFT "
      Case %VK_UP
        Return "%VK_UP " 
      Case %VK_RIGHT
        Return "%VK_RIGHT "
      Case %VK_DOWN
        Return "%VK_DOWN "
      Case %VK_RETURN
        Return "%VK_RETURN "
      Case %VK_SHIFT
        Return "%VK_SHIFT "
      Case %VK_CONTROL
        Return "%VK_CONTROL "
      Case %VK_MENU
        Return "%VK_MENU "
      Case %VK_LSHIFT
        Return "%VK_LSHIFT "
      Case %VK_RSHIFT
        Return "%VK_RSHIFT "
      Case %VK_LCONTROL
        Return "%VK_LCONTROL "
      Case %VK_RCONTROL
        Return "%VK_RCONTROL "
      Case %VK_LMENU
        Return "%VK_LMENU " 
      Case %VK_RMENU
        Return "%VK_RMENU "
      Case %VK_SPACE
        Return "%VK_SPACE "
      Case %VK_PGUP
        Return "%VK_PGUP " 
      Case %VK_PGDN
        Return "%VK_PGDN "
      Case %VK_END     
        Return "%VK_END "
      Case %VK_HOME  
        Return "%VK_HOME "
      Case %VK_0     
        Return "%VK_0 "
      Case %VK_1     
        Return "%VK_1 "
      Case %VK_2     
        Return "%VK_2 "
      Case %VK_3     
        Return "%VK_3 "
      Case %VK_4     
        Return "%VK_4 "
      Case %VK_5     
        Return "%VK_5 "
      Case %VK_6     
        Return "%VK_6 "
      Case %VK_7     
        Return "%VK_7 "
      Case %VK_8     
        Return "%VK_8 "
      Case %VK_9     
        Return "%VK_9 "
      Case %VK_A     
        Return "%VK_A "
      Case %VK_B     
        Return "%VK_B "
      Case %VK_C     
        Return "%VK_C "
      Case %VK_D     
        Return "%VK_D "
      Case %VK_E     
        Return "%VK_E "
      Case %VK_F     
        Return "%VK_F "
      Case %VK_G     
        Return "%VK_G "
      Case %VK_H     
        Return "%VK_H "
      Case %VK_I     
        Return "%VK_I "
      Case %VK_J     
        Return "%VK_J "
      Case %VK_K     
        Return "%VK_K "
      Case %VK_L     
        Return "%VK_L "
      Case %VK_M     
        Return "%VK_M "
      Case %VK_N     
        Return "%VK_N "
      Case %VK_O     
        Return "%VK_O "
      Case %VK_P     
        Return "%VK_P "
      Case %VK_Q     
        Return "%VK_Q "
      Case %VK_R     
        Return "%VK_R "
      Case %VK_S     
        Return "%VK_S "
      Case %VK_T     
        Return "%VK_T "
      Case %VK_U     
        Return "%VK_U "
      Case %VK_V     
        Return "%VK_V "
      Case %VK_W     
        Return "%VK_W "
      Case %VK_X     
        Return "%VK_X "
      Case %VK_Y     
        Return "%VK_Y "
      Case %VK_Z          
        Return "%VK_Z "
      Case %VK_CANCEL       
        Return "%VK_CANCEL "
      Case %VK_XBUTTON1     
        Return "%VK_XBUTTON1 "
      Case %VK_XBUTTON2 
        Return "%VK_XBUTTON2 "
      Case %VK_BACK    
        Return "%VK_BACK "
      Case %VK_TAB          
        Return "%VK_TAB "
      Case %VK_LINEFEED  
        Return "%VK_LINEFEED "
      Case %VK_CLEAR       
        Return "%VK_CLEAR "
      Case %VK_PAUSE
      Case %VK_CAPITAL  
        Return "%VK_CAPITAL "
      Case %VK_KANA       
        Return "%VK_KANA "
      Case %VK_HANGUL    
        Return "%VK_HANGUL "
      Case %VK_JUNJA     
        Return "%VK_JUNJA "
      Case %VK_FINAL     
        Return "%VK_FINAL "
      Case %VK_HANJA     
        Return "%VK_HANJA "
      Case %VK_KANJI      
        Return "%VK_KANJI "
      Case %VK_ESCAPE      
        Return "%VK_ESCAPE "
      Case %VK_CONVERT        
        Return "%VK_CONVERT "
      Case %VK_NONCONVERT 
        Return "%VK_NONCONVERT "
      Case %VK_ACCEPT         
        Return "%VK_ACCEPT "
      Case %VK_MODECHANGE
        Return "%VK_MODECHANGE "
      Case %VK_PRIOR    
        Return "%VK_PRIOR "
      Case %VK_NEXT       
        Return "%VK_NEXT "
      Case %VK_SELECT    
        Return "%VK_SELECT "
      Case %VK_PRINT       
        Return "%VK_PRINT "
      Case %VK_EXECUTE      
        Return "%VK_EXECUTE "
      Case %VK_SNAPSHOT   
        Return "%VK_SNAPSHOT "
      Case %VK_INSERT     
        Return "%VK_INSERT "
      Case %VK_DELETE   
        Return "%VK_DELETE "
      Case %VK_HELP     
        Return "%VK_HELP "
      Case %VK_LWIN     
        Return "%VK_LWIN "
      Case %VK_RWIN     
        Return "%VK_RWIN "
      Case %VK_APPS      
        Return "%VK_APPS "
      Case %VK_SLEEP        
        Return "%VK_SLEEP "
      Case %VK_NUMPAD0      
        Return "%VK_NUMPAD0 "
      Case %VK_NUMPAD1      
        Return "%VK_NUMPAD1 "
      Case %VK_NUMPAD2      
        Return "%VK_NUMPAD2 "
      Case %VK_NUMPAD3      
        Return "%VK_NUMPAD3 "
      Case %VK_NUMPAD4      
        Return "%VK_NUMPAD4 "
      Case %VK_NUMPAD5      
        Return "%VK_NUMPAD5 "
      Case %VK_NUMPAD6      
        Return "%VK_NUMPAD6 "
      Case %VK_NUMPAD7      
        Return "%VK_NUMPAD7 "
      Case %VK_NUMPAD8
        Return "%VK_NUMPAD8 "
      Case %VK_NUMPAD9       
        Return "%VK_NUMPAD9 "
      Case %VK_MULTIPLY 
        Return "%VK_MULTIPLY "
      Case %VK_ADD            
        Return "%VK_ADD "
      Case %VK_SEPARATOR    
        Return "%VK_SEPARATOR "
      Case %VK_SUBTRACT     
        Return "%VK_SUBTRACT "
      Case %VK_DECIMAL     
        Return "%VK_DECIMAL "
      Case %VK_DIVIDE  
        Return "%VK_DIVIDE "
      Case %VK_F1      
        Return "%VK_F1 "
      Case %VK_F2      
        Return "%VK_F2 "
      Case %VK_F3      
        Return "%VK_F3 "
      Case %VK_F4      
        Return "%VK_F4 "
      Case %VK_F5      
        Return "%VK_F5 "
      Case %VK_F6      
        Return "%VK_F6 "
      Case %VK_F7      
        Return "%VK_F7 "
      Case %VK_F8      
        Return "%VK_F8 "
      Case %VK_F9       
        Return "%VK_F9 "
      Case %VK_F10      
        Return "%VK_F10 "
      Case %VK_F11      
        Return "%VK_F11 "
      Case %VK_F12      
        Return "%VK_F12 "
      Case %VK_F13      
        Return "%VK_F13 "
      Case %VK_F14      
        Return "%VK_F14 "
      Case %VK_F15      
        Return "%VK_F15 "
      Case %VK_F16      
        Return "%VK_F16 "
      Case %VK_F17      
        Return "%VK_F17 "
      Case %VK_F18  
        Return "%VK_F18 "
      Case %VK_F19     
        Return "%VK_F19 "
      Case %VK_F20     
        Return "%VK_F20 "
      Case %VK_F21     
        Return "%VK_F21 "
      Case %VK_F22      
        Return "%VK_F22 "
      Case %VK_F23      
        Return "%VK_F23 "
      Case %VK_F24          
        Return "%VK_F24 "
      Case %VK_NUMLOCK     
        Return "%VK_NUMLOCK "
      Case %VK_SCROLL
        Return "%VK_SCROLL "
      Case Else
       Return Str$(vKey) 
    
    End Select
    
    
    End Function
    
    btw. it would be great if TBGL had an TBGL_isInput(hWnd)-function that returns also current states of the %VK-keys+buttons as in here.
    Last edited by ReneMiner; 23-02-2013 at 16:16.
    I think there are missing some Forum-sections as beta-testing and support

  2. #2
    Super Moderator Petr Schreiber's Avatar
    Join Date
    Aug 2005
    Location
    Brno - Czech Republic
    Posts
    7,128
    Rep Power
    732
    Hi Rene,

    thanks for nice test script.

    If I push the left ALT-key once, TBGL_GetWindowKeyState() keeps on returning <> 0 all the time until I push the same key a second time.
    This behavior is related to the system menu of all Windows... windows , this is why it displays %VK_MENU.

    The function is based on Win32 API "GetAsyncKeyState".


    Petr
    Learn 3D graphics with ThinBASIC, learn TBGL!
    Windows 10 64bit - Intel Core i5-3350P @ 3.1GHz - 16 GB RAM - NVIDIA GeForce GTX 1050 Ti 4GB

Similar Threads

  1. Be left in awe :)
    By kryton9 in forum General
    Replies: 8
    Last Post: 19-05-2008, 21:49
  2. Usage of the LEFT$ MID$ RIGHT$ Keywords
    By Michael Clease in forum Samples for help file
    Replies: 1
    Last Post: 28-05-2007, 11:45

Members who have read this thread: 0

There are no members to list at the moment.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •