Mauszeiger systemweit verstecken



  • Hallo,
    ich brauche Tipps, wie ich den Mauszeiger global, also systemweit
    verstecken kann.

    Vielen Dank schon mal...



  • Ich kenne eine Hardwarelösung:
    -Maus abziehen
    -wenn nötig, neustarten
    -> Maus ist nicht mehr sichtbar

    Mal im ernst, wozu? Aber ich weiß nicht, ob es die einzige Möglichekeit ist, aber sowas geht mit Sicherheit mit einem KernelMode Treiber (wie so vieles 😉 )



  • HOHO,
    also wenn ich meine Maus abziehe, und dann neu starte ist mein Cursor immer noch sichtbar...

    Aber mal im Ernst:
    ich schreibe gerade einen Maushook. Dabei wird eine Bewegung des Scrollrades in eine y-Bewegung umgesetzt, wenn man gleichzeitig das Scrollrad drückt.
    Nun möchte ich noch erreichen, das bei gedrückter Scroll-Wheel-Taste der Cursor an seiner derzeitigen Position "kleben" bleibt, eine Bewegung der Maus also für den Benutzer nicht zu erkennen ist.
    Dazu möchte ich den Mauszeiger verstecken (und zwar nicht nur wie mit (Showcursor=FALSE, sondern für alle Fenster), und ihn an seiner "alten" Position auf den Bildschirm zeichnen.(Weiss noch nicht genau wie, vielleicht mit "Draw"?)

    Wozu man das braucht, kann ich hier nicht erklären.
    Ich hoffe das eine Beschreibung dessen, was ich mit meinem Programm erreichen will reicht. 😉



  • Hi,

    also wenn der User die Maus bewegt, dann lößt der damit 'eine' Nachricht des Typs WM_MOUSEMOVE aus, auf die Nachricht kannst du unter gegebenen Umständen mit SetCursorPos() reagieren..., das dürfte nicht all zu schwer sein, oder ich hab die Intention deiner Frage falsch verstanden 😕

    // im Nachrichtenswitch des Hauptfensters:
        case WM_MOUSEMOVE:
            if(fScrollWheelButtonPressed) // das Flag entsprechend setzen
                SetCursorPos(iX,iY); // Koordinaten an denen gedrückt wurde
            break;
    

    PS: die Koordinaten muss du in statischen Variablen festhalten und entweder über die LOWORD und HIWORD Makros aus lParam oder über GetCursorPos() beim Eintreffen der 'ScrollWheel' Taste.

    hoffe ich konnte helfen...



  • ermitteln (vergessen) -sry



  • Das muss er dann aber für alle Fenster machen auch die von anderen Programmen sonst kannst du doch einfach alt+tab das fenster wechseln?



  • Jo klar, schonmal was von nem (globalen) Keyboard Hook gehört, den muss er dann nat. installieren, sry, dachte das war klar 😉

    MfG CodeFinder



  • Jau, danke für die Antworten.
    Allerdings wird der Effekt ein anderer sein, als ich mir wünsche.
    Ich möchte, das ein Programm x merkt, das die Maus bewegt wird, der User aber denkt, das die Maus still steht.

    Bei der Lösung mit SetCursor, merkt ja auch das Programm mix mehr von der Bewegung.Damit hätte ich ja wirklich den Cursor "festgenagelt".
    Ich möchte aber nur "das Bild festnageln", die Systemnachricht soll schon noch an das Programm gehen.

    Es währe cool, wenn ich die Nachricht zum Neuzeichnen des Cursors auf dem Bildschirm abfangen könnte.
    Dann könnte ich das Bild, welches mit dem Klick gezeichnet würde noch "durchlassen", die anderen "Neu-Zeichnen-Befehle" danach aber Wegfiltern.

    Ich hoffe es ist klar, was ich meine. 🙄



  • Dass man das zeichnen des Cursos abfangen kann, bezweifle ich (aber vielleicht gibts ja was im Netz -> google).
    Aber CodeFinder hat dir doch schon einen guten Tipp gegeben: Hooks.
    Such doch in der MSDN nach SetWindowsHookEx - mit dieser Funktion kannst du die Mausbewegung soweit abfangen. Mit WH_MOUSE_LL kriegst du eigentlich alle Infos; jedoch funktioniert dies nur unter NT/2k/XP

    Eine Idee wäre, die Maus irgendwo am rand zu verstecken und die mausbewegungen mitzuprotokollieren; daraus könntest du dann immer die aktuelle Pos errechnen. Und eine eigene Maus kann man sich notfalls noch mit nem OnTop-Fenster malen (siehe WindowRegions). Reicht das? Einfach mal in der MSDN stöbern 😉



  • Wozu soll denn das gut sein? Wenn die Maus im Stealth-Modus "irgendwohin" wandert, nutzt sie deinem User doch nichts mehr.

    (zumindest ich erwarte, daß die Maus dort ist, wo der Mauszeiger hindeutet - alles andere endet in einer Katastrophe)



  • HAllo,
    danke für die Antworten.
    Wie ich schon gesagt habe, kann ich nicht sagen wozu das gut sein soll, das geht einfach aus rechtlichen Gründen nicht. -sry
    Einen LL Maushook läuft schon, allerdings kann ich damit nicht unterbinden die Maus neu zu zeichnen.
    Allerdings würde es mir meiner Meinung nach auch helfen, wenn ich den Mauscursor systemweit umändern könnte.
    SetCursor(LoadCursor(NULL,IDC_WAIT)) habe ich schon probiert -> klappt auch.
    Allerdings eben nur für ein Fenster.
    Ich bräuchte das aber für alle Fenster.
    Hat einer eine Idee wie ich das machen kann?


Log in to reply