Aide sur un script activation/désactivation "CAPSLOCK"

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
lecrabe78
Niveau 1
Niveau 1
Messages : 6
Enregistré le : dim. 08 oct. 2017 17:10
Status : Hors ligne

Aide sur un script activation/désactivation "CAPSLOCK"

#1

Message par lecrabe78 »

Bonjour,à peine je me suis présenté que j'ai besoin d'aide,
je cherche à créer un script qui détecte si la touche verrou majuscule ou "caps lock" est activée ou pas,
ensuite quelle soit activée ou désactivée,je cherche évidemment à modifier son état,
j'y suis presque,mon script fonctionne pour activer la touche,
mais dans l'autre sens,pour la désactiver,ça ne fonctionne pas:
voici mon script:
#include <Constants.au3>

Global Const $VK_CAPITAL = 0x14
MsgBox(0,"Touche verrou majuscule: 1=activée   0=desactivée", " Etat de la Touche verrou majuscule=  " & _GetCapsLock())

Func _GetCapsLock()
    Local $ret
    $ret = DllCall("user32.dll","long","GetKeyState","long",$VK_CAPITAL)
    Return $ret[0]
EndFunc

Local $iAnswer = MsgBox(BitOR($MB_YESNOCANCEL, $MB_SYSTEMMODAL), "message1", " Voulez vous  [activer=oui]    [désactiver=non]   [ne rien modifier=annuler]   la touche majuscule?")
; réponse
; clic sur annuler (2) termine le script
If $iAnswer = 2 Then
   MsgBox($MB_SYSTEMMODAL, "message2", "OK.  Au revoir!")
   Exit
EndIf

If $iAnswer = 7 Then  ; clic sur non (7)  ;désactive la touche verrou majuscule
Send("{CAPSLOCK UP}")
   MsgBox($MB_SYSTEMMODAL, "message3", "Touche majuscle désactivée.   Au revoir!")
   Exit   ;==>activation

ElseIf $iAnswer = 6 Then  ; clic sur oui (6)  ;active la touche verrou majuscule
Send("{CAPSLOCK DOWN}")
   MsgBox($MB_SYSTEMMODAL, "message4", "Touche majuscle activée;    Au revoir!")
Exit   ;==>desactivation
EndIf



