Programmierproduktivität: So verbergen Sie den Cursor während der Eingabe

9

Immer wenn ich irgendwohin klicke, um Code einzugeben, befindet sich per Definition genau dort mein Mauszeiger, was das, was ich eingeben möchte, verdeckt. Wenn ich vergesse, den Cursor weg zu bewegen, bevor ich mit dem Tippen beginne, bewege ich häufig meine Hand von meiner Tastatur zurück zu meiner Maus, um den Cursor aus dem Weg zu räumen und dann wieder zu tippen.

Ich weiß, dass es auf Betriebssystemebene die Option "Cursor während der Eingabe ausblenden" gibt, aber das scheint in Visual Studio keine Auswirkungen zu haben.

Ich kenne auch Dienstprogramme, die ständig im Hintergrund ausgeführt werden können (z. B. CursorHider ), aber aus Stabilitätsgründen zögere ich, einen weiteren Hintergrunddienst zusätzlich zu den vielen bereits ausgeführten auszuführen.

Gibt es eine Lösung?

Adam Kane
quelle
Schöne Frage an superuser.com. :-)
Franci Penov
Nun, Sie könnten einen Mac verwenden ...
dmckee --- Ex-Moderator Kätzchen
Das Wegbewegen der Maus ist für mich ein Reflex, an den ich nicht einmal denke. (das heißt, bis ich aufgehört habe, reguläre Editoren zu verwenden und angefangen habe, vim zu verwenden)
hasen

Antworten:

5

Wie Sie hatte ich dieses Problem für immer. Deshalb habe ich ein kleines Skript geschrieben, das den Mauszeiger verbirgt, unabhängig davon, welche Windows-Anwendung Sie verwenden.

Beachten Sie, dass Sie mein Dienstprogramm auch im erhöhten Modus ausführen müssen, wenn Sie Visual Studio (oder etwas anderes) im erhöhten Modus ausführen.

Stefan Z Camilleri
quelle
Ich habe Zweifel, ob eine so kraftvolle Methode in allen Situationen richtig ist. Das Verschwinden des Cursors bei jeder Eingabe einer Taste kann beispielsweise bei Spielen sehr ärgerlich sein.
Harrymc
In diesem Fall können Sie es einfach während eines Spiels entladen ... das heißt, ich glaube, die meisten Spiele implementieren ihren eigenen Cursor
Stefan Z Camilleri
Windows-Cursor-Hider funktioniert bisher gut. Ich suchte nach etwas Einfachem wie einem AHK-Skript. Danke @StefanZCamilleri!
Russds
3

Es scheint, dass die Funktionalität von "Zeiger während der Eingabe ausblenden" von der Anwendung abhängt.

Diese Option ist in den Zeigeroptionen meiner Maus aktiviert und funktioniert für Anwendungen wie Editor, Wordpad, Word und Visual Studio 6. Sie funktioniert jedoch nicht für andere Anwendungen wie Firefox und Visual Studio 2008.

Ich glaube, dass die Anwendungen, in denen dies nicht funktioniert, falsch programmiert sind, um den Cursor wiederholt anzuzeigen. Als Programmierer kann ich Ihnen sagen, dass das Programmieren des Cursors in Windows ein großes Durcheinander ist. Schließlich besteht die einzige Möglichkeit, gesund zu bleiben, darin, den Cursor bei bestimmten Ereignissen wiederholt wiederherzustellen. Offensichtlich haben die Programmierer hinter Visual Studio 2008 dieselben Verknüpfungen verwendet.

harrymc
quelle
Dies ist jedoch eine falsche Annahme, da der Cursor, wenn Sie ihn auf Betriebssystemebene ausblenden, ausgeblendet bleibt, wodurch die Idee zunichte gemacht wird, den Cursor zum Anzeigen zu zwingen (was ihn überschreiben würde) - siehe meine Antwort unten
Stefan Z Camilleri
1

Ich weiß, dass dies wahrscheinlich keine praktikable Lösung für Sie ist, aber ich mag es, die Maus überhaupt nicht zu verwenden, indem ich Tastenbelegungen für alles in der IDE habe. Ich kann von Fenster zu Fenster, von Fehler zu Fehler usw. springen, ohne die Maus berühren zu müssen. Auch wenn Ihre Klassen nett und klein sind, müssen Sie nicht zu viel nach oben und unten scrollen (und selbst wenn Sie die Pfeiltasten müssten, würde dies ausreichen).

digiarnie
quelle
0

Sie können das "Ausblenden des Zeigers während der Eingabe" vermeiden, indem Sie EN_UPDATE in WndProc des übergeordneten Fensters des Bearbeitungssteuerelements abfangen und die Cursorposition festlegen:

void CreateEdit( HWND hWnd )
{

    WNDCLASSEX wndClass;

    memset( &wndClass, 0, sizeof( wndClass ) );

    wndClass.cbSize = sizeof( wndClass );
    wndClass.style = CS_SAVEBITS;
    wndClass.lpfnWndProc = WndProcEditParent;
    wndClass.cbClsExtra = 0;
    wndClass.cbWndExtra = 0;
    wndClass.hInstance = GetModuleHandle( NULL );
    wndClass.hIcon = NULL;
    wndClass.hCursor = NULL;
    wndClass.hbrBackground = NULL;
    wndClass.lpszMenuName = NULL;
    wndClass.lpszClassName = L"EditParent";

    RegisterClassEx( &wndClass );

    HWND hWndEditParent = CreateWindowEx( 0
        , L"EditParent"
        , L""
        , WS_CHILD | WS_BORDER
        , 0
        , 0
        , 0
        , 0
        , hWnd
        , NULL
        , GetModuleHandle( NULL )
        , 0 );

    HWND hWndEdit = CreateWindowEx( 0
        , L"Edit"
        , L""
        , WS_CHILD
        , 0
        , 0
        , 0
        , 0
        , hWndEditParent
        , NULL
        , GetModuleHandle( NULL )
        , 0 );

    ...
}


LRESULT CALLBACK Edit::WndProcEditParent( HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam )
{
    switch( iMessage )
    {
        ...
        case WM_COMMAND:
            if( HIWORD( wParam ) == EN_UPDATE )
            {
            // this is the hack to avoid "hide pointer while typing"
                POINT point;

                GetCursorPos( &point );
                SetCursorPos( point.x, point.y );
            }
            break;
        ...
    }

    return DefWindowProc( hWnd, iMessage, wParam, lParam );
}
user3383940
quelle
1
Dies mag eine wirklich gute Antwort sein, aber ich habe keine Ahnung, wie ich sie verwenden soll. Bitte fügen Sie eine Erklärung hinzu. Antworte nicht in Kommentaren; Bearbeiten Sie  Ihre Antwort, um sie klarer und vollständiger zu gestalten.
G-Man sagt "Reinstate Monica"