Programmazione della produttività: come nascondere il cursore durante la digitazione


9

Ogni volta che faccio clic da qualche parte per digitare un po 'di codice, per definizione è esattamente dove si trova il mio cursore del mouse, che oscura ciò che sto cercando di digitare. Spesso, se dimentico di spostare il cursore prima di iniziare a digitare, mi ritrovo a spostare la mano dalla tastiera al mouse solo per spostare il cursore e poi tornare a digitare.

So che esiste un'opzione "nascondi cursore durante la digitazione" a livello di sistema operativo, ma sembra che non abbia alcun effetto in Visual Studio.

Inoltre, sono a conoscenza di utility che possono essere eseguite costantemente in background (Ie CursorHider ), ma, per motivi di stabilità, sono riluttante a eseguire un altro servizio in background oltre a molti già in esecuzione.

C'è una soluzione?


Bella domanda per superuser.com. :-)
Franci Penov,

Bene, potresti usare un mac ...
dmckee --- ex gattino moderatore,

Per me, allontanare il mouse è un riflesso a cui non penso nemmeno. (cioè, fino a quando ho smesso di usare i normali editor e ho iniziato a usare vim)
hasen

Risposte:


5

Come te, ho avuto questo problema per sempre. Quindi ho scritto un piccolo script che nasconde il cursore del mouse, indipendentemente dall'applicazione Windows in uso.

Nota che se esegui Visual Studio (o altro) in modalità elevata, dovrai eseguire la mia utility anche in modalità elevata.


Dubito che un metodo così efficace sia corretto in tutte le situazioni. Il cursore scompare ogni volta che si digita un tasto può essere molto fastidioso con i giochi.
harrymc,

In tal caso, puoi semplicemente scaricarlo durante una partita ... Detto questo, credo che molti giochi implementino il proprio cursore
Stefan Z Camilleri,

Finora Windows-Cursor-Hider funziona bene. Stavo cercando qualcosa di semplice come uno script AHK. Grazie @StefanZCamilleri!
russds

3

Sembra che la funzionalità di "nascondi puntatore durante la digitazione" dipende dall'applicazione.

Questa opzione è selezionata nelle opzioni del puntatore del mouse e funziona per applicazioni come Blocco note, WordPad, Word e Visual Studio 6. Ma non funziona per altre applicazioni, come Firefox e Visual Studio 2008.

Credo che le applicazioni in cui ciò non funziona siano erroneamente programmate per mostrare ripetutamente il cursore. Come programmatore, posso dirti che programmare il cursore in Windows è un gran casino, dove finalmente l'unico modo per rimanere sani di mente è ricostituire ripetutamente il cursore su determinati eventi. Evidentemente, i programmatori dietro Visual Studio 2008 hanno preso le stesse scorciatoie.


Questo è un presupposto errato, poiché, se si nasconde il cursore a livello di sistema operativo, rimarrà nascosto, annullando l'idea di forzare la visualizzazione del cursore (che lo sovrascriverebbe) - per favore vedi la mia risposta qui sotto
Stefan Z Camilleri

1

So che questa non è probabilmente una soluzione praticabile per te, ma mi piace non usare affatto il mouse avendo associazioni di tasti per tutto all'interno dell'IDE. Posso saltare da un riquadro all'altro, da un errore all'altro ecc senza dover toccare il mouse. Inoltre, se le tue classi sono belle e piccole, non dovrai scorrere troppo le classi su e giù (e anche se dovessi usare i tasti freccia).


0

Puoi evitare il "nascondi puntatore durante la digitazione" catturando EN_UPDATE in WndProc della finestra principale del controllo di modifica e impostando la posizione del cursore:

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 );
}

1
Questa potrebbe essere una risposta davvero grandiosa, ma non ho idea di come usarla. Si prega di aggiungere una spiegazione. Non rispondere nei commenti; modifica la  tua risposta per renderla più chiara e completa.
G-Man dice 'Reinstate Monica' il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.