Productivité de la programmation: comment masquer le curseur lors de la frappe

9

Chaque fois que je clique quelque part pour taper un code, c'est par définition exactement l'endroit où se trouve le curseur de ma souris, ce qui masque ce que j'essaie de taper. Souvent, si j'oublie d'éloigner le curseur avant de commencer à taper, je me retrouve à déplacer ma main de mon clavier vers ma souris, juste pour déplacer le curseur, puis pour revenir à la saisie.

Je sais qu'il existe une option "masquer le curseur lors de la frappe" au niveau du système d'exploitation, mais cela semble n'avoir aucun effet dans Visual Studio.

De plus, je connais des utilitaires pouvant fonctionner en permanence en tâche de fond (I.e. CursorHider ), mais pour des raisons de stabilité, j’hésite à utiliser un autre service d’arrière-plan en plus des nombreux services en cours.

Y a-t-il une solution?

Adam Kane
la source
Belle question pour superuser.com. :-)
Franci Penov
Eh bien, vous pourriez utiliser un mac ...
dmckee
Pour moi, éloigner la souris est un réflexe auquel je ne pense même pas. (c’est-à-dire jusqu’à ce que j’arrête d’utiliser des éditeurs réguliers et d’utiliser vim)
hasen

Réponses:

5

Comme vous, j'ai ce problème depuis toujours. Donc j'ai écrit un peu script qui cache le curseur de la souris peu importe l'application Windows que vous utilisez.

Notez que si vous exécutez Visual Studio (ou quoi que ce soit) en mode élevé, vous devez également exécuter mon utilitaire en mode élevé.

Stefan Z Camilleri
la source
Je doute qu'une méthode aussi énergique soit correcte dans toutes les situations. Le curseur qui disparaît chaque fois que vous tapez une touche peut par exemple être très gênant pour les jeux.
harrymc
Dans ce cas, vous pouvez simplement le décharger pendant un jeu ... Cela dit, je pense que la plupart des jeux implémentent leur propre curseur
Stefan Z Camilleri
Windows-Cursor-Hider fonctionne bien jusqu'à présent. Je cherchais quelque chose de simple, comme un script AHK. Merci @StefanZCamilleri!
russds
3

Il semble que la fonctionnalité de "masquer le pointeur lors de la frappe" dépend de l'application.

Cette option est cochée dans les options du pointeur de la souris et fonctionne pour des applications telles que le bloc-notes, le WordPad, Word et Visual Studio 6. Mais cela ne fonctionne pas pour d'autres applications, telles que Firefox et Visual Studio 2008.

Je crois que les applications où cela ne fonctionne pas sont mal programmées pour afficher le curseur à plusieurs reprises. En tant que programmeur, je peux vous affirmer que la programmation du curseur sous Windows est un véritable gâchis, où le seul moyen de rester sain d’esprit est de reconstituer le curseur à plusieurs reprises lors de certains événements. De toute évidence, les programmeurs à l'origine de Visual Studio 2008 ont pris les mêmes raccourcis.

harrymc
la source
Ceci est une hypothèse fausse cependant, car si vous cachez le curseur au niveau de l'OS, il le restera, ce qui rendra caduque l'idée de forcer le curseur à s'afficher (ce qui l'aurait annulé).
Stefan Z Camilleri
1

Je sais que ce n'est pas probablement une solution viable pour vous, mais j'aime bien ne pas utiliser la souris du tout en disposant de raccourcis clavier pour tout ce qui se trouve dans l'EDI. Je peux sauter de volet en volet, erreur en erreur, etc. sans avoir à toucher la souris. De plus, si vos classes sont petites et agréables, vous n'aurez pas besoin de faire défiler les classes trop souvent (et même si vous aviez besoin des touches fléchées, cela suffirait).

digiarnie
la source
0

Vous pouvez éviter le "pointeur lors de la saisie" en interceptant EN_UPDATE dans WndProc de la fenêtre parente du contrôle de saisie et en définissant la position du curseur:

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
la source
1
Cela pourrait être une très bonne réponse, mais je ne sais pas comment l'utiliser. S'il vous plaît ajouter une explication. Ne pas répondre aux incomments; modifier votre réponse pour la rendre plus claire et plus complète.
G-Man