Page 1 sur 1

[R] "_isPressed" est trop efficace.

Posté : lun. 02 mai 2011 17:29
par Baku
Bonjour ! :D

Je souhaiterais avoir quelques idées qui pourraient améliorer le concept du programme que j'ai développé, qui ne marche que moyennement.
Je vous explique vite fait le truc :
J'utilise la fonction "_isPressed" pour récupérer l'appui sur certaines touches du clavier. Le script attend qu'une clé définie soit tapée pour exécuter une action.
Au début c'était seulement pour injecter ce que je voulais écrire (sur msn par exemple qui se situe sur mon deuxième écran) et pouvoir continuer à jouer en fullscreen à des jeux tels que des FPS où on peut se permettre une pause tchat mais pas de retour windows, surtout lorsqu'il faut 5minutes pour relancer la 3D du jeu ><
Du coup, une fois la clé détectée, je passais en mode hotkey pour taper sur le chat (msn hein, pas celui de mamie :P) et une fois envoyé, je réinitialisais les hotkeys.

Pourquoi "_isPressed" et pas directement un hotkey ? Bah tout simplement pour pas perdre l'usage des touches, en effet "hotkeyset", vous le savez empêche le "send" général de la touche où le hotkey est présent, la touche ne sert plus qu'à appeler la fonction.

Bon, pour cela ca marchait puisque je définissais des clés simples telles que "&m".
J'ai laissé tomber ce concept puisque je joue beaucoup moins, donc je n'en ai plus besoin, cependant l'idée de pouvoir automatiser des taches telles que "windows+R|ctrl+a|delete|%appdata%|{enter}" en tapant juste "%app" sur le clavier est franchement alléchant puisque c'est une action que je fais tous les jours et notamment lorsque j'ai 50fenetres ouvertes, la galère pour aller chercher le raccourcis sur le bureau, le menu étant plein... Bref.

Après un roman qui je n'en doute pas est fort passionnant à vos yeux le soucis est là :
Ca ne marche pas. Pourquoi ? Après quelques tests j'ai remarqué qu'il enregistrait "%%%%aappp" ou des trucs comme ca.
Il double des lettres.
J'ai testé de mettre un "sleep(100)", pensant que ce n'était pas trop et assez à la fois. En effet, ca marche mais ca reste assez hasardeux, surtout qu'en plus de doubler des lettres, il en oublie.

Voila, avez vous des idées à soumettre pour améliorer ce genre de petits problèmes ? ^^
Merci d'avance ! :)

Re: [..] "_isPressed" est trop efficace.

Posté : lun. 02 mai 2011 18:33
par legend
Je propose hotkeyset +controlsend sur le control de la fenêtre activée.
contrairement a send, hotkeyset ne block pas le controlsend.
Lis le help autoit.
bonne journée

Re: [..] "_isPressed" est trop efficace.

Posté : lun. 02 mai 2011 18:37
par Baku
Ouaip' mais le soucis du controlsend c'est qu'il send sur quelque chose de bien défini, est-ce que "fenêtre active" suffit ? Je ne pense pas, par exemple, rien que sous mon navigateur j'ai ma barre d'adresse, ma barre wiki, et tous les cadres de texte des pages webs sur lesquelles je navigue que j'en sélectionne un ou un autre, le controlsend ne va pas faire la différence.

Si ? Il le fait si je n'attribue que le nom de la fenêtre au contrôle ? :|

Edit : Après réflexion, pour que ca marche, il faudrait en effet changer l'instance systématiquement au clic de la souris (automatiser et intégrer un Au3Info.exe en quelques sortes) dans une case, et cela poserait sans doutes des soucis de compatibilité notamment pour des jeux où l'instance est la même dans toute la fenêtre (du moins de ce que rapporte au3info.exe) et où il ne ferait pas différence entre déplacements/chat...

Re: [..] "_isPressed" est trop efficace.

Posté : lun. 02 mai 2011 18:44
par legend
controlsend ("", "", "", "Ceci est un essais")
Par default ça envoie les caractéres sur le control actif de la fenêtre active.
Faut juste essayer et non pas lire la doc :P
bonne journée

Re: [R] "_isPressed" est trop efficace.

Posté : lun. 02 mai 2011 18:50
par Baku
legend a écrit : Lis le help autoit.
legend a écrit : Faut juste essayer et non pas lire la doc :P
:lol:

Quoiqu'il en soit c'est vrai, merci beaucoup, j'vais continuer mes tests pour voir si ca bug avec rien, en attendant : Problème Résolu ! ^^

Re: [R] "_isPressed" est trop efficace.

Posté : mar. 03 mai 2011 20:34
par TommyDDR
Pour votre histoire de ispressed, tant que la touche est appuyé, il continura de rentrer dans votre boucle.

Dans ma générosité, voici un joli petit code :)
► Afficher le textecode

Re: [R] "_isPressed" est trop efficace.

