Maus steuern auf zweiten PC im Netzwerk

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von n1nja.

    Maus steuern auf zweiten PC im Netzwerk

    Hallo Leute,

    hätte wieder eine Frage.
    Ich steh nun erneut auf den Schlauch.
    Hab eine Anwendung programmiert, mit der ich eine Maus an allen Rechner im Netzwerk verwenden kann.
    Gleiche Prinzip wie bei den Tool "ShareMouse".

    Funktioniert alles soweiß ganz gut. Nur wenn ich die Maus am zweiten Rechner bewege, hab ich eine kleine Bewegung am Rechner, wo die Maus angeschlossen ist.
    Die Daten von der Maus hole ich mir über einmal über Control.MousePosition und/oder über einen Maustreiber bzw "Hook", da ich auch Mausbuttons abfragen möchte.

    Mit den Mausbuttons funktioniert es, so wie ich es möchte. Nur bei Bewegung der Maus, weiß ich nicht, wie ich weiter vorgehen soll.
    Hab was gefunden, womit man alles Blocken kann mit (user32.dll BlockInput). Leider kann ich dann die Position nicht mehr abfragen, da die Maus nicht mehr bewegt werden kann.

    Hätte da jmd. eine Idee, was es noch gibt, um die Bewegung zu ermitteln, ohne das die Maus optisch am Bildschirm bewegt wird.
    MIt dem oben genannten Tool scheint es ja problemlos zu funktionieren:)

    Vielen Dank.

    n1nja schrieb:

    Nur wenn ich die Maus am zweiten Rechner bewege, hab ich eine kleine Bewegung am Rechner, wo die Maus angeschlossen ist.

    Wäre es nicht sinnvoll, den Mauscursor auf dem Rechner, von wo aus du den Fremdrechner steuerst, einfach auszublenden? Der Cursor ist da doch sowieso nicht nötig, oder irre ich mich? Das würde das Problem automatisch lösen, wenn ich dich überhaupt richtig verstanden habe.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Genau, hast du richtig vertanden. Den brauch ich da nicht mehr, wäre aber doof, wenn dann plötzlich da was angeklickt wird.

    Das habe ich auch schon gefunden und getestet.
    Jedoch wenn ich den ausblende, auch mit der user32.dll, dann ist er zwar weg.
    Aber er wird trotzdem verwendet, dh. geh ich über einen Button, wird der Button auch als Hover angezeigt.
    Wenn ich dann klicke, dann wird der Befehl auch ausgeführt.
    Bin noch am probieren, wie ich am besten das Problem lösen kann.
    Scheint aber nicht so einfach zu sein, wie ich Anfangs dachte:(

    n1nja schrieb:

    Aber er wird trotzdem verwendet

    OK, das war mir nicht bewusst.

    Evtl. habe ich hier noch was gefunden (allerdings kein direkter Code, eher ein allgemeiner Hinweis):
    codeproject.com/Messages/12411…le-Hide-Mouse-Cursor.aspx

    Since your trying to take complete control over the system, you should act like it. You have to be firm. I'd say set up a system wide hook listening to WM_MOUSEMOVE messages, and just throw them all away. The cursor should no longer move. Look at SetWindowsHookEx(), remember your message pump must reside outside your application in a DLL if it's going to be global.

    Nachtrag: Du müsstest natürlich den Wert trotzdem erstmal lesen, um ihn weiterzuleiten, und danach verwerfen.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Vielen Dank, das hat mir schon mal viel weiter geholfen.
    Ich verwende sozusagen einen "Hook".
    Das mit den "Ex" hab ich nur falsch verstanden.
    Also direkt ausprobiert.
    Klappt echt perfekt für Mausbutton, Wheel usw.
    Aber leider nicht wirklich für das MouseMove Event.

    Der Mauszeiger wird durch diesen Call nur extrem langsam, bewegen kann ich ihn trotzdem und der Weg wird dann dementsprechend auch nicht genau berechnet.
    Vllt darf ich nicht über Windowmitteln gehen, sondern muss direkt die Hardware abfragen, ob die Maus bewegt wird.
    Da find ich leider wenig bis gar nichts im Netz. Da meistens nur Ergebnisse kommen, wie ich die Mausposition mit Control.MousePosition abfrage oder mit der user32.dll
    Guten Abend.

    Hab es nun geschafft über RawInput die Mausdaten auszulesen und die Coordinaten zu berechnen, sodass ich die aktuelle Mausposition rauskriege.

    Allerdings, wenn ich jetzt wieder BlockInput verwende, dann bekomme ich auch keine Raw Daten von der Maus.
    Es gibt da bestimmt was, womit ich über WndProc Messages das Bewegen der Maus verhindere, aber trotzdem die Position kriege.
    Finde da leider nichts im Netz, was mir dabei weiterhelfen würde.

    Verwende im Moment das Nuget: github.com/mfakane/rawinput-sharp

    Komme aber immerhin Schritt für Schritt zu meinen Ziel:)