+ - , von bis, Toleranz in vb.net

  • VB.NET

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von Steppenpferd.

    + - , von bis, Toleranz in vb.net

    Hallo an alle.

    Ich habe in der mitte von meine Applikation ein bereich der ständig an geklickt wird. Nun soll es wenn es passiert erkannt werden und in ein freien Bereich geklickt werden.

    Ich habe das ganze so versucht.

    If MousePosition.X = 800 +- 250 and MousePosition.Y 600 +- 250 then

    Was ja natürlich nicht klappt.
    (klick und maus Position ist kein Problem)

    Wie mache ich dem jetzt aber klar das er wo anders klicken soll (wenn der zeiger jergend wo Zeichen 550 und 1050 steht?)

    Lg
    Es hat mich bisher 3 Anläufe gekostet, durch Deinen Post durchzusteigen.
    btt:

    seby1302 schrieb:

    Wie mache ich dem jetzt aber klar das er wo anders klicken soll
    Wem? Dem Benutzer Deines Programms? Dem Compiler?
    Nochmal zur Zusammenfassung: In einem Bereich Deiner App soll:
    • nicht reingeklickt werden dürfen?
    • Wenn man es doch macht, soll ne Nachricht kommen, dass man woanders hinklicken soll?
    • Soll der Klick automatisch an anderer Position erfolgen?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ich komme bei deiner Fragestellung nicht ganz raus.
    Versuche bitte etwas klarer zu definieren, was genau dein Ziel ist.

    VB.NET-Quellcode

    1. ​If MousePosition.X = 800 +- 250 and MousePosition.Y 600 +- 250 then

    Wenn es darum geht, dass deine X zwischen 550 und 1050 sein soll, bzw. Y zwischen 350 und 850, dann sollte die IF wie folgt aussehen:


    VB.NET-Quellcode

    1. IF (549 < MousePosition.X < 1051) AND (349 < MousePosition.Y < 851) THEN



    LG Acr0most
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:

    seby1302 schrieb:

    If MousePosition.X = 800 +- 250 and MousePosition.Y 600 +- 250 then
    machst Du

    VB.NET-Quellcode

    1. Dim rc = New Rectangle(800, 600, 0, 0)
    2. rc.Inflate(250, 250)
    3. If rc.Contains(MousePosition) Then
    4. MessageBox.Show("Drinne")
    5. End If
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    zeigma deinen Code oder schau dir das von RFG mal genauer an...


    LG Acr0most
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:

    seby1302 schrieb:

    WebBrowser1
    ClientRectangle ?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @seby1302 Dann war Deine Problembeschreibung falsch.
    Beschreib mal genau, was Du eigentlich willst, und das, ohne Code zu bverwenden, also rein verbal.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany

    Also mein bildschirm hat ein auflösung von full hd, Mein app nur 1280x800.
    Dem nach ist das app um einiges kleiner, und die von mir genante x 800 +- Y 600 +- passen nicht den MousePosition geht vom bildscherm aus.(Das hatte ich übersehen)

    Das was Acr0most gepostet hatte scheint ok zu sein, das problem ist MousePosition geht nicht vom app aus, sondern vom bildschirm.
    Wenn ich das von dir nehme sagt er mir überall auf dem bildschirm Drinne.

    jetzt müste ich also nur MousePosition dazu bringen das X0 Y0 nicht am bildschirm rand anfängt sondern ab meine app.
    @seby1302 Na also.
    Mach ne Form mit 2 Labels:

    VB.NET-Quellcode

    1. Private Sub Form1_MouseMove(sender As Object, e As MouseEventArgs) Handles MyBase.MouseMove
    2. Label1.Text = e.Location.ToString
    3. Label2.Text = Me.PointToClient(MousePosition).ToString
    4. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Habe es fast geschafft mus ich nur noch anpassen das x,y 0 bei webbrowser anfängt. hier der aktuelle code.

    VB.NET-Quellcode

    1. If Cursor.Position.X - Me.Left > 0 And Cursor.Position.Y - Me.Top > 0 And Not Cursor.Position.X - Me.Left > Me.Width And Not Cursor.Position.Y - Me.Top > Me.Height Then
    2. Dim appnullxpos, appnullypos As Integer
    3. appnullxpos = Cursor.Position.X - Me.Location.X
    4. appnullypos = Cursor.Position.Y - Me.Location.Y
    5. Label2.Text = " X " & appnullxpos & " Y " & appnullypos
    6. 'If (549 < appnullxpos < 1051) And (349 < appnullypos < 851) Then
    7. ' Thread.Sleep(1000)
    8. ' Cursor.Position = PointToScreen(New Point("50", "50"))
    9. ' mouse_event(MOUSEEVENTF_LEFTDOWN + MOUSEEVENTF_LEFTUP, 0, 0, 0, IntPtr.Zero)
    10. 'End If
    11. End If


    ergibt obere linke ecke vo app X 0 y 0
    @seby1302 Beratungsresistent?
    Ich gab Dir in den Posts #4 und #12 präzise Snippets.
    Die sollten eigentlich in leicht abgeänderter Form in Deinem Code auftauchen.
    Z.B. Me.WebBrowser1.PointToClient(...)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany

    Wie soll ich das dann auswerten? ausgabe wäre dann x=452,y=121


    VB.NET-Quellcode

    1. Dim mauseinbrowser As Point = WebBrowser2.PointToClient(MousePosition)
    2. If (X = 620 < mauseinbrowser.ToString < X = 610) And (X = 330 < mauseinbrowser.ToString < X = 340) Then
    3. Thread.Sleep(1000)
    4. Cursor.Position = PointToScreen(New Point("621", "331"))
    5. mouse_event(MOUSEEVENTF_LEFTDOWN + MOUSEEVENTF_LEFTUP, 0, 0, 0, IntPtr.Zero)
    6. Label2.Text = mauseinbrowser.ToString
    7. ElseIf (X = 0 < mauseinbrowser.ToString > X = 1280) And (Y = 0 < mauseinbrowser.ToString > Y = 80) Then
    8. Label2.Text = "Zeiger auserhalb vom app"
    9. End If
    10. und so auch probiert
    11. Dim mauseinbrowser As String = WebBrowser2.PointToClient(MousePosition).ToString
    12. If ("X=620,Y=330" < mauseinbrowser < "X=610,Y=340") Then
    13. Thread.Sleep(1000)
    14. Cursor.Position = PointToScreen(New Point("621", "331"))
    15. mouse_event(MOUSEEVENTF_LEFTDOWN + MOUSEEVENTF_LEFTUP, 0, 0, 0, IntPtr.Zero)
    16. Label2.Text = mauseinbrowser
    17. ElseIf ("X=0,Y=0" < mauseinbrowser > "X=1280,Y=800") Then
    18. Label2.Text = "Zeiger auserhalb vom app"
    19. End If



    bei beides kommt
    Ein Ausnahmefehler des Typs "System.InvalidCastException" ist in Microsoft.VisualBasic.dll aufgetreten.

    Zusätzliche Informationen: Ungültige Konvertierung von der Zeichenfolge X=610,Y=340 in Typ Boolean.
    auf die if anfrage.

    seby1302 schrieb:

    VB.NET-Quellcode

    1. If ("X=620,Y=330" < mauseinbrowser < "X=610,Y=340") Then
    What :?:
    Lesen bildet.
    Gugst Du Post #4.
    Lesen, nachdenken, verstehen, nachbilden. 8o
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Da kapiere ich nicht was von mir willst, ich hatte das von post 4 probiert und sage überall ist drin ka wie ich das anstellen soll.

    das ganze funzioniert jetzt, hab nur ein kleines problem damit noch.

    aktueler code:

    VB.NET-Quellcode

    1. Dim appnullxpos, appnullypos As Integer
    2. appnullxpos = Cursor.Position.X - WebBrowser2.Location.X - Me.Location.X - 5
    3. appnullypos = Cursor.Position.Y - WebBrowser2.Location.Y - Me.Location.Y - 30
    4. If Cursor.Position.X - Me.Left > 0 And Cursor.Position.Y - Me.Top > 0 And Not Cursor.Position.X - Me.Left > Me.Width And Not Cursor.Position.Y - Me.Top > Me.Height And
    5. (appnullxpos > 550 And appnullxpos < 680 And appnullypos > 250 And appnullypos < 480) Then
    6. Thread.Sleep(1000)
    7. If Cursor.Position.X - Me.Left > 0 And Cursor.Position.Y - Me.Top > 0 And Not Cursor.Position.X - Me.Left > Me.Width And Not Cursor.Position.Y - Me.Top > Me.Height And
    8. (appnullxpos > 550 And appnullxpos < 680 And appnullypos > 250 And appnullypos < 480) Then
    9. Cursor.Position = PointToScreen(New Point("690", "490"))
    10. mouse_event(MOUSEEVENTF_LEFTDOWN + MOUSEEVENTF_LEFTUP, 0, 0, 0, IntPtr.Zero)
    11. End If
    12. End If


    Nun ist das so, das wen der mauszeiger drüber fehrt auch nur für ein kurzen moment er es immer auf x690 y490 setzt.
    Ich versuche aber erstmal das er kurz abwartet und dann nochmal schaut ob nach xzeit immer noch da dann erst verschieben und klicken.

    EDIT:
    Hat sich erledigt, wenn jemand eine besere idee hat dann bitte den code ändern und posten dann verstehe ich auch eventuel was da dran mit dem kompleten code vor augen :D

    VB.NET-Quellcode

    1. Dim appnullxpos, appnullypos, appnullxpos2, appnullypos2 As Integer
    2. appnullxpos = Cursor.Position.X - WebBrowser2.Location.X - Me.Location.X - 5
    3. appnullypos = Cursor.Position.Y - WebBrowser2.Location.Y - Me.Location.Y - 30
    4. If Cursor.Position.X - Me.Left > 0 And Cursor.Position.Y - Me.Top > 0 And Not Cursor.Position.X - Me.Left > Me.Width And Not Cursor.Position.Y - Me.Top > Me.Height And
    5. (appnullxpos > 550 And appnullxpos < 680 And appnullypos > 250 And appnullypos < 480) Then
    6. Label2.Text = " X " & appnullxpos & " Y " & appnullxpos
    7. Thread.Sleep(1000)
    8. appnullxpos2 = Cursor.Position.X - WebBrowser2.Location.X - Me.Location.X - 5
    9. appnullypos2 = Cursor.Position.Y - WebBrowser2.Location.Y - Me.Location.Y - 30
    10. If Cursor.Position.X - Me.Left > 0 And Cursor.Position.Y - Me.Top > 0 And Not Cursor.Position.X - Me.Left > Me.Width And Not Cursor.Position.Y - Me.Top > Me.Height And
    11. (appnullxpos2 > 550 And appnullxpos2 < 680 And appnullypos2 > 250 And appnullypos2 < 480) Then
    12. Label2.Text = " X " & appnullxpos2 & " Y " & appnullxpos2
    13. Cursor.Position = PointToScreen(New Point("690", "490"))
    14. mouse_event(MOUSEEVENTF_LEFTDOWN + MOUSEEVENTF_LEFTUP, 0, 0, 0, IntPtr.Zero)
    15. End If
    16. End If

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

    seby1302 schrieb:

    Da kapiere ich nicht was von mir willst, ich hatte das von post 4 probiert und sage überall ist drin ka wie ich das anstellen soll.
    Fang an und verstehe, was da im Code passiert.
    Mach Dir ein kleines neues Testprojekt, in dem Du ausschließlich diesen Effekt untersuchst.
    Unterscheide zwischen Control-Koordinaten, Fenster-Koordinaten und Windows-Koordinaten.
    Lerne, wie Du zwischen denen hin- und her transformierst.
    Wenn Du das restlos verstanden hast, packst Du den Code in Dein Hauptprogramm rein und feddich. :D
    Aber
    Lernen musst Du allein.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Mach Dir ein kleines neues Testprojekt, in dem Du ausschließlich diesen Effekt untersuchst.

    Nimm dir das zu Herzen. Mach ich auch bei Themen die ich noch nicht drauf habe.

    Es hilft nichts, auf biegen und brechen nen Programm zu schreiben ohne den Code darin zu verstehen. Denn, verstehst du deinen Code, kannst du den überall, ggf. abgewandelt, wieder einsetzen. Und das würde ich dann "Programmieren" nennen...
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Habe es fast geschafft mus ich nur noch anpassen das x,y 0 bei webbrowser anfängt. hier der aktuelle code.

    @RodFromGermany Hm.. macht da PointToClient wirklich Sinn? ^^

    Kann ja sein das ich da was falsch verstanden habe und somit falsch liege, aber um an die Webbrowser-Position zu kommen (ausgehend von der MousePosition oder Cursor.Position) würde ich es so machen...

    VB.NET-Quellcode

    1. Me.Text= PointToScreen(WebBrowser1.Location).ToString
    Das Chaos beginnt mit komprimierter Ordnung (Steppenpferd 2019)