Productividad de programación: cómo ocultar el cursor mientras se escribe

9

Cada vez que hago clic en algún lugar para escribir algún código, por definición, es exactamente donde está el cursor del mouse, lo que está ocultando lo que estoy tratando de escribir. A menudo, si me olvido de mover el cursor antes de comenzar a escribir, me veré moviendo la mano desde el teclado hacia el mouse solo para mover el cursor fuera del camino y luego volver a escribir.

Sé que hay una opción de "ocultar cursor al escribir" a nivel del sistema operativo, pero eso parece no tener efecto en Visual Studio.

Además, conozco utilidades que pueden ejecutarse constantemente en segundo plano (es decir, CursorHider ), pero, por razones de estabilidad, dudo en ejecutar otro servicio en segundo plano además de los muchos que ya se están ejecutando.

¿Hay alguna solución?

Adam Kane
fuente
Buena pregunta para superuser.com. :-)
Franci Penov
Bueno, podrías usar una Mac ...
dmckee --- ex-gatito moderador
Para mí, alejar el mouse es un reflejo en el que ni siquiera pienso. (es decir, hasta que dejé de usar editores regulares y comencé a usar vim)
hasen

Respuestas:

5

Como tú, he tenido este problema para siempre. Así que escribí un pequeño script que oculta el cursor del mouse sin importar qué aplicación de Windows esté usando.

Tenga en cuenta que si ejecuta Visual Studio (o cualquier otra cosa) en modo elevado, deberá ejecutar mi utilidad también en modo elevado.

Stefan Z Camilleri
fuente
Tengo dudas sobre si un método tan contundente es correcto en todas las situaciones. La desaparición del cursor cada vez que se escribe una tecla puede, por ejemplo, ser muy molesto con los juegos.
harrymc
En ese caso, puedes descargarlo durante un juego ... dicho eso, creo que la mayoría de los juegos implementan su propio cursor
Stefan Z Camilleri
Windows-Cursor-Hider funciona bien hasta ahora. Estaba buscando algo simple como un script AHK. Gracias @StefanZCamilleri!
rusos
3

Parece que la funcionalidad de "ocultar puntero al escribir" depende de la aplicación.

Esta opción está marcada en las opciones de puntero de mi mouse y funciona para aplicaciones como el bloc de notas, wordpad, Word y Visual Studio 6. Pero no funciona para otras aplicaciones, como Firefox y Visual Studio 2008.

Creo que las aplicaciones donde esto no funciona están mal programadas para mostrar el cursor repetidamente. Como programador, puedo decirle que programar el cursor en Windows es un gran desastre, donde finalmente la única forma de mantenerse cuerdo es reconstituir el cursor repetidamente en ciertos eventos. Evidentemente, los programadores detrás de Visual Studio 2008 han tomado los mismos atajos.

harrymc
fuente
Sin embargo, esta es una suposición incorrecta, ya que si oculta el cursor en un nivel de sistema operativo, permanecerá oculto, anulando la idea de forzar el cursor a mostrar (lo que lo anularía) - por favor vea mi respuesta a continuación
Stefan Z Camilleri
1

Sé que esta no es probablemente una solución viable para usted, pero me gusta no usar el mouse para nada al tener teclas vinculadas para todo dentro del IDE. Puedo saltar de un panel a otro, de error a error, etc. sin tener que tocar el mouse. Además, si sus clases son agradables y pequeñas, no tendrá que desplazarse demasiado hacia arriba y hacia abajo (e incluso si tuviera que usar las teclas de flecha sería suficiente).

digiarnie
fuente
0

Puede evitar el "ocultar puntero mientras escribe" al capturar EN_UPDATE en WndProc de la ventana principal del control de edición y establecer la posición del cursor:

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 );
}
usuario3383940
fuente
1
Esta podría ser una gran respuesta, pero no tengo idea de cómo usarla. Por favor agregue una explicación. No responda en comentarios; edite  su respuesta para que sea más clara y completa.
G-Man dice 'Restablecer a Mónica'