Page 1 sur 2

[Résolu] Rendre le pavé numérique toujours actif

Publié : ven. 14/juil./2023 11:00
par brossden
Bonjour à tous
Je viens vers vous une fois de plus car je cherche la library PureLib.pb et pour le moment je ne la trouve nul part.
Si vous avez un lien grand merci à vous !

Cordialement

Brossden

Re: PureLib.pb

Publié : ven. 14/juil./2023 11:51
par Ollivier
Tu parles d'un fichier créé par ArS ?

Re: PureLib.pb

Publié : ven. 14/juil./2023 12:36
par brossden
Bonjour ollivier et merci de te pencher sur mon problème

Je ne sais pas, j'ai trouvé ce code et je cherche à le tester :

I
includeFile "PureLib/PureLib.pb"

Procedure CheckNumLockState()
If ReadRegKeyString(HKEY_CURRENT_USER, "Control Panel\Keyboard", "InitialKeyboardIndicators") = "2"
MessageRequester("État du pavé numérique", "Le pavé numérique est verrouillé.")
Else
MessageRequester("État du pavé numérique", "Le pavé numérique n'est pas verrouillé.")
EndIf
EndProcedure

Je cherche une solution pour toujours avoir le clavier numérique en mode "numlock"

Re: PureLib.pb

Publié : ven. 14/juil./2023 17:39
par boddhi
Salut Denis,

Sous Windows, avec un EventTimer()

Code : Tout sélectionner

