Produtividade de programação: como ocultar o cursor durante a digitação

9

Sempre que clico em algum lugar para digitar algum código, por definição, é exatamente onde está o cursor do mouse, o que obscurece o que estou tentando digitar. Freqüentemente, se eu esquecer de mover o cursor para longe antes de começar a digitar, me pego movendo minha mão do teclado de volta para o mouse, apenas para mover o cursor para fora do caminho e depois voltar a digitar.

Eu sei que existe uma opção "ocultar cursor ao digitar" no nível do sistema operacional, mas isso parece não ter efeito no Visual Studio.

Além disso, conheço utilitários que podem ser executados constantemente em segundo plano (ou seja, CursorHider ), mas, por motivos de estabilidade, hesito em executar outro serviço em segundo plano, além dos muitos que já estão em execução.

Há uma solução?

Adam Kane
fonte
Boa pergunta para superuser.com. :-)
Franci Penov
Bem, você poderia usar um mac ...
dmckee --- ex-moderador gatinho
Para mim, afastar o mouse é um reflexo em que nem penso. (isto é, até que eu parei de usar editores regulares e começou a usar vim)
Hasen

Respostas:

5

Como você, eu sempre tive esse problema. Então, eu escrevi um pequeno script que oculta o cursor do mouse, independentemente do aplicativo do Windows que você está usando.

Observe que se você executar o Visual Studio (ou qualquer coisa) no modo elevado, precisará executar meu utilitário também no modo elevado.

Stefan Z Camilleri
fonte
Tenho dúvidas de que um método tão forte seja correto em todas as situações. O cursor desaparece sempre que qualquer tecla é digitada, por exemplo, pode ser muito irritante nos jogos.
harrymc
Nesse caso, você pode simplesmente descarregá-lo durante um jogo ... o que disse, eu acredito que a maioria dos jogos implementar seu próprio cursor
Stefan Z Camilleri
O Windows-Cursor-Hider funciona bem até agora. Eu estava procurando por algo simples como um script AHK. Obrigado @StefanZCamilleri!
russds
3

Parece que a funcionalidade de "ocultar o ponteiro ao digitar" depende do aplicativo.

Essa opção está marcada nas opções de ponteiro do mouse e funciona para aplicativos como o bloco de notas, wordpad, Word e Visual Studio 6. Mas não funciona para outros aplicativos, como Firefox e Visual Studio 2008.

Acredito que os aplicativos em que isso não funcione estão programados incorretamente para mostrar o cursor repetidamente. Como programador, posso lhe dizer que programar o cursor no Windows é uma grande bagunça, onde finalmente a única maneira de manter a sanidade é reconstituir repetidamente o cursor em determinados eventos. Evidentemente, os programadores do Visual Studio 2008 adotaram os mesmos atalhos.

harrymc
fonte
Essa é uma suposição incorreta, já que se você ocultar o cursor no nível do sistema operacional, ele permanecerá oculto, anulando a idéia de forçar a exibição do cursor (o que o substituirá) - pls veja minha resposta abaixo
Stefan Z Camilleri
1

Sei que essa provavelmente não é uma solução viável para você, mas eu gosto de não usar o mouse, pois possui ligações de teclas para tudo dentro do IDE. Eu posso pular de painel em painel, erro em erro, etc, sem precisar tocar o mouse. Além disso, se suas aulas forem boas e pequenas, você não precisará rolar demais as classes para cima e para baixo (e mesmo se você tivesse que usar as teclas de seta, seria suficiente).

digiarnie
fonte
0

Você pode evitar o "ocultar o ponteiro ao digitar" ao capturar o EN_UPDATE no WndProc da janela pai do controle de edição e definir a posição do 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 );
}
user3383940
fonte
11
Essa pode ser uma ótima resposta, mas não tenho idéia de como usá-la. Por favor, adicione uma explicação. Não responda nos comentários; edite  sua resposta para torná-la mais clara e completa.
G-Man diz 'Reinstate Monica'