Wydajność programowania: jak ukryć kursor podczas pisania

9

Ilekroć klikam gdzieś, by wpisać jakiś kod, z definicji dokładnie tam, gdzie jest mój kursor myszy, co przesłania to, co próbuję wpisać. Często, jeśli zapomnę odsunąć kursor przed rozpoczęciem pisania, znajdę się w sytuacji, gdy przesuwam dłoń z klawiatury z powrotem do myszy, aby przesunąć kursor na bok, a następnie wrócić do pisania.

Wiem, że istnieje opcja ukrywania kursora podczas pisania na poziomie systemu operacyjnego, ale wydaje się, że nie ma to żadnego efektu w Visual Studio.

Znam też narzędzia, które mogą stale działać w tle (tj. CursorHider ), ale ze względów stabilności jestem niezdecydowany, aby uruchomić kolejną usługę w tle na wiele już działających.

Czy jest jakieś rozwiązanie?

Adam Kane
źródło
Ładne pytanie do superuser.com. :-)
Franci Penov
Cóż, możesz użyć mac ...
dmckee --- były moderator kociak
Dla mnie odsuwanie myszy to odruch, o którym nawet nie myślę. (to znaczy, dopóki nie przestałem używać zwykłych edytorów i nie zacząłem używać vima)
hasen

Odpowiedzi:

5

Tak jak ty, miałem ten problem na zawsze. Napisałem więc mały skrypt, który ukrywa kursor myszy niezależnie od używanej aplikacji Windows.

Pamiętaj, że jeśli uruchomisz Visual Studio (lub cokolwiek) w trybie podniesionym, będziesz musiał uruchomić moje narzędzie także w trybie podwyższonym.

Stefan Z Camilleri
źródło
Mam wątpliwości, czy tak skuteczna metoda jest poprawna we wszystkich sytuacjach. Kursor znika po każdym naciśnięciu dowolnego klawisza, na przykład może być bardzo irytujący w grach.
harrymc
W takim przypadku możesz go po prostu rozładować podczas gry ... to powiedziawszy, uważam, że większość gier ma własny kursor
Stefan Z Camilleri
Windows-Cursor-Hider działa do tej pory dobrze. Szukałem czegoś prostego, jak skrypt AHK. Dzięki @StefanZCamilleri!
Russds
3

Wygląda na to, że funkcjonalność „ukrywania wskaźnika podczas pisania” zależy od aplikacji.

Ta opcja jest zaznaczona w opcjach wskaźnika myszy i działa z aplikacjami takimi jak notatnik, wordpad, Word i Visual Studio 6. Ale nie działa z innymi aplikacjami, takimi jak Firefox i Visual Studio 2008.

Uważam, że aplikacje, w których to nie działa, są źle zaprogramowane do wielokrotnego wyświetlania kursora. Jako programista mogę powiedzieć, że programowanie kursora w systemie Windows to wielki bałagan, w którym w końcu jedynym sposobem na zachowanie rozsądku jest wielokrotne odtwarzanie kursora po określonych zdarzeniach. Najwyraźniej programiści Visual Studio 2008 zastosowali te same skróty.

harrymc
źródło
Jest to błędne założenie, ponieważ jeśli ukryjesz kursor na poziomie systemu operacyjnego, pozostanie on ukryty, co unieważnia pomysł zmuszenia kursora do pokazania się (co by go zastąpiło) - proszę zobaczyć moją odpowiedź poniżej
Stefan Z Camilleri
1

Wiem, że to prawdopodobnie nie jest dla ciebie realne rozwiązanie, ale lubię w ogóle nie używać myszy, ponieważ ma powiązania klawiszy dla wszystkiego w IDE. Mogę przeskakiwać z panelu na panel, z błędu na błąd itp. Bez konieczności dotykania myszy. Także jeśli twoje zajęcia są ładne i małe, nie będziesz musiał zbytnio przewijać klas w górę i w dół (a nawet gdybyś musiał do nich użyć klawiszy strzałek).

digiarnie
źródło
0

Możesz uniknąć „ukrywania wskaźnika podczas pisania”, przechwytując EN_UPDATE w WndProc okna nadrzędnego kontrolki edycji i ustawiając pozycję kursora:

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 );
}
użytkownik3383940
źródło
1
To może być naprawdę świetna odpowiedź, ale nie mam pojęcia, jak jej użyć. Dodaj wyjaśnienie. Nie odpowiadaj w komentarzach; edytuj  swoją odpowiedź, aby była jaśniejsza i bardziej kompletna.
G-Man mówi „Reinstate Monica”