Morjens,
Se tökkäs viimekerralla vähän, mutta alkuun lähti ja vielä ohjelma tuli valmiiksi asti, kiitos kaikille jotka silloin auttoivat.
Nyt sellasta kysyn, että vähän pienenpi ohjelma menossa ja formilla on labeleita 4 kpl. Pikanäppäimillä 1 ja 2 saa asetettua hiiren koordinaatit tällä tavalla: (tämä siis toimii)
Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
If e.KeyCode = System.Windows.Forms.Keys.D1 Then
Label1.Text = MousePosition.X
Label2.Text = MousePosition.Y
End If
End SubJa tästä eteenpäin on ongelmia. Tarkoituksena olisi saada näppäimellä 5 timer päälle ja samalla mouse_eventit. Hiiren tulisi liikkua koordinaatteihin, jotka on annettu ylhäällä ja klikata siihen pisteeseen. Mutta ettei mene liian helpoksi, niin textboxissa on annettu numero 1-50, joka kertoo kuin tiuhaan hiirin klikkailee pisteitä.
Esim.
label1.text = 1 (piste A:n X koordinaatti)
label2.text = 1 (piste A:n Y koordinaatti)
label3.text = 10 (piste B:n X koordinaatti)
label4.text = 10 (piste B:n Y koordinaatti)
textbox1.text = 15
Näillä tiedoilla hiiren tulisi klikata heti, kun olen painanut "5":sta niin pistettä A ja sen jälkeen odottaa 15 sekuntia. Sen jälkeen pistettä B ja taas 15:n sekunnin odotus ja pisteen A klikkaus. Tätä niin kauan kuin painan "6":sta ja timer pysähtyy.
Kiitos todella paljon niille, jotka jaksavat miettiä tätä :)
Moikka Keltanokka!
vääntele oheisen esimerkin pohjalta...
Public Partial Class MainForm
#Region "mouse_event API and Constants"
Declare Auto Sub mouse_event Lib "user32" _
(ByVal dwFlags As Int32, ByVal dx As Int32, _
ByVal dy As Int32, ByVal cButtons As Int32, _
ByVal dwExtraInfo As IntPtr)
Const MOUSEEVENTF_MOVE As Int32 = &H1 ' mouse move
Const MOUSEEVENTF_LEFTDOWN As Int32 = &H2 ' left button down
Const MOUSEEVENTF_LEFTUP As Int32 = &H4 ' left button up
Const MOUSEEVENTF_RIGHTDOWN As Int32 = &H8 ' right button down
Const MOUSEEVENTF_RIGHTUP As Int32 = &H10 ' right button up
Const MOUSEEVENTF_MIDDLEDOWN As Int32 = &H20 ' middle button down
Const MOUSEEVENTF_MIDDLEUP As Int32 = &H40 ' middle button up
Const MOUSEEVENTF_ABSOLUTE As Int32 = &H8000 ' absolute move
Const MOUSEEVENTF_WHEEL As Int32 = &H800 ' wheel button rolled
#End Region
Private AllowExit As Boolean
'Private AllowClick As Boolean 'ks.(*)
Public Sub New()
Me.InitializeComponent()
End Sub
Sub MainForm_KeyUp(sender As Object, e As KeyEventArgs)
If e.KeyCode = Keys.F5 Then
Dim lbl As Label = Nothing
Dim Delay As Integer = _
CType(Val(textBox1.Text) * 1000, Integer)
Dim mx As Integer = 0
Dim my As Integer = 0
AllowExit = False
Do While Not AllowExit
Application.DoEvents
For i As Integer = 1 To 4
Application.DoEvents
lbl = CType(Me.Controls("label" & CStr(i)), Label)
If AllowExit Then
Exit For
End If
If i Mod 2 = 0 Then
my = CInt(Val(lbl.Text))
'koordinaatit koko lomakkeelle
'mx += Me.Left
'my += Me.Top
'koordinaatit lomakkeen piirtoalueelle
Dim MyPoint As Point = _
Me.PointToClient(New Point(Me.Left, Me.Top))
mx += Me.Left - MyPoint.X
my += Me.Top - MyPoint.Y
'siirtää hiiren osoittimen määritettyjen
'näyttökoordinaattien mukaiseen pisteeseen ja
'simuloi hiiren vasemman painikkeen painallusta...
Dim dest_x As Integer = CType(mx * 65535 _
/ Screen.PrimaryScreen.Bounds.Width, Integer)
Dim dest_y As Integer = CType(my * 65535 _
/ Screen.PrimaryScreen.Bounds.Height, Integer)
mouse_event(MOUSEEVENTF_ABSOLUTE + _
MOUSEEVENTF_MOVE + MOUSEEVENTF_LEFTDOWN + _
MOUSEEVENTF_LEFTUP, dest_x, dest_y, 0, IntPtr.Zero)
'...
'siirtää hiiren osoittimen määritettyjen
'näyttökoordinaattien mukaiseen pisteeseen
'ilman mouse_event API rutiinia...
'Cursor.Position = New Point(mx, my)
'(*) jos tällä lomakkeella olevan ohjausobjektin
'Click_tapahtuman koodi halutaan suorittaa hiiren
'osoittimen siirtyessä ohjausobjektin päälle ilman,
'että käytetään mouse_event API rutiinia...
'AllowClick = True
DoDelay(Delay)
Else
mx = CInt(Val(lbl.Text))
End If
lbl = Nothing
Next
Loop
End If
End Sub
Sub MainForm_KeyDown(sender As Object, e As KeyEventArgs)
If e.KeyCode = Keys.F6 Then
AllowExit = True
End If
End Sub
Sub DoDelay(ByVal delay As Integer)
Dim sw As New Stopwatch
sw.Start()
Do While sw.ElapsedMilliseconds < delay And Not AllowExit
Application.DoEvents()
Loop
sw.Stop()
End Sub
Sub Button1_MouseEnter(sender As Object, e As EventArgs)
If AllowClick Then '(*)
AllowClick = False
Button1_Click(Me, New System.EventArgs())
End If
End Sub
Sub Button1_Click(sender As Object, e As EventArgs)
MsgBox("Button1 clicked")
End Sub
Sub MainForm_FormClosing(sender As Object, e As FormClosingEventArgs)
AllowExit = True
End Sub
End ClassAihe on jo aika vanha, joten et voi enää vastata siihen.