[R] "_isPressed" est trop efficace.

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
Baku
Niveau 5
Niveau 5
Messages : 103
Enregistré le : mar. 26 oct. 2010 18:34
Status : Hors ligne

[R] "_isPressed" est trop efficace.

#1

Message 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 ! :)
Modifié en dernier par Baku le lun. 02 mai 2011 18:50, modifié 1 fois.
[color=#0000FF]jchd[/color] a écrit :On est tous le casse-burnes de quelqu'un à un moment ou un autre !
Avatar du membre
legend
Niveau 7
Niveau 7
Messages : 472
Enregistré le : dim. 26 sept. 2010 12:55
Status : Hors ligne

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

#2

Message 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
Avatar du membre
Baku
Niveau 5
Niveau 5
Messages : 103
Enregistré le : mar. 26 oct. 2010 18:34
Status : Hors ligne

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

#3

Message 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...
Modifié en dernier par Baku le lun. 02 mai 2011 18:47, modifié 1 fois.
[color=#0000FF]jchd[/color] a écrit :On est tous le casse-burnes de quelqu'un à un moment ou un autre !
Avatar du membre
legend
Niveau 7
Niveau 7
Messages : 472
Enregistré le : dim. 26 sept. 2010 12:55
Status : Hors ligne

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

#4

Message 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
Avatar du membre
Baku
Niveau 5
Niveau 5
Messages : 103
Enregistré le : mar. 26 oct. 2010 18:34
Status : Hors ligne

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

#5

Message 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 ! ^^
[color=#0000FF]jchd[/color] a écrit :On est tous le casse-burnes de quelqu'un à un moment ou un autre !
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2130
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

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

#6

Message 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
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
legend
Niveau 7
Niveau 7
Messages : 472
Enregistré le : dim. 26 sept. 2010 12:55
Status : Hors ligne

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

#7

Message par legend »

simpa le code.
un seul default : dans le cas ou tu reste appuyé sur une touche.
bonne journée :)
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2130
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

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

#8

Message par TommyDDR »

oui, mais dans son cas, je doute qu'il écrive "app" en restant appuyer sur le "p" pour en avoir 2 :P
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
protecta
Niveau 2
Niveau 2
Messages : 22
Enregistré le : sam. 27 nov. 2010 15:37
Status : Hors ligne

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

#9

Message 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 !
Avatar du membre
legend
Niveau 7
Niveau 7
Messages : 472
Enregistré le : dim. 26 sept. 2010 12:55
Status : Hors ligne

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

#10

Message 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
Avatar du membre
Baku
Niveau 5
Niveau 5
Messages : 103
Enregistré le : mar. 26 oct. 2010 18:34
Status : Hors ligne

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

#11

Message 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é ^^
[color=#0000FF]jchd[/color] a écrit :On est tous le casse-burnes de quelqu'un à un moment ou un autre !
Avatar du membre
legend
Niveau 7
Niveau 7
Messages : 472
Enregistré le : dim. 26 sept. 2010 12:55
Status : Hors ligne

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

#12

Message 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
Avatar du membre
Baku
Niveau 5
Niveau 5
Messages : 103
Enregistré le : mar. 26 oct. 2010 18:34
Status : Hors ligne

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

#13

Message par Baku »

Non, pas sur des jeux, ca fait bugger les déplacements. C'est exactement ca que j'utilise actuellement pour le programme ^^
[color=#0000FF]jchd[/color] a écrit :On est tous le casse-burnes de quelqu'un à un moment ou un autre !
Avatar du membre
legend
Niveau 7
Niveau 7
Messages : 472
Enregistré le : dim. 26 sept. 2010 12:55
Status : Hors ligne

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

#14

Message 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
Avatar du membre
Baku
Niveau 5
Niveau 5
Messages : 103
Enregistré le : mar. 26 oct. 2010 18:34
Status : Hors ligne

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

#15

Message par Baku »

merci je test ce soir ! :D
[color=#0000FF]jchd[/color] a écrit :On est tous le casse-burnes de quelqu'un à un moment ou un autre !
Avatar du membre
Baku
Niveau 5
Niveau 5
Messages : 103
Enregistré le : mar. 26 oct. 2010 18:34
Status : Hors ligne

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

#16

Message 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
[color=#0000FF]jchd[/color] a écrit :On est tous le casse-burnes de quelqu'un à un moment ou un autre !
Avatar du membre
legend
Niveau 7
Niveau 7
Messages : 472
Enregistré le : dim. 26 sept. 2010 12:55
Status : Hors ligne

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

#17

Message 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.
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2130
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

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

#18

Message 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.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

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

#19

Message par matwachich »

Utilise l'UDF hotstring.au3 que j'ai utilié pour cet UDF et qui est inclus dans le zip
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Avatar du membre
Baku
Niveau 5
Niveau 5
Messages : 103
Enregistré le : mar. 26 oct. 2010 18:34
Status : Hors ligne

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

#20

Message 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 ^^
[color=#0000FF]jchd[/color] a écrit :On est tous le casse-burnes de quelqu'un à un moment ou un autre !
Répondre