[..] Générer le texte d'un raccourci clavier

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Scratchoun
Niveau 1
Niveau 1
Messages : 5
Enregistré le : sam. 08 août 2009 16:03
Status : Hors ligne

[..] Générer le texte d'un raccourci clavier

#1

Message par Scratchoun »

Bonjour,

Sous ce titre pas très explicite, j'ai besoin de vos lumières sur AutoIt. Je m'explique.

Je souhaiterais dans un champ d'édition des plus basiques, pouvoir obtenir le texte d'une combinaison de touche pressée.
Exemple : Quand je suis dans ce champ d'édition, et que j'appuie sur Control+alt+K, je voudrais que ça me note dans l'Edit "CTRL+ALT+K", pour ensuite être envoyé à un fichier texte. C'est exactement la même chose dans Windows pour attribuer un raccourci clavier à un raccourci sur le bureau. Je veux faire exactement la même chose mais pour un éditeur de code.

Je ne souhaite pas avoir toutes les touches appuyées par l'utilisateur (aka un keylogger car d'après ce que j'ai lu, ça flirte avec les limites du légal), je veux juste savoir quelles touches l'utilisateur va saisir dans mon champ d'édition. Pensez-vous que c'est faisable sans être borderline. J'ai vu la fonction ispressed, mais est-ce que ça va vraiment me donner ce que je veux?

Je peux passer autrement, par exemple en faisant une fenêtre avec des cases à cocher "CTRL", "ALT", "windows", "Maj" et un champ d'édition "touche", mais je trouve ça plus long d'une part à scripter, mais surtout à utiliser.

Merci de vos réponses ;)
Avatar du membre
jbnh
Niveau 11
Niveau 11
Messages : 1932
Enregistré le : ven. 02 mai 2008 14:54
Localisation : Bruxelles
Status : Hors ligne

Re: [..] Générer le texte d'un raccourci clavier

#2

Message par jbnh »

Bonjour,
Comme vous l'avez dit, ispressed me semble le meilleur moyen.

-> if ispressed(touche) -> filewrite la touche -> et le tour est joué.

J'espère avoir bien compris ce que vous vouliez.
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !

Merci
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Générer le texte d'un raccourci clavier

#3

Message par Iste »

C'est faisable, mais bien plus long a ecrire que les checkbox+input ^^'
Enfin, si ca peu t'aider... c'est... assez barbar
► Afficher le texte
Signez ici
Scratchoun
Niveau 1
Niveau 1
Messages : 5
Enregistré le : sam. 08 août 2009 16:03
Status : Hors ligne

Re: [..] Générer le texte d'un raccourci clavier

#4

Message par Scratchoun »

