プログラミングの生産性:入力中にカーソルを非表示にする方法


9

どこかをクリックしてコードを入力するときはいつでも、その定義により、マウスカーソルの位置とまったく同じになるため、入力しようとしている内容がわかりにくくなります。多くの場合、入力を開始する前にカーソルを離すことを忘れると、カーソルを邪魔にならないように移動して入力に戻るために、キーボードからマウスに手を戻します。

OSレベルの「入力中はカーソルを非表示にする」オプションがあることは知っていますが、Visual Studioでは効果がないようです。

また、常にバックグラウンドで実行できるユーティリティつまりCursorHider)を知っていますが、安定性の理由から、すでに実行中の多くのサービスの上にさらに別のバックグラウンドサービスを実行することをためらっています。

解決策はありますか?


superuser.comにいい質問です。:-)
フランシペノフ

まあ、あなたはマックを使うことができます...
dmckee ---元モデレーターの子猫09/10/12

私にとって、マウスを遠ざけることは私が考えもしない反射です。(つまり、通常のエディターの使用をやめてvimの使用を開始するまで)
hasen

回答:


5

あなたのように、私はこの問題を永遠に経験しました。したがって、使用しているWindowsアプリケーションに関係なく、マウスカーソルを非表示にする小さなスクリプトを作成しました。

昇格モードでVisual Studio(または何か)を実行する場合は、ユーティリティも昇格モードで実行する必要があることに注意してください。


このような強力な方法がすべての状況で正しいかどうかは疑問です。たとえば、キーが入力されるたびにカーソルが消えるのは、ゲームで非常に煩わしい場合があります。
harrymc 14年

その場合、ゲーム中にそれをアンロードすることができます...とは言っても、ほとんどのゲームは独自のカーソルを実装していると思います
Stefan Z Camilleri

Windows-Cursor-Hiderは今のところうまくいきます。AHKスクリプトのような単純なものを探していました。@StefanZCamilleri、ありがとう!
russds

3

「入力中にポインタを非表示にする」機能はアプリケーションによって異なるようです。

このオプションは、マウスのポインターオプションでチェックされており、メモ帳、ワードパッド、Word、Visual Studio 6などのアプリケーションでは機能しますが、FirefoxやVisual Studio 2008などの他のアプリケーションでは機能しません。

これが機能しないアプリケーションは、カーソルを繰り返し表示するように誤ってプログラムされていると思います。プログラマーとして、Windowsでのカーソルのプログラミングは大きな混乱であることがわかります。最終的には、特定のイベントでカーソルを繰り返し再構成することが正気を保つ唯一の方法です。明らかに、Visual Studio 2008の背後にいるプログラマは同じショートカットを使用しています。


ただし、これは正しくない仮定です。OSレベルでカーソルを非表示にすると、カーソルは非表示のままになり、カーソルを強制的に表示するというアイデアが無効になります(上書きされる)-下記の私の回答をご覧ください
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は「モニカを復活させる」
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.