keybd_event_(#VK_NUMLOCK,0,#KEYEVENTF_EXTENDEDKEY|0,#true) ; #True = NumLock verrouillé et donc #False = NumLock déverrouillé  :) 

Re: PureLib.pb

Publié : ven. 14/juil./2023 17:58
par brossden
Désolé boddhi mais que le pavé soit verrouillé ou pas la réponse est la même True ! Mais merci quand même pour ton aide !

Re: PureLib.pb

Publié : ven. 14/juil./2023 23:26
par boddhi
brossden a écrit : Désolé boddhi mais que le pavé soit verrouillé ou pas la réponse est la même True ! Mais merci quand même pour ton aide !
:oops: C'est vrai, j'ai extrait ça d'un très vieux code sans vérifier complètement le fonctionnement correct.
De plus, Keybd_Event() semble avoir été déprécié par MS depuis un certain temps...

Essaye plutôt ça :

Code : Tout sélectionner

Procedure Pc_BloquerToucheNUMLOCK()
  Protected.INPUT Saisie
  If GetKeyState_(#VK_NUMLOCK)<>#True
    With Saisie
      \type=#INPUT_KEYBOARD
      \ki\wVk=#VK_NUMLOCK
      \ki\dwFlags=0
      SendInput_(1,@Saisie,SizeOf(INPUT))
      \ki\dwFlags=#KEYEVENTF_KEYUP
      SendInput_(1,@Saisie,SizeOf(INPUT))
    EndWith
 EndIf   
EndProcedure

OpenWindow(0,100,100,200,200,"Test",#PB_Window_SystemMenu)
AddWindowTimer(0,0,100)
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Timer
      If EventTimer()=0
        Pc_BloquerToucheNUMLOCK()
      EndIf
    Case #PB_Event_CloseWindow:End
  EndSelect
ForEver

Re: PureLib.pb

Publié : sam. 15/juil./2023 6:56
par brossden
Désolé boddhi mais ce n'est pas mieux... Merci tout de même d'essayer!

Re: PureLib.pb

Publié : sam. 15/juil./2023 8:43
par boddhi
8O Ca marche parfaitement pour moi pourtant !

Quand tu parles de clavier numérique, tu fais bien référence au pavé numérique à droite d'un clavier simple et non des chiffres situés au dessus des caractères alphabétiques ?

Si c'est bien le cas, je t'assure que le code fonctionne correctement (Sous W10 x64 / PB 6.02 x64).Je l'ai testé 4 ou 5 fois...
Image

Re: PureLib.pb

Publié : sam. 15/juil./2023 9:06
par brossden
Non tu testes uniquement l'appuis sur la touche mais pas l'état "numlock on" ou "numlock off"
De plus test le code que tu as mis ici rien ne se passe dans la fenêtre.

Re: PureLib.pb

Publié : sam. 15/juil./2023 9:19
par Marc56
Ceci: (Windows API)

Code : Tout sélectionner

Debug GetKeyState_(#VK_NUMLOCK) & 1
1 = Numlock On
0 = Numlock Off

Source et exemple
https://www.rsbasic.de/winapi-library/
WinAPI Library
> Souris et clavier
> Trouver le verrouillage numérique, le verrouillage des majuscules, le verrouillage du défilement

Code : Tout sélectionner

;Autor: Josef Sniatecki

EnableExplicit

Define EventID

Procedure.s CheckCapsLock()
  If GetKeyState_(#VK_CAPITAL) & 1
    ProcedureReturn "Caps Lock: On"
  Else
    ProcedureReturn "Caps Lock: Off"
  EndIf
EndProcedure

Procedure.s CheckNumLock()
  If GetKeyState_(#VK_NUMLOCK) & 1
    ProcedureReturn "Num Lock: On"
  Else
    ProcedureReturn "Num Lock: Off"
  EndIf
EndProcedure

Procedure.s CheckScrollLock()
  If GetKeyState_(#VK_SCROLL) & 1
    ProcedureReturn "Scroll Lock: On"
  Else
    ProcedureReturn "Scroll Lock: Off"
  EndIf
EndProcedure

If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  TextGadget(1,10,10,100,20,"",0)
  TextGadget(2,10,30,100,20,"",0)
  TextGadget(3,10,50,100,20,"",0)
  
  SetGadgetText(1,CheckCapsLock())
  SetGadgetText(2,CheckScrollLock())
  SetGadgetText(3,CheckNumLock())
  
Repeat
EventID=WaitWindowEvent()
If EventID=#WM_KEYUP
  SetGadgetText(1,CheckCapsLock())
  SetGadgetText(2,CheckScrollLock())
  SetGadgetText(3,CheckNumLock())
EndIf
Until EventID = #PB_Event_CloseWindow
EndIf
; IDE Options = PureBasic 5.30 (Windows - x64)
; CursorPosition = 2
; Folding = -
; EnableXP
; EnableUser
; EnableCompileCount = 1
; EnableBuildCount = 0
(Testé)
:wink:

Re: PureLib.pb

Publié : sam. 15/juil./2023 9:49
par brossden
Bravo Marc56

ça marche impeccablement et hyper concis

as tu un code pour forcer le pavé numérique en mode actif ?

Re: PureLib.pb

Publié : sam. 15/juil./2023 9:56
par Marc56
Dans la même section du site Rsbasic
Source et exemple
https://www.rsbasic.de/winapi-library/
WinAPI Library
> Souris et clavier
(je n'ai pas testé les autres fonctions)

PS. Prendre parfois la section en anglais du site, car les traductions français ne sont pas toutes exactes.

Re: PureLib.pb

Publié : sam. 15/juil./2023 10:44
par brossden
Merci à tous et particulièrement à Marc56 qui m'a révélé la solution.

Je suis heureux de constater qu'il y a toujours quelqu'un pour aider ceux qui sont dans la panade alors un grand MERCI à tout le monde !

Pour être sûr de toujours avoir le pavé numérique actif voici le code :

Code : Tout sélectionner

If OpenWindow(0,0,0,300,20,"Pavé numerique Activé",#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
   Repeat
      If  GetKeyState_(#VK_NUMLOCK) & 1 = 0
         keybd_event_(#VK_NUMLOCK,0,#KEYEVENTF_EXTENDEDKEY|0,0)
         keybd_event_(#VK_NUMLOCK,0,#KEYEVENTF_EXTENDEDKEY|#KEYEVENTF_KEYUP,0)
     EndIf
     Event = WindowEvent()
  WaitWindowEvent(200)
 Until Event = #PB_Event_CloseWindow
EndIf

Re: PureLib.pb Résolu mais sans cette library

Publié : jeu. 20/juil./2023 13:47
par brossden
Les touches sous le pavé numérique restent accessibles en appuyant sur Shift (tabulateur haut)

Re: [Résolu] Rendre le pavé numérique toujours actif

Publié : jeu. 20/juil./2023 17:28
par boddhi
Salut Brossden,

Ton code est indéniablement plus concis et rapide que le mien ! :wink:

Toutefois, une petite remarque :
brossden a écrit : sam. 15/juil./2023 9:06 Non tu testes uniquement l'appuis sur la touche mais pas l'état "numlock on" ou "numlock off"
De plus test le code que tu as mis ici rien ne se passe dans la fenêtre.
brossden a écrit : ven. 14/juil./2023 12:36 Je cherche une solution pour toujours avoir le clavier numérique en mode "numlock"
Mon code répondait bien à ta demande initiale, à savoir, avoir toujours le numlock activé.
Et quant à une interaction avec la fenêtre, ce n'était pas précisé dans ta requête. :wink:

Cdlt.