Merci pour vos réponses aussi rapides Jbnh et Iste.
Il est vrai qu'il est moins long d'utiliser les checkbox, mais en fait je refais une interface déjà existante, et pour ne pas troubler les utilisateurs (même si je pense que le changement n'est pas énorme), je préfere garder la même chose.
Je vais tester ton code iste et de te tiens au jus ^^. J'ai cherché un peu pour "WIN", c'est "5B" et "5C" car visiblement sur certains claviers il y en a un à gauche et un à droite.

Je débute depuis peu en scripts autoit, et j'ai un autre petit problème.

En fait je n'ai pas trouvé de fonctions permettant de savoir si un input avait le focus, pourtant j'ai bine épluché la doc. Cela me servirait pour mes histoires de raccourcis clavier car la touche Alt doit être utilisable en dehors du Input. Donc je me suis dit que j'allais faire un test pour savoir si le focus était sur le bon input, mais je trouve pas de fonctions.

Je trouve ça bizarre. J'ai essayé les "GUIctrlgetstate", mais je n'arrive pas à récupérer l'info. Je pense que je m'y prends mal, mais même en regardant quelques scripts, je n'arrive pas à trouver la solution!

Merci d'avance!
Avatar du membre
jbnh
Niveau 11
Niveau 11
Messages : 1932
Enregistré le : ven. 02 mai 2008 14:54
Localisation : Bruxelles
Status : Hors ligne

Re: [..] Générer le texte d'un raccourci clavier

#5

Message par jbnh »

Wingetstate permet de recevoir la status de la fenêtre souhaitée. Pour l'utiliser, entrez le titre de la fenetre de l'input box ou alors la class. Plus d'informations ici.

La class d'une fenêtre peut être obtenue grace à l'outil Autoit Window Info.

Une autre methode plus rapide est d'utiliser WinActive, spécifique pour savoir si la fenetre est active ou pas.

Ensuite vous pouvez l'activer avec winactivate.
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !

Merci
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Générer le texte d'un raccourci clavier

#6

Message par Iste »

@Scratchoun, bien vu pour la touche win, jai regardé la liste 3fois, je suis passé a coté 3fois xD

Le probleme n'est pas le focus de la fenetre mais de l'input (je crois)
Pour ca j'ai trouvu ControlGetFocus(), mais je sais pas comment savoir a l'avance ce que les controle ont comme nom :/
Enfin, voici avec un petit modif
► Afficher le texte
Je cherche encore a améliorer le tout, j'editerai plus tard
Mon probleme pour l'instant est que je n'arrive pas a "conserver" la dernière combinaison
Signez ici
Scratchoun
Niveau 1
Niveau 1
Messages : 5
Enregistré le : sam. 08 août 2009 16:03
Status : Hors ligne

Re: [R] Générer le texte d'un raccourci clavier

#7

Message par Scratchoun »

Effectivement, le problème vient de l'input. J'ai vu qu'il y avait une fonction pour donner le focus : GUICTRLsetState($GUI_Focused) ou un truc comme ça, et je cherchais plus une fonction du type GuictrlgetState (focus, $id_control) qui renvoie 1 si le $id_control l'a ou 0 sinon.
Je vais tester cette ligne.

Pour ton code, ça fonctionne plutôt bien ! Je galère aussi pour garder la dernière combinaison.
Je pense avoir une méthode, qui rejoint un peu celle de jbnh. On met toutes les touches pressées dans un fichier txt ou une variable. Puis on la parse avec les caractères '+'. Tous les éléments identiques sont supprimés pour n'en laisser qu'un, et on obtient le raccourci. J'ai pas encore tester en code. Je te dis (plutôt demain car il se fait tard) si ça fonctionne.

Merci pour votre aide en tout cas.
Je mets le topic en résolu, et dès que le résultat est bon, je colle le code source^^
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

Re: [..] Générer le texte d'un raccourci clavier

#8

Message par SagePourpre »

► Afficher le texte

Tu peux remplacer la partie ci-haut par celle ci-bas pour le même résultat

Code : Tout sélectionner

    If _IsPressed(11) Then add("CTRL")
        If _IsPressed(12) Then add("ALT")
        If _IsPressed(10) Then add("MAJ")
        If _IsPressed("5B") Or _IsPressed("5C") Then add("WIN") ; j'ai pas trouvé le code

        For $i = 48 To 90
            If _IsPressed(Hex($i)) Then add(Chr($i))
        Next
 
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
Scratchoun
Niveau 1
Niveau 1
Messages : 5
Enregistré le : sam. 08 août 2009 16:03
Status : Hors ligne

Re: [..] Générer le texte d'un raccourci clavier

#9

Message par Scratchoun »

J'ai un peu avancé.

Au lieu d'utiliser

Code : Tout sélectionner

if _ispressed(11) then add("ALT")
Je fais ceci :

Code : Tout sélectionner

        while _IsPressed(11)  
            if $CTRLdejaPressee==0 Then
                 add("CTRL") 
                 $CTRLdejaPressee=1
            else 
                 ExitLoop
            EndIf
        WEnd        
        while  _IsPressed(12)  
            if $ALTdejaPressee==0 Then
                 add("ALT")
                 $ALTdejaPressee=1
            else 
                 ExitLoop
            EndIf
        WEnd
 
L'inconvénient, c'est que je dois le faire pour chaque touche ! et que je dois initialiser une variable par boucle pour savoir si elle a été pressée ou non.
L'avantage, c'est que dès qu'une touche est pressée, elle ne l'est qu'une fois.

Merci sage, c'est vrai que ça prend moins de place ^^
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Générer le texte d'un raccourci clavier

#10

Message par Iste »

Oui en effet, j'ai pas cherché tres loin ^^
C'est plus propre

Pis sinon, tu pourrais mettre le tout dans une boucle avec des tableau, mais pour savoir si une touche est déja pressed, tu peux aussi faire un StringInStr() sur la variable contenant le raccourcit

Sinon, je penser un simple bouton a coté, tu maintien le raccourcit d'une main et clic de l'autre.... bon ok, peut etre pas LA solution ^^'
(Sinon, rajouter une vérif sur la touche espace (par exemple) et si elle est pressée, on garde le raccourcit)
Signez ici
Scratchoun
Niveau 1
Niveau 1
Messages : 5
Enregistré le : sam. 08 août 2009 16:03
Status : Hors ligne

Re: [..] Générer le texte d'un raccourci clavier

#11

Message par Scratchoun »

Ah oui!! Le tableau, j'y avais pas pensé... -_-'

On touche au but là. J'arrive à obtenir le raccourci clavier exact. Reste à l'afficher une fois et une seule!
Répondre