Page 1 sur 1
[..] Aide Send clavier
Posté : dim. 15 mai 2011 18:59
par yanius
Bonjour à tous !!
Donc voilà je voulais savoir s'il quelqu'un pouvait m'aider pour un script. Alors voilà le principe de mon programme : lorsque (par exemple) la touche "a" est actionnée, la lettre "a" va s'écrire automatiquement dans un fichier .txt
Jusque là pas de problème, par contre lorsque j'écris "autoit" dans la recherche google (par exemple), il me met "utoit".
Voici mon code :
► Afficher le texte
Code : Tout sélectionner
HotKeySet("{ESC}", "Quitter")
HotKeySet("a", "a")
$file = FileOpen("test.txt", 1)
If $file = -1 Then
MsgBox(0, "Error", "Fichier inexistant.")
Exit
EndIf
While 1
Sleep(100)
WEnd
Func Quitter()
FileClose($file)
Exit
EndFunc
Func a()
FileWrite($file, "a") ; écrit "a" dans le fichier test.txt
Send("a") ; écris normalement "a" dans la recherche google (c'est là où ça ne marche pas)
EndFunc
Quelle est le problème de mon code ?
Merci d'avance pour vos réponse !
Re: [..] Aide Send clavier
Posté : dim. 15 mai 2011 19:30
par Strofe
Bonsoir
Bizarre comme projet...
► Afficher le texte
When you set a hotkey, AutoIt captures the key-press and does not pass it on to the active application, with one exception: the Lock keys (NumLock, CapsLock, and ScrollLock) still toggle their respective state!
To Send() a key combination which will trigger a HotKeySet() event, either use ControlSend() or unregister the HotKeySet() event, otherwise, the Send() event may trigger an infinite loop.
; capture and pass along a keypress
HotKeySet("{Esc}", "captureEsc")
Func captureEsc()
; ... can do stuff here
HotKeySet("{Esc}")
Send("{Esc}")
HotKeySet("{Esc}", "captureEsc")
EndFunc
Bon courage
Re: [..] Aide Send clavier
Posté : dim. 15 mai 2011 19:42
par yanius
La fonction HotKeySet n'est donc pas appropriée ?
Re: [..] Aide Send clavier
Posté : dim. 15 mai 2011 20:28
par zeshrek
ohhhhh que voila quelquechose qui sent bon le keyloger !!!!!
J'attend avec scepticisme (et gourmandise) un démenti, et des explications sur la vocation tout a fait légitime d'un programme qui intercepte les touches pressées pour les enregistrer dans un fichier....
Re: [..] Aide Send clavier
Posté : dim. 15 mai 2011 20:30
par legend
tout a fait d'accord avec zeshrec.
explique nous l'utilité de ton script et je te donne 2solutions.
Re: [..] Aide Send clavier
Posté : lun. 16 mai 2011 00:53
par Yarillo
Un tel script étant ensuite exploitable dans un Keylogger par la suite, ne serait-il pas plus intelligent de bloquer tout de suite la discussion ?
Re: [..] Aide Send clavier
Posté : lun. 16 mai 2011 17:29
par ZDS
Bonjour, vaudrait mieux verrouiller oui.
@Yanius : Pour quelqu'un qui semble un éclairé transcendant avec une signature de matheux, tu as pas beaucoup de jugeote à demander de l'aide pour bots sur un forum AutoIt, langage trop longtemps décrié pour cette raison alors que ses possibilités sont infinies (beaucoup plus agréables que de faire de faux OS ou autres subtils pourrisseurs de travail).
A bientôt.
PS: Bizarrement depuis le message de ZeShrek, pas de réponse pour contredire, c'est tout de même bizarre... ^^
Re: [..] Aide Send clavier
Posté : lun. 16 mai 2011 18:13
par yanius
@ZDS
En effet, "bizarrement", je n'ai pas répondu car "bizarrement" je n'ai guerre l'habitude de lire mes messages en matinée.
Mauvaise déduction, tu m'envoies vraiment déçu...
@zeshrek
lol^^ Tu as totalement raison...
Bien sur que des "explications sur la vocation tout a fait légitime d'un programme qui intercepte les touches pressées pour les enregistrer dans un fichier" doivent être rendus et doivent être de taille (j'espère pour cela être à la hauteur de tes exigences lol)
En revanche, obligé de constaté avec mépris que ma demande fait l'objet d'un bot [ce qui pourrais l'être mais ne l'ai pas (petite nuance tout de même)], je me dois de vous expliquer mon projet !
Donc voilà, je voulais réaliser un programme (et plus précisément un logiciel-chat) qui me permette de réaliser un chat interactif. En effet, au lieu de voir une phrase afficher avec une petite pression (cela dépend des personnes ^^) sur la touche "entrée", les clients du chat verront de façon quasi simultanée la conception des messages.
Si tenté soit-il qu'il y ait des sceptiques, de plus amples explications seront à votre disposition !
Toute fois, si ma demande ne semble pas respecter l'intégrité du combat contre les hackeurs, je ne m'opposerai pas au blocage de la discussion
En attendant vos réponses, qui pour ma part, peuvent faire preuve d'un écart temporel (n'est-ce-pas ZDS

), je vous remercie d'avance !
Re: [..] Aide Send clavier
Posté : lun. 16 mai 2011 18:26
par ZDS
Mea culpa Yanius, mais tu pourras avouer qu'une demande aussi courte et pauvre en explication sur le besoin ou les exigences pouvait faire penser à un
bot keylogger
Sinon pour le coté délai de réponse, j'ai cru voir ton premier message vendredi soir en partant du taf, ce qui n'est pas le cas il date seulement d'hier. Bref, pour me faire pardonner, je te prépare un exemple de prise en charge pour demain. Néanmoins faut pas oublier que HotKeySet n'est pas trop prévu pour être lancé sur toutes les touches du clavier.
A bientôt !
PS: Version rapide en attendant :
► Afficher le texteScript
Code : Tout sélectionner
HotKeySet("{ESC}", "Quitter")
HotKeySet("a", "a")
$file = FileOpen("test.txt", 1)
If $file = -1 Then
MsgBox(0, "Error", "Fichier inexistant.")
Exit
EndIf
While 1
Sleep(100)
WEnd
Func Quitter()
FileClose($file)
Exit
EndFunc
Func a()
HotKeySet("a") ; Arret de la capture du "a"
FileWrite($file, "a") ; écrit "a" dans le fichier test.txt
Send("a") ; écris normalement "a" dans la recherche google (c'est là où ça ne marche pas)
HotKeySet("a", "a") ; Reprise de la capture du "a"
EndFunc
EDIT: Exact, à taper trop vite j'ai confondu bot et keylogger dans ma phrase.
Re: [..] Aide Send clavier
Posté : lun. 16 mai 2011 18:49
par yanius
Il est vrai que vu sous cet angle ... cela ressemble à un bot lol !
Sinon je te remercie pour cette exemple et te présente toutes mes excuses (^^)
Merci encore

Re: [..] Aide Send clavier
Posté : lun. 16 mai 2011 18:59
par legend
Même si je suis pas convaincu par ton projet je donne une autre solution. (en tout cas c'est pas moi qui a commencé ^^)
tu remplace la ligne send de ton premier code par :
controlsend ("", "", "", "a")
bonne journée.
Re: [..] Aide Send clavier
Posté : lun. 16 mai 2011 19:05
par zeshrek
Alors en fait, c'est pas un bot, mais un keylog... nuance

En même temps l'un comme l'autre sont prohibés sur ce forum donc...
Bref, vu que c'est ni l'un ni l'autre on peut continuer a papoter.
Donc je ne vais pas revenir sur l'aspect technique vu que d'autres l'ont fait, mais il est inutile d'intercepter les touches pour savoir au fur et a mesure ce qui est tapé dans un input. Il suffit tout simplement de le lire, et même si l'utilisateur n'a pas tapé entrée, sa valeur se modifie au fur et a mesure.
Re: [..] Aide Send clavier
Posté : lun. 16 mai 2011 19:09
par TommyDDR
HotKeySet étant vraiment à proscrir pour ce genre d'utilisation (même pour un keylogger au passage...)
Je vous conseil d'utiliser GUIRegisterMsg.
Je viens de vous faire un petit script que vous pouvez assez facilement reprendre pour votre programme :
► Afficher le textecode
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
Opt("GUIOnEventMode", 1)
Dim $Gui
$Gui = GUICreate("test", 300, 300)
$Input = GUICtrlCreateInput("", 10, 10, 280, 20)
$Edit = GUICtrlCreateEdit("", 10, 40, 280, 250, 0)
GUICtrlSetState($Edit, $GUI_DISABLE)
GUISetOnEvent($GUI_EVENT_CLOSE, "quit")
GUISetState()
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
While(True)
Sleep(10)
WEnd
Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
Local $hWord = "0x" & Hex(BitShift(BitAND($wParam, 0xFFFF0000), 16), 4)
Local $lWord = "0x" & Hex(BitAND($wParam, 0xFFFF), 4)
If($hWnd = $Gui And GUICtrlGetHandle($Input) = $lParam) Then
If($hWord = 0x0300) Then
RemplacerEdit()
EndIf
EndIf
EndFunc
Func RemplacerEdit()
Local $Time = "Mise à jour : " & @YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC & ":" & @MSEC & @CRLF
GUICtrlSetData($Edit, $Time & GUICtrlRead($Input))
EndFunc
Func quit()
Exit
EndFunc
Re: [..] Aide Send clavier
Posté : lun. 16 mai 2011 19:19
par yanius
@TommyDDR
Merci beaucoup !! C'est exactement ce que je voulais (enfin la base

) !!
@zeshrek
En fait, je parlais d'un chat et non d'un input, donc il n'est pas possible à un client de voir le message avant que la touche entrée soit appuyée ! C'est le but même de mon projet !

^^
Re: [..] Aide Send clavier
Posté : lun. 16 mai 2011 20:58
par zeshrek
ton systeme de chat, il passe forcément par un input coté émeteur non ?
voilà un exemple tout bete :
Code : Tout sélectionner
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiEdit.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
$MsgEnvoye=""
$Form1 = GUICreate("Form1", 615, 438, 192, 124)
$Edit = GUICtrlCreateLabel("", 384, 96, 217, 300, $SS_SUNKEN)
GUICtrlSetBkColor(-1, 0xFFFFFF)
$Input1 = GUICtrlCreateInput("", 16, 296, 257, 21)
$Label1 = GUICtrlCreateLabel("On va dire que ici c'est la zone ou tu"&@crlf&"saisis ce que tu tapes dans ton chat", 16, 216, 189, 32)
$Label2 = GUICtrlCreateLabel("Et on va dire que ici c'est"&@crlf&"l'affichage chez ton correspondant", 392, 8, 209, 32)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Input1
$MsgEnvoye=$MsgEnvoye & GUICtrlRead($Input1)&@CRLF
GUICtrlSetData($Input1,"")
EndSwitch
If GUICtrlRead($Edit)<>$MsgEnvoye & _GUICtrlEdit_GetText($Input1) Then
GUICtrlSetData($Edit,$MsgEnvoye& _GUICtrlEdit_GetText($Input1))
EndIf
WEnd