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?


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é.


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.


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).


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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.