j'ai essayé d'inverser l'ordre des réponses,j'ai essayé à la place de "CAPSLOCK UP" , "CAPSLOCK 1" aussi "CAPSLOCK OFF" et j'ai même tester de remettre "CAPSLOCK DOWN" ,rien ne fonctionne,si j'ai fait une erreur je ne vois vraiment pas où (j'ai cherché depuis trois jour sur tout internet et rien)

j'espère que quelqu'un pourra m'aider
merci
Modifié en dernier par lecrabe78 le dim. 08 oct. 2017 18:56, modifié 2 fois.
Avatar du membre
TomAijerrie
Niveau 5
Niveau 5
Messages : 192
Enregistré le : lun. 02 juin 2014 09:55
Localisation : Lyon
Status : Hors ligne

Re: Aide sur un script

#2

Message par TomAijerrie »

Bonjour et bienvenu

Pour commencer, je t'invite à éditer ton premier post pour qu'on puisse savoir uniquement en regardant le titre quel type de problème tu as.
Met par exemple "Besoin d'aide pour activer/désactiver la touche CAPSLOCK"

Ensuite, il y a les balises [ code ] [ / code ] pour que tes codes soient plus jolis dans les messages

Code : Tout sélectionner

;Exemple
$a = 1
Tkt, on a tous écrit notre premier message, moi aussi j'ai fait ces erreurs au début.

Ensuite, Send("{CAPSLOCK DOWN}") sert à simuler le débutd'appuit sur la touche, et Send("{CAPSLOCK UP}") la fin de l'appui. En gros, quand tu fait Send("{CAPSLOCK DOWN}") tu lui "dit" que l'utilisateur a posé son doigt sur la touche, et qu'il l'enlève que quand tu feras Send("{CAPSLOCK UP}")
Autrement dit, c'est pas les bonnes touches.

Il faudrait seulement faire Send("{CAPSLOCK}") qui permet de permuter, on ne rien faire pour laisser comme c'est.

Cependant, sur mon ordi ça marche super bien pour VerrNum et ArretDefil, mais pas pour VerrMAJ...
lecrabe78
Niveau 1
Niveau 1
Messages : 6
Enregistré le : dim. 08 oct. 2017 17:10
Status : Hors ligne

Re: Aide sur un script activation/désactivation "CAPSLOCK"

#3

Message par lecrabe78 »

Bonjour,j'ai édité le titre,c'est vrai que c'est mieux,pour le Send("{CAPSLOCK}") , j'ai déjà testé aussi,ça n'a pas fonctionné,
j'ai même tester
Send("{CAPSLOCK 1}")
qui est censé faire un appui sur la touche et donc si elle est activée ça aurait du la désactiver idem si la touche est désactivée ça devrait l'activer,j'ai repris mon script plusieurs fois de zéro mais rien n'y fait les commandes que j'ai pu trouver avec le
Send()
-Send("{CAPSLOCK OFF}")
-Send("{CAPSLOCK 1}") ou plus que 1
-Send("{CAPSLOCK UP}")
lecrabe78
Niveau 1
Niveau 1
Messages : 6
Enregistré le : dim. 08 oct. 2017 17:10
Status : Hors ligne

Re: Aide sur un script activation/désactivation "CAPSLOCK"

#4

Message par lecrabe78 »

Bon,visiblement le problème ne vient pas de mon script si j'envoies
Send("{VOLUME_UP}")
à la place de CAPSLOCK UP ça fonctionne bien sur le volume
je comprends pas du tout le problème du CAPSLOCK
lecrabe78
Niveau 1
Niveau 1
Messages : 6
Enregistré le : dim. 08 oct. 2017 17:10
Status : Hors ligne

Re: Aide sur un script activation/désactivation "CAPSLOCK"

#5

Message par lecrabe78 »

J'ai trouvé ma solution tout seul,je poste mon script si ça peut aider vu comment j'ai galéré:
#include <Constants.au3>
#include <AutoItConstants.au3>

Opt("SendCapslockMode", 0)

Global Const $VK_CAPITAL = 0x14

MsgBox(0,"Touche verrou majuscule: 1=activée   0=desactivée", " Etat de la Touche verrou majuscule=  " & _GetCapsLock())


Func _GetCapsLock()
    Local $ret
    $ret = DllCall("user32.dll","long","GetKeyState","long",$VK_CAPITAL)
    Return $ret[0]
EndFunc

Local $iAnswer = MsgBox(BitOR($MB_YESNOCANCEL, $MB_SYSTEMMODAL), "message1", " Voulez vous  [activer=oui]    [désactiver=non]   [ne rien modifier=annuler]   la touche majuscule?")

; réponse
; clic sur annuler (2) termine le script
If $iAnswer = 2 Then
   MsgBox($MB_SYSTEMMODAL, "message2", "OK.  Au revoir!")
   Exit
EndIf

; clic sur non (7) désactive la touche verrou majuscule
If $iAnswer = 7 Then
   Send("{CAPSLOCK OFF}")
   MsgBox($MB_SYSTEMMODAL, "message3", "Touche verrou majuscle désactivée.  Au revoir!")
Exit   ;==>désactivation

; clic sur oui (6) active la touche verrou majuscule
ElseIf $iAnswer = 6 Then
   Send("{CAPSLOCK DOWN}")
   MsgBox($MB_SYSTEMMODAL, "message4", "Touche verrou majuscle activée;   Au revoir!")
Exit   ;==>activation
EndIf

 
mdanielm
Membre émérite
Membre émérite
Messages : 254
Enregistré le : mer. 11 déc. 2013 19:48
Status : Hors ligne

Re: Aide sur un script activation/désactivation "CAPSLOCK"

#6

Message par mdanielm »

Bonjour
Ta solution marche de travers LeCrabe.
La solution ci dessous pour NUMLOCK (ou n'importe quelle autre touche) devrait convenir.
Je la mettrai dans la doc, car celle de la doc ne marche pas (ou plus).

Code : Tout sélectionner

#include <WinAPISys.au3>
#include <WinAPIvkeysConstants.au3>

Local $aOnOff[2] = ['OFF', 'ON']

ConsoleWrite('NumLock: ' & $aOnOff[BitAND(_WinAPI_GetKeyState($VK_NUMLOCK), 1)] & @CRLF)
Sleep(1500)
Toggle()
ConsoleWrite('NumLock: ' & $aOnOff[BitAND(_WinAPI_GetKeyState($VK_NUMLOCK), 1)] & @CRLF)
Sleep(1500)
Toggle()
ConsoleWrite('NumLock: ' & $aOnOff[BitAND(_WinAPI_GetKeyState($VK_NUMLOCK), 1)] & @CRLF)

Func Toggle()
    If BitAND(_WinAPI_GetKeyState($VK_NUMLOCK), 1) = 0 Then
        Send('{NUMLOCK on}')
    Else
        Send('{NUMLOCK off}')
    EndIf
EndFunc

Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: Aide sur un script activation/désactivation "CAPSLOCK"

#7

Message par orax »

Dans mon cas, Send('{CAPSLOCK off}') ne fait rien. Mais c'est probablement parce que j'ai une configuration différente. Dans "Services de texte et de langues", j'ai coché "Appuyer sur la touche MAJ".

Code : Tout sélectionner

Opt('SendCapslockMode', 0)

;~ Send('{CAPSLOCK off}') ; ne marche pas avec ma configuration
Send('{LSHIFT}')
Fichiers joints
rundll32.png
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
lecrabe78
Niveau 1
Niveau 1
Messages : 6
Enregistré le : dim. 08 oct. 2017 17:10
Status : Hors ligne

Re: Aide sur un script activation/désactivation "CAPSLOCK"

#8

Message par lecrabe78 »

@mdanielm,je viens de modifier le script pour le tester avec le CAPSLOCK par curiosité,mais visiblement ça ne fonctionne pas,
et j'aimerai savoir qu'est ce qu'il y a de travers dans mon script??
Pour moi,il est fonctionnel:le but:
je compile le script,je rajoute de le chemin de l'exe dans le run de la clé de registre et à chaque démarrage,le script vérifie et
demande à l'utilisateur d'activer ou désactiver le verrou majuscule
#include <WinAPISys.au3>
#include <WinAPIvkeysConstants.au3>

Local $aOnOff[2] = ['OFF', 'ON']

ConsoleWrite('CAPSLOCK: ' & $aOnOff[BitAND(_WinAPI_GetKeyState($VK_CAPITAL), 1)] & @CRLF)
Sleep(1500)
Toggle()
ConsoleWrite('CAPSLOCK: ' & $aOnOff[BitAND(_WinAPI_GetKeyState($VK_CAPITAL), 1)] & @CRLF)
Sleep(1500)
Toggle()
ConsoleWrite('CAPSLOCK: ' & $aOnOff[BitAND(_WinAPI_GetKeyState($VK_CAPITAL), 1)] & @CRLF)

Func Toggle()
    If BitAND(_WinAPI_GetKeyState($VK_CAPITAL), 1) = 0 Then
        Send('{CAPSLOCK on}')
    Else
        Send('{CAPSLOCK off}')
    EndIf
EndFunc
mdanielm
Membre émérite
Membre émérite
Messages : 254
Enregistré le : mer. 11 déc. 2013 19:48
Status : Hors ligne

Re: Aide sur un script activation/désactivation "CAPSLOCK"

#9

Message par mdanielm »

Essai du script de Mr LeCrabe:
-Ma touche CAPSLOCK est désactivée (voyant lumineux sur Off)
-Je lance le script, je vois Etat=0, je clique sur OK
-Je clique sur oui pour activer la touche
-La touche s'active et je quitte

-je relance le script avec cette fois la touche CAPSLOCK activée par la manip ci dessus
-Je vois Etat=-127, je clique sur OK
-je clique Non pour désactiver ma touche
-le message touche désactivée s'affiche mais ELLE RESTE ACTIVéE
-je clique sur OK pour quitter, la touche reste activée.

L'option toggle de la doc dans Send('{CAPSLOCK toggle}') ne fonctionne pas:

Code : Tout sélectionner

#include <WinAPISys.au3>
#include <WinAPIvkeysConstants.au3>

; Demande à AutoIt de ne pas gérer CapsLock
AutoItSetOption("SendCapslockMode", 0)

Local $aOnOff[2] = ['OFF', 'ON']
ConsoleWrite('Etat CapsLock: ' & $aOnOff[BitAND(_WinAPI_GetKeyState($VK_CAPITAL), 1)] & @CRLF)

; Clignotement du témoin lumineux de la touche CAPSLOCK, s'il existe
for $i = 1 to 10
    If BitAND(_WinAPI_GetKeyState($VK_CAPITAL), 1) = 0 Then
       Send('{CAPSLOCK on}')
    Else
        Send('{CAPSLOCK off}')
    EndIf
    Sleep(200)
Next

Avatar du membre
TomAijerrie
Niveau 5
Niveau 5
Messages : 192
Enregistré le : lun. 02 juin 2014 09:55
Localisation : Lyon
Status : Hors ligne

Re: Aide sur un script activation/désactivation "CAPSLOCK"

#10

Message par TomAijerrie »

Je confirme que ça ne fonctionne pas, à une époque je m'étais amusé à faire une animation avec les 3 LEDs de mon clavier grâce à ces touches et send(), et la LED du milieu (Verr MAJ) ne marchait pas...
tac7
Niveau 1
Niveau 1
Messages : 1
Enregistré le : sam. 17 juin 2017 17:33
Status : Hors ligne

Re: Aide sur un script activation/désactivation "CAPSLOCK"

#11

Message par tac7 »

Bonjour,

Je viens de travailler sur ce problème aujourd'hui et j'ai constaté le même résultat.
On dirait que concernant le CAPSLOCK cela ne fonctionne pas...

J'ai trouvé une solution pour mon cas (Besoin de désactiver le CAPSLOCK) et en plus grâce à ce thread et à "orax" j'ai pu completer ma solution qui n'aurait marcher que dans un certain cas...

Il y a en fait UNE DIFFÉRENCE si Windows est configuré en "Appuyer sur la touche VERR MAJ" ou si il est en "Appuyer sur la touche MAJ"

Dans le cas "Appuyer sur la touche MAJ" (comme dans mon cas) la fonction "CAPSLOCK OFF" ne marche pas mais j'ai fait le test en mode "Appuyer sur la touche VERR MAJ" et SURPRISE CELA FONCTIONNE.

IL FAUT IMPERATIVEMENT METTRE
Opt("SendCapslockMode", 0)
Send("{CAPSLOCK OFF}"
Et donc dans le cas de "Appuyer sur la touche MAJ" (mon cas)
je fais simplement :
    Send("{Shiftdown}")
    Send("{Shiftup}")
Du coup dans mon Script, ne sachant pas dans qu'elle cas est l'utilisateur, je met la totalité des 4 lignes...
Répondre