MouseMove zu langsam

  • C#
  • .NET (FX) 3.0–3.5

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Fortender.

    MouseMove zu langsam

    Moin,

    ich habe aktuell ein Problem für das es in der Tat keine Lösung zu geben scheint. Ich hoffe ich liege
    falsch und bin mir eigentlich sicher, dass es anders gehen muss, aber ich finde leider nichts.

    Ich nutze das MouseMove-Event, um eine Linie der Maus folgen zu lassen. Das ist an sich ja auch kein Problem. Das Problem entsteht
    durch die Funktionsweise von WM_MOUSEMOVE. Denn dieses Event feuert nicht für jeden Pixel, sondern bei schnellerer
    Bewegung in einem normalerweise ausreichenden kleinen Zeitinterval. Reicht mir aber nicht. Denn desto schneller man die Maus bewegt,
    desto größer die Abstände. Ich möchte über jeden einzelnen Pixel informiert werden.

    Wie?

    Grüße
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    Da der "fehler" nur bei schneller bewegung auftritt, kannst du da nicht automatisch von einer geraden ausgehen?
    Dann könntest du die Fehlenden Pixel einfach berechnen.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Theoretisch ginge das.
    Praktisch leider nicht - denn in dem Moment, in dem die Maus bereits weiter ist, hängt die Linie dann hinterher,
    bis MouseMove das nächste mal feuert. Dadurch hängt bei längerer schneller Bewegung die Maus hinterher oder zeichnet
    bei Zickzack-Bewegungen sogar falsche Linien. Diese sind zwar nur temporär, das ist aber nicht meine gesuchte Lösung.
    Funktional ist das ganze auch so, aber ich bin hier wirklich mal gespannt ob das zu lösen ist.

    Grüße
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!

    Nikx schrieb:

    MouseMove
    Systemsteuerung => Alle Systemsteuerungselemente => Maus => Zeigergeschwindigkeit
    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 Codetechnisch hilft mir das leider nichts, oder übersehe ich was?
    Und ich hoffe zutiefst, dass ich keinen Timer verwenden muss...

    Grüße
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    Das liegt an Windows. Um über jeden Pixel informiert zu werden, müsstest du die Zeigergeschwindigkeit ändern.
    Arbeits-Drumherum: Du kannst dir aus zwei Punkten einen Vektor berechnen, und so feststellen, ob ein bestimmtes Pixel getroffen wurde. Oder willst du pixelgenau den Weg aufzeichnen?
    Mit freundlichen Grüßen,
    Thunderbolt
    @Thunderbolt Letzteres
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    Hi
    du könntest dir mal RawInput ansehen, wenn das es nicht kann, wird's vermutlich schwierig. Ggf. wäre es sinnvoll, den Part in C++/CLI zu programmieren.

    Edit:
    Du kannst natürlich immer zwischen den Punkten interpolieren, wenn du das Ergebnis so exakt brauchst. Außerdem kann das ganze über eine ConcurrentQueue oder dergleichen sehr schön verarbeitet werden.

    Viele Grüße
    ~blaze~

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

    Ich würde es mit RawInput oder mit einem MouseHook versuchen. Microsoft hat zum Thema Hooks in VB schon nen C&P fertiges Beispiel zu gemacht.
    Sogar direkt eins für die Mausposition. Ich habe es mal getestet und es funktioniert einwandfrei. Bekommt jede dem System mitgeteilte Mausbewegung
    mit.
    Klickst du hier

    MfG Tim