Problème avec l' API GetKeyboardState avec PureBasic 4.40

Archive.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Problème avec l' API GetKeyboardState avec PureBasic 4.40

Message par nico »

GetKeyboardState permet de renvoyer l'état de toutes les touches.
Dans ce code je fais un debug de la touche #VK_CAPITAL qui renvoie 1 si activé ou 0 sinon.
Le problème avec PureBasic 4.40, c'est que l'API fonctionne très bien si la fenêtre à le Focus mais si elle le perd, j'ai n'importe quoi; alors que ça marche très bien avec la 4.31.
Résultat j'ai des codes qui ne fonctionnent plus avec la 4.40 :x

Le code de test:

Code : Tout sélectionner

Global Dim Key.c(256)

Procedure TimerProc(hwnd.l, uMsg.l, idEvent.l, dwTime.l)
  Select uMsg
    Case #WM_TIMER
      Select idEvent
        Case 99
          GetKeyboardState_(@Key(0))
          Debug Key(#VK_CAPITAL)
      EndSelect
  EndSelect
EndProcedure


OpenWindow(1, 10, 10, 220, 220, "", #PB_Window_SystemMenu)

StickyWindow(1, 1)

SetTimer_(WindowID(1), 99, 2000, @TimerProc())

Repeat
  Message=WindowEvent()
Until Message=#WM_CLOSE
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Problème avec l' API GetKeyboardState avec PureBasic 4.40

Message par nico »

Cette fois ci, ça ne fonctionne ni avec la 4.31, ni avec la 4.40 si la fenêtre n'as pas le Focus

Voici le code:

Code : Tout sélectionner

Structure KBDLLHOOKSTRUCT
  vkCode.l
  scanCode.l
  flags.l
  time.l
  dwExtraInfo.l
EndStructure

Global Hook.l, Dim Key.c(255)

Procedure.l KeyboardHook(nCode, wParam, lParam)
  Protected*p.KBDLLHOOKSTRUCT
  
  *p.KBDLLHOOKSTRUCT=lparam
  
  If nCode=#HC_ACTION
    If wParam=#WM_KEYDOWN
      Debug "----------------"
      Debug*p\vkCode
      GetKeyboardState_(@Key())
      ToAscii_(*p\vkCode,*p\scanCode, @Key(), @Ascii.w, 0)
      Debug Chr(Ascii)
      Debug Key(#VK_CAPITAL)
    EndIf
  EndIf
  
  ProcedureReturn CallNextHookEx_(hook, nCode, wParam, lParam)
EndProcedure

; Win NT
#WH_KEYBOARD_LL=13
hook=SetWindowsHookEx_(#WH_KEYBOARD_LL, @KeyboardHook(), GetModuleHandle_(0), 0)

OpenWindow(1, 10, 10, 220, 220, "", #PB_Window_SystemMenu)
StickyWindow(1, 1)

Repeat
  Message=WindowEvent()
Until Message=#WM_CLOSE
UnhookWindowsHookEx_(hook)
kwandjeen
Messages : 204
Inscription : dim. 16/juil./2006 21:44

Re: Problème avec l' API GetKeyboardState avec PureBasic 4.40

Message par kwandjeen »

J'avais fait un key logger je regarde si j'ai le même bug.

EDIT : Confirmé avec la version 4.31 je récupère mes entrées clavier et souris avec la 4.40 rien ne se passe.

Une info de la team sur cette API ?
Répondre