Posté : mar. 03 mai 2011 22:18
par legend
simpa le code.
un seul default : dans le cas ou tu reste appuyé sur une touche.
bonne journée :)

Re: [R] "_isPressed" est trop efficace.

Posté : mer. 04 mai 2011 23:38
par TommyDDR
oui, mais dans son cas, je doute qu'il écrive "app" en restant appuyer sur le "p" pour en avoir 2 :P

Re: [R] "_isPressed" est trop efficace.

Posté : jeu. 05 mai 2011 11:27
par protecta
Je ne sais pas si l'auteur du post repassera par là, mais en tous les cas je me suis poser moi aussi la question, et le code le plus simple que j'ai trouvé était de rajouter une boucle infini qui ne fait rien tant que la touche n'est pas relâchée.

Exemple :

Code : Tout sélectionner

If _IsPressed(unetouche, $dll) Then
        ;tu rentres ici l'action à effectuer 
    EndIf
    While _IsPressed(unetouche) = 1 ;tant que le bouton reste appuyé, on ne fait
                                                     ;rien, évite la répétition 
    WEnd
Voilà, une astuce simple mais efficace !

Re: [R] "_isPressed" est trop efficace.

Posté : jeu. 05 mai 2011 15:50
par legend
Je déteste cette solution :
exemple : je reste appuyé sur A et j'appuie sur B.
=> B ne sera pas détectée.
c'est pour cette simple raison que je préfère hotkeyset :)
merci et bonne journée

Re: [R] "_isPressed" est trop efficace.

Posté : jeu. 05 mai 2011 16:13
par Baku
merci à tous pour vos idées, tout est à prendre jvois une utilité à chacune des variantes, cependant dans mon cas, il reste un problème qu'aucun des scripts ne corrige, c'est que j'aime jouer, wow, css, Minecraft, cod... bref et le script étant toujours actif sur le pc, le send de là touche avec les hotkeys bloque les déplacements puisque ça flood la touche et ne considère pas un laissé appuyé ^^

Re: [R] "_isPressed" est trop efficace.

Posté : jeu. 05 mai 2011 18:01
par legend

Code : Tout sélectionner

hotkeyset ("a", "a")
func a
controlsend ("", "", "", "a")
; fonction que tu veut faire
endfunc
la touche fonctionne
bonne journée

Re: [R] "_isPressed" est trop efficace.

Posté : jeu. 05 mai 2011 20:57
par Baku
Non, pas sur des jeux, ca fait bugger les déplacements. C'est exactement ca que j'utilise actuellement pour le programme ^^

Re: [R] "_isPressed" est trop efficace.

Posté : ven. 06 mai 2011 07:45
par legend
Voici le code (assez lourd) qui permet d'utiliser le hotkey même si c'est pas très habile.

Code : Tout sélectionner

#include <misc.au3>
HotKeySet ("a", "a")
AdlibRegister ("a2", 100)
$a = ""
func a()
    $a &= "a"
EndFunc
func a2()
    if _IsPressed (41) Then
    ControlSend ("", "", "", "{a down}")
Else
    ControlSend ("", "", "", "{a up}")
EndIf
EndFunc
while 1
    sleep (1000)
WEnd

Re: [R] "_isPressed" est trop efficace.

Posté : ven. 06 mai 2011 12:02
par Baku
merci je test ce soir ! :D

Re: [R] "_isPressed" est trop efficace.

Posté : ven. 06 mai 2011 16:34
par Baku
Double post, désolé.

C'est génial la fonction {$$$ down} j'connaissais pas.
Après quelques tests, le "up" est useless et le down suffit. Et plus de soucis de déplacement dans les jeux ! :D

Re: [R] "_isPressed" est trop efficace.

Posté : ven. 06 mai 2011 18:27
par legend
le "down" reste appuyé sur une touche jusqu'a ce que tu appuie encore sur la touche ou jusqu'a ce que tu fais un "up".
ça peut aider parfois.
bonne journée.

Re: [R] "_isPressed" est trop efficace.

Posté : ven. 06 mai 2011 23:18
par TommyDDR
Puis ce que vous parlez du {xxx DOWN}, est ce que quelqun a essayé un Send("{x DOWN}") sur un Windows 7 ?
Si oui : est ce que cela marche ?
Merci.

Re: [R] "_isPressed" est trop efficace.

Posté : ven. 06 mai 2011 23:35
par matwachich
Utilise l'UDF hotstring.au3 que j'ai utilié pour cet UDF et qui est inclus dans le zip

Re: [R] "_isPressed" est trop efficace.

Posté : dim. 08 mai 2011 12:21
par Baku
TommyDDR a écrit :Puis ce que vous parlez du {xxx DOWN}, est ce que quelqun a essayé un Send("{x DOWN}") sur un Windows 7 ?
Si oui : est ce que cela marche ?
Merci.
J'ai test le ControlSend avec {xxx Down} et celui ci marche nickel, il ne devrait pas y avoir de grande différence avec le Send basique ^^