编程效率:如何在键入时隐藏光标


9

每当我单击某处键入一些代码时,根据定义,这正是我的鼠标光标所在的位置,这掩盖了我要键入的内容。通常,如果我忘记在开始输入之前将光标移开,就会发现自己将手从键盘移回了鼠标,只是将光标移开了,然后又回到了输入。

我知道有一个操作系统级别的“键入时隐藏光标”选项,但是在Visual Studio中似乎没有任何作用。

另外,我知道可以在后台连续运行的实用程序(Ie CursorHider),但是出于稳定性的原因,我一直在运行已经运行的许多后台服务上犹豫不决。

有解决方案吗?


对于superuser.com的好问题。:-)
弗朗西·佩诺夫(Francis Penov)2009年

好吧,您可以使用Mac ...
dmckee ---前主持人小猫

对我来说,移开鼠标是我什至没有想到的反射。(也就是说,直到我停止使用常规编辑器并开始使用vim为止)
Hasen

Answers:


5

像您一样,我永远都遇到这个问题。因此无论您使用哪种Windows应用程序我都编写了一个小脚本来隐藏鼠标光标

请注意,如果在提升模式下运行Visual Studio(或其他任何方式),则还需要在提升模式下运行我的实用程序。


我怀疑这种有力的方法在所有情况下是否正确。例如,每当键入任何键时,光标就会消失,这可能会使游戏非常烦人。
harrymc

在那种情况下,您可以在游戏中卸载它……也就是说,我相信大多数游戏都可以实现自己的光标
Stefan Z Camilleri 2014年

Windows-Cursor-Hider到目前为止运行良好。我一直在寻找AHK脚本之类的简单内容。谢谢@StefanZCamilleri!
russds

3

似乎“键入时隐藏指针”的功能取决于应用程序。

此选项在我的鼠标的指针选项中打勾,并且适用于记事本,写字板,Word和Visual Studio 6等应用程序。但不适用于Firefox和Visual Studio 2008等其他应用程序。

我认为不能正常工作的应用程序被错误地编程以重复显示光标。作为一名程序员,我可以告诉您,在Windows中对光标进行编程会造成很大的麻烦,最后,保持理智的唯一方法是在某些事件上反复重新构造光标。显然,Visual Studio 2008背后的程序员采用了相同的快捷方式。


不过,这是一个错误的假设,因为如果您将光标隐藏在操作系统级别,它将保持隐藏状态,从而使强制显示光标(将覆盖它)的想法无效了-请在下面查看我的答案
Stefan Z Camilleri

1

我知道这对您来说可能不是一个可行的解决方案,但我不希望通过在IDE中为所有内容设置按键来完全不使用鼠标。我可以从一个窗格跳到另一个窗格,从一个错误跳到另一个错误,而无需触摸鼠标。同样,如果您的班级又好又小,则不必在班级上下滚动太多(即使您必须使用箭头键也足够了)。


0

您可以通过在编辑控件的父窗口的WndProc中捕获EN_UPDATE并设置光标位置来避免“键入时隐藏指针”:

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
这可能是一个很好的答案,但我不知道如何使用它。请添加说明。不要在评论中回复;编辑  您的答案,使其更清晰,更完整。
G-Man说'Resstate Monica''De​​c
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.