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 Sub
Ja 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 Class
Aihe on jo aika vanha, joten et voi enää vastata siihen.