cs_exode
Messages postés10Date d'inscriptionsamedi 11 novembre 2000StatutMembreDernière intervention22 mars 2005
-
22 mars 2005 à 12:48
cs_exode
Messages postés10Date d'inscriptionsamedi 11 novembre 2000StatutMembreDernière intervention22 mars 2005
-
22 mars 2005 à 21:47
Bonjour,
Je vous met au défit de faire un code d'enregistrement
des coordonées X,Y de la souris.
Je m'explique, ce code consisterait à enregistrer en
fichier texte les coordonées de la souris à partir d'un clic
soutenu, l'enregistrement prend fin dès qu'on lache le clic.
Les donnés X,Y seraient enregistrer dans un fichier texte que l'on pourra utiliser plus tard pour répéter l'opération de la souris.
Ensuite, un formulaire demanderait le nom d'enregistrement
pour le fichier texte.
Un autre formulaire permetterais d'ouvrir un fichier texte existant et d'effectuer l'opération de déplacement.
Ce code viendrais s'ajouter à mon projet de commande
de déplacement pour une machine CN à moteur pas à pas,
La commande de la souris permetterais d'effectuer des opération complexe et de les répéter selon le fichier texte choisi.
Je me permet de vous mettre au défit car je ne suis pas pro de VB et j'aimerais vraiment pouvoir continuer mon projet.
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200620 22 mars 2005 à 16:37
heu, désolé, mouse_event, c'est plutot pour simuler l'action de la souris. Essaie plutot ce code :
Private Type POINTAPI
X As Long
Y As Long
End Type
Private Declare Function SetCapture Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseCapture Lib "user32" () As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Dim Pt As POINTAPI
Private Sub Form_Load()
'KPD-Team 1999
'URL: http://www.allapi.net/ 'E-Mail: [mailto:KPDTeam@Allapi.net KPDTeam@Allapi.net]
'redirect all mouse input to this form
SetCapture Me.hwnd
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
ReleaseCapture
SetCapture Me.hwnd
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
'Get the current cursor position
GetCursorPos Pt
Me.CurrentX = 0
Me.CurrentY = 0
'Clear the screen
Me.Cls
Me.Print "Cursor position:"
'Print the mouse coördinates to the form
Me.Print "X:" + Str$(Pt.X) + " Y:" + Str$(Pt.Y)
Me.Print " (Press ALT-F4 to unload this form)"
SetCapture Me.hwnd
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
ReleaseCapture
SetCapture Me.hwnd
End Sub
cuq
Messages postés345Date d'inscriptionmardi 3 juin 2003StatutMembreDernière intervention21 mars 20082 22 mars 2005 à 14:00
ouais Y a pas vraiment de défis là dedans ...
Et n'oublis pas d'introduire une notion de facteur d'échelle en effet les XY de la position de tas souris ne sont pas forcément les XY de positions sur ta machine ...
Bon défit
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_exode
Messages postés10Date d'inscriptionsamedi 11 novembre 2000StatutMembreDernière intervention22 mars 2005 22 mars 2005 à 17:57
C'est ok, ça marche Nickel,
J'ai juste ajouté un Timer avec interval de 100...
J'ai encore une autre question, maintenant que j'ai mon fichier "truc1.txt", comme je fait pour reproduire l'événement de la souris à partir de ce fichier ?
cs_MasterHack
Messages postés586Date d'inscriptionjeudi 18 septembre 2003StatutMembreDernière intervention13 février 20082 22 mars 2005 à 18:17
en prenant compte du code en haut tu ouvre le Fichier
Declare Function SetCursorPos Lib "user32" (ByVal x As Long, _
ByVal y As Long) As Long
dim Variable as string,x() as integer,y() as integer
open "c:\temp\truc1.txt"
for input as #1
while not eof(1)
line input #1,Variable
x=val(Mid(Text1, 3, InStr(Text1, "Y:") - 3))
y=val(Mid(Text1, 3, InStr(Text1, "Y:") - 3))
wend
close
dans un timer
for i=lboun(x) to ubound(x)
setcursorPos x(i),y(i)
next
<HR>
Life is short...Learn more
Copy Rights <> Rights to Copy
cs_MasterHack
Messages postés586Date d'inscriptionjeudi 18 septembre 2003StatutMembreDernière intervention13 février 20082 22 mars 2005 à 18:19
MODIFICATION
en prenant compte du code en haut tu ouvre le Fichier
Declare Function SetCursorPos Lib "user32" (ByVal x As Long, _
ByVal y As Long) As Long
dim Variable as string,x() as integer,y() as integer,n as long
open "c:\temp\truc1.txt" for input as #1
while not eof(1)
line input #1,Variable
x(n)=val(Mid(Text1, 3, InStr(Text1, "Y:") - 3))
y(n)=val(Mid(Text1, 3, InStr(Text1, "Y:") - 3))
n=n+1
wend
close
dans un timer
for i=lboun(x) to ubound(x)
setcursorPos x(i),y(i)
next
desole
<HR>
Life is short...Learn more
Copy Rights <> Rights to Copy
cs_exode
Messages postés10Date d'inscriptionsamedi 11 novembre 2000StatutMembreDernière intervention22 mars 2005 22 mars 2005 à 18:49
ok, merci...
mais j'ai un problème pour comprendre ou inclure ce code,
je mets :
Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
dim Variable as string,x() as integer,y() as integer,n as long
après
Private Type POINTAPI
x As Long
y As Long
End Type
Private Declare Function SetCapture Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseCapture Lib "user32" () As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
et ensuite je mets dans un autre timer :
Open "c:\temp\truc1.txt" For Input As #1
While Not EOF(1)
Line Input #1, Variable
x(n) = Val(Mid(Text1, 3, InStr(Text1, "Y:") - 3))
y(n) = Val(Mid(Text1, 3, InStr(Text1, "Y:") - 3))
n = n + 1
Wend
Close
For i = LBound(x) To UBound(x)
SetCursorPos x(i), y(i)
Next
j'ai essayé mais ça ne marche pas...
désolé...suis novice, mais j'en apprends tout les jours.
doit être remplacé par :
Open "c:\temp\truc1.txt" For Append As #1
Print #1, trim(Str$(Pt.X)) & trim(Str$(Pt.Y))
Close #1
ReleaseCapture
SetCapture Me.hwnd
Ainsi, pour l'exploitation il est plus facile de coder, dans un autre projet :
Const MOUSEEVENTF_LEFTDOWN = &H2
Const MOUSEEVENTF_LEFTUP = &H4
Declare Function SetCursorPos Lib "user32.dll" (ByVal x As Long, ByVal y As Long) As Long
Declare Sub mouse_event Lib "user32" _
( _
ByVal dwFlags As Long, _
ByVal dx As Long, _
ByVal dy As Long, _
ByVal cButtons As Long, _
ByVal dwExtraInfo As Long _
)
sub form_load() 'ou sub command1_click() ou autre
dim buf as string
dim variable() as string
open "c:\temp\truc1.txt" for input as #1
while not eof(1)
line input #1,buf
variable = split(buf," ")
call clic(cint(variable(0)), cint(variable(1)))
close #1
end sub
'simulation du clic
Sub Clic(x As Integer, y As Integer)
'placer la souris par sécurité (pour processeurs lents)
Call SetCursorPos(x, y)
mouse_event MOUSEEVENTF_LEFTDOWN + MOUSEEVENTF_LEFTUP, x, y, 0, 0
End Sub
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200620 22 mars 2005 à 20:24
Encore trop vite, donc oubli d'un loop :
sub form_load() 'ou sub command1_click() ou autre
dim buf as string
dim variable() as string
open "c:\temp\truc1.txt" for input as #1
while not eof(1)
line input #1,buf
variable = split(buf," ")
call clic(cint(variable(0)), cint(variable(1)))
loop
close #1
end sub
Sinon, le mieux, au cas où tu aies un autre fichier texte d'ouvert :
sub form_load() 'ou sub command1_click() ou autre
dim buf as string
dim variable() as string
dim nf as integer
nf = freefile
open "c:\temp\truc1.txt" for input as #nf
while not eof(nf)
line input #nf,buf
variable = split(buf," ")
call clic(cint(variable(0)), cint(variable(1)))
loop
close #nf
end sub
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200620 22 mars 2005 à 20:36
Autre prob possible, il faut sans doute coder une pause entre chaque clic() du style : for i = 0 to x: doevents : next pour laisser le temps au prog de digérer (surtout s'il y a affichage de page web). La valeur de x, c'est à toi de la déterminer. Un ex, pour automatiser des clics sur des pages intranet dans ma boite, j'ai mis x = 300000. Il y a sans doute mieux mais pour l'instant, ça marche bien.
cs_exode
Messages postés10Date d'inscriptionsamedi 11 novembre 2000StatutMembreDernière intervention22 mars 2005 22 mars 2005 à 20:44
il y a juste un blème, j'aimerais savoir ce que je doit mettre
dans mon timer pour que chaque ligne de mon fichier *.txt
soie lue et reproduite à l'identique de la capture.
cs_exode
Messages postés10Date d'inscriptionsamedi 11 novembre 2000StatutMembreDernière intervention22 mars 2005 22 mars 2005 à 21:29
J'ai enregistrer une séquence de mouvement de souris d'environ 20 sec, ce qui me fait env. 200 lignes de coordonées dans mon fichiers truc1.txt,
Le blème c'est que quand je lance mon progm, rien ne se passe, même pas un petit mouvement de ma souris.
Si je met un point d'arrêt, je peux effectivement voir que mes variables son chargé avec les premières coordonés de mon ficher, mais ça semble s'arrêter là...
cs_exode
Messages postés10Date d'inscriptionsamedi 11 novembre 2000StatutMembreDernière intervention22 mars 2005 22 mars 2005 à 21:47
Euréka !!!
ça marche, c'était éffectivement la boucle while qui foutait le merdier.... :o)...
Faut pô m'en vouloir ch'uis suisse alors un peu lent !!
J'ai donc mis une pose entre chaque boucle et ça marche.
Je vous remercie infiniment pour votre aide, parce que sans vous je n'y serais jamais arrivé, suis même étonné d'y être déjà.
Reste plus qu'a finioler tout ça !