Mouse Position festlegen?

  • VB.NET

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von DrVisualBasic.

    Mouse Position festlegen?

    Hallo zusammen.

    Ich würder gern über mein Programm die X und Y Coordinaten des Maus-zeigers festlegen.

    Laut Visual Studio 08 können MousePosition.X und MousePosition.Y genutzt werden für folgendes:

    "Ruft die X Koordinate ab oder legt diese fest"

    Und genau das will ich machen, nur wird mir dies bei der einfachen Wertzuweisung untersagt.

    "Der Ausdruck ist ein Wert und kann nicht als Ziel einer Zuweisung verwendet werden"

    WelcheMöglichkeit habe ich noch =)

    Danke im Vorraus
    Das machst du mit einer API:
    So deklariern und unter Public Class Form1 setzen:

    VB.NET-Quellcode

    1. Private Declare Function SetCursorPos Lib "user32" (ByVal x As Integer, ByVal y As Integer) As Integer

    So anwenden:

    VB.NET-Quellcode

    1. SetCursorPos(x, y)


    mfg Tim;)
    Dadurch dass hier aber die "Forms" mit drin sind hört es sich so an als könnte sich dann nur die maus innerhalb der form bewegen... oder ist dem nicht so? :/

    Okay, weiß nun noch jemand wie ich einen maus click simuliere? :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „BlaXun“ ()

    VB.NET-Quellcode

    1. Private Type typPoint
    2. X As Long
    3. Y As Long
    4. End Type
    5. Private Declare Sub mouse_event Lib "user32.dll" _
    6. (ByVal dwFlags As Long, ByVal dx As Long, _
    7. ByVal dy As Long, ByVal dwdata As Long, _
    8. ByVal dwExtraInfo As Long)
    9. Private Declare Function ClientToScreen Lib "user32" _
    10. (ByVal hWnd As Long, lpPoint As typPoint) As Long
    11. Private Declare Function SetCursorPos Lib "user32" _
    12. (ByVal X As Long, ByVal Y As Long) As Long
    13. Private Const MOUSEEVENT_LEFTDOWN = &H2
    14. Private Const MOUSEEVENT_LEFTUP = &H4


    am sonsten schau paar Threads runter, das Thema hatten wir vor paar tagen ! :thumbup:
    Blaxun:
    Das mit den erfahrungen und so und kenntnisse kommt alles von Tutorials, Forums und
    Informationen aus dem Internet oder aus Büchern.
    Ich bin nicht wirklich lange dabei^^
    Bin 11Jahre alt und hab vor 2jahren angefangen...

    mfg Tim;)
    Hi
    hab vor ein paar Wochen eine Klasse dazu entworfen:

    VB.NET-Quellcode

    1. Private Declare Sub mouse_event Lib "user32.dll" _
    2. (ByVal dwFlags As MouseEvent, ByVal dx As Integer, _
    3. ByVal dy As Integer, ByVal dwdata As Integer, _
    4. ByVal dwExtraInfo As Integer)
    5. Public Shared Sub Click(ByVal MouseEvent As MouseEvent, ByVal Location As Point, Optional ByVal Absolute As Boolean = True)
    6. Dim pt As Point = Windows.Forms.Cursor.Position 'Position des Cursors speichern
    7. Windows.Forms.Cursor.Position = Location 'Cursorposition an die Stelle setzen
    8. 'x und y werden hier relativ angegeben
    9. Dim x As Integer = Location.X * 65535 / Screen.PrimaryScreen.Bounds.Width
    10. Dim y As Integer = Location.Y * 65535 / Screen.PrimaryScreen.Bounds.Height
    11. If Absolute = True Then
    12. mouse_event(MouseEvent Or 32768, x, y, 0, 0)
    13. Else
    14. mouse_event(MouseEvent, x, y, 0, 0)
    15. End If
    16. Windows.Forms.Cursor.Position = pt 'Cursorposition zurücksetzen
    17. End Sub
    18. <Flags()> _
    19. Public Enum MouseEvent
    20. Move = 1
    21. LeftDown = 2
    22. LeftUp = 4
    23. RightDown = 8
    24. RightUp = 16
    25. MiddleDown = 32
    26. MiddleUp = 64
    27. XDown = 128
    28. XUp = 256
    29. Wheel = 2048
    30. 'Absolute = 32768
    31. End Enum


    @Alex2000: Dein Code ist VB6.

    Gruß
    ~blaze~

    mikeb69 schrieb:

    hallo blaxun,

    warum zweifelst du an meinem beispielcode ?
    probier es einfach aus.

    gruss

    mikeb69
    Hehe, ich zweifle nicht dran, habe nur noch nicht das Verständnis für VB entwickelt.

    ich hab deinen code einfach mal schnell versucht zu verstehen und dadurch dass die forms gennannt wurden dachte ich dass dies das limit angeben könnte. Ausprobiert habe ich es jedoch auch nciht, da ich den script genutzt hab der zuvor genannt wurde und mit der funktionsweise auch zufrieden war :)

    Trotzdem danke für die Hilfe =)
    hallo blaxun,

    natürlich ist es dir überlassen welchen code du verwendest.
    beide codes bewirken dasselbe.

    der code von tim verwendet die windows api
    meiner die entsprechende funktionen des framework.

    ich bin zwar kein feind der api, dennoch bin ich der meinung,
    dass die windows api nur dann verwendet werden soll, wenn es keine entsprechende
    framework funktion gibt.

    aber - wie gesagt - geschmackssache.

    gruss

    mikeb6
    mikeb69:
    Ich bin deiner genau deiner Meinung.
    Auch wenn ich jetzt die api-altanative genommen habe...
    Ich hab nicht gewusst das man das auch ohne API machen kann^^
    Jetzt weiß ichs ja;)

    P.S.: Und wieder was dazugelernt^^

    danke!

    mfg Tim;)
    Klick simulieren:

    Mach ein Modul:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Module Module1
    2. Private Declare Sub mouse_event Lib "user32" _
    3. (ByVal dwFlags As Integer, ByVal dx As Integer, _
    4. ByVal dy As Integer, ByVal cButtons As Integer, _
    5. ByVal dwExtraInfo As Integer)
    6. Private Const MOUSEEVENTF_ABSOLUTE = &H8000
    7. Private Const MOUSEEVENTF_LEFTDOWN = &H2
    8. Private Const MOUSEEVENTF_LEFTUP = &H4
    9. Private Const MOUSEEVENTF_MIDDLEDOWN = &H20
    10. Private Const MOUSEEVENTF_MIDDLEUP = &H40
    11. Private Const MOUSEEVENTF_MOVE = &H1
    12. Private Const MOUSEEVENTF_RIGHTDOWN = &H8
    13. Private Const MOUSEEVENTF_RIGHTUP = &H10
    14. Public Sub Mausklick(Optional ByVal Button As _
    15. MouseButtons = Windows.Forms.MouseButtons.Left)
    16. 'Mausklick simulieren
    17. Select Case Button
    18. 'linke Maustaste
    19. Case Windows.Forms.MouseButtons.Left
    20. mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
    21. mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
    22. 'mittlere Maustaste
    23. Case Windows.Forms.MouseButtons.Middle
    24. mouse_event(MOUSEEVENTF_MIDDLEDOWN, 0, 0, 0, 0)
    25. mouse_event(MOUSEEVENTF_MIDDLEUP, 0, 0, 0, 0)
    26. 'rechte Maustaste
    27. Case Windows.Forms.MouseButtons.Right
    28. mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0)
    29. mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0)
    30. End Select
    31. End Sub
    32. End Module



    Anwendung:


    VB.NET-Quellcode

    1. Mausklick(Windows.Forms.MouseButtons.Left)



    :thumbsup: :thumbsup: Das nächste mal: Googlen
    Weißt, das isn großer Unterschied zwischen dem, was du machst und dem, was ich mach (Ironie). Aber die Funktion PointToClient gibt dir die Koordinaten zurück, die relativ zur Form sind. Dabei übergibst du Bildschirmkoordinaten. PointToScreen macht genau das Gegenteil. Mit Cursor.Position kannst du die Position des Cursors setzen und mit der API-Funktion dann den Klick simulieren. Dabei ist es völlig egal, ob mans auf die elegante Art mit Enumerationen (meins) oder mit der meiner Meinung nach unschöneren Methode mit Konstanten macht, denn die beiden machen exakt das Gleiche.

    Gruß
    ~blaze~
    Hi
    also ich erkläre mal mein Problem:
    ich habe ein Programm ohne Titelleiste, ich will es aber verschiebbar machen...
    mein code sieht bis jetzt so aus, was aber noch nicht funktioniert:

    VB.NET-Quellcode

    1. Private Sub Rahmen_Down(ByVal sender As System.Object, ByVal e As MouseEventArgs) Handles MyBase.MouseDown
    2. Me.Tag = "down"
    3. End Sub
    4. Private Sub Rahmen_Move(ByVal sender As System.Object, ByVal e As MouseEventArgs) Handles MyBase.MouseMove
    5. If Me.Tag = "down" Then
    6. Me.Location = Cursor.Position - Me.PointToClient(Cursor.Position)
    7. End If
    8. End Sub
    9. Private Sub Rahmen_Up(ByVal sender As System.Object, ByVal e As MouseEventArgs) Handles MyBase.MouseUp
    10. Me.Tag = ""
    11. End Sub

    Ich bitte um Hilfe!!!!!! ?( :D

    Gruß
    Valerian
    Also mir fallen dazu spontan drei Begriffe ein - und ich bin mir sicher, dass du keinen dieser 3 hören willst. Als nett gemeinter Tipp: Zerbrösle mal deinen Code und schau, was die einzelnen Sachen den bewirken :). Danach schau, ob du nicht eventuell über die übergebenen EventArgs etwas lösen kannst und danach schau, ob das, was du da von dir gegeben hast nicht einen Stackoverflow beim Leser auslösen könnte, weil das Maximum für die Lach-Decimal überschritten wurde.

    Gruß
    ~blaze~

    PS: Im Sourcecode findest du auch einen Schnipsel von mir.