2016-06-21 4 views
0

WinAPI経由のコンソールアプリケーションでテキストを選択する方法が見つからないようです。ほとんど誰かがコンソールウィンドウを右クリックし、「マーク」を選択した場合、マウスを使って何ができるか:コンソールアプリケーションでプログラムでテキストを選択する方法は?

enter image description here

をして、コンソールウィンドウ上でマウスをドラッグ:

enter image description here

WinAPIでこれを行うことはできますか?

+0

ここにあります:http://stackoverflow.com/questions/2210245/can-i-get-copy-paste-functionality-from-ac-sharp-console-window –

+1

@Nope、質問はそれを行うことですプログラム的に – chris

+0

['ReadConsoleOutput'](https://msdn.microsoft.com/en-us/library/windows/desktop/ms684965(v = vs.85).aspx)のようになります。 – chris

答えて

3

あなたが求めていることを行うAPIはありません。だから代わりにそれをシミュレートする必要があります。

SetConsoleMode()を使用すると、ENABLE_QUICK_EDIT_MODEはマウスでテキストを選択できるようになります。次に、SendInput()またはmouse_event()を使用して、必要に応じてマウスの動きやクリックを操作します。

GetConsoleWindow()を使用すると、コンソールのHWNDGetWindowRect()が画面上に表示されます。 GetConsoleScreenBufferInfo/Ex()を使用して、コンソールの列/行数とコンソールウィンドウ内の文字が表示される矩形を取得します。次に、マウス操作を送信するときに、必要に応じて文字列/行オフセットを画面座標に変換するために数式を使用できるはずです。

+0

それは一つの方法です。コンソール(マウスイベントを処理できるため)(https://msdn.microsoft.com/en-us/library/windows/desktop/ms685035(v = vs.85).aspx)は、シミュレーションする方法がありますそれらは一般的なマウス入力を送信するのではなく? – c00000fd

+0

@ c00000fd:AFAIK、コンソールAPIは*マウスイベントを処理できますが、*生成することはできません。したがって、コンソールの外でAPIチェーンを上げる必要があります。あなたは* WM_MOUSEMOVEとWM_LBUTTON(DOWN | UP)メッセージを直接コンソールウィンドウにポストすることで逃げ出すかもしれませんが。または、UIAutomationを使用してコンソールウィンドウでマウス入力をシミュレートします。 –

+0

私はそれを「ソート」の解決策としてマークします。 'SendInput'を介してコンソールに直接入力を送信することはできますが、非常に扱いにくく、信頼できません(つまり、' SendInput'が呼び出されたときにコンソールフォーカスをキーボードのフォーカスに合わせることに依存します)。 – c00000fd

0

ReadConsoleOutputを使用して、選択する領域を読み取ります。各キャラクタの受け取ったCHAR_INFO属性を、異なる(例えば反転した)色を反映するように変更します。 WriteConsoleOutputを使用して、変更されたデータを同じ矩形領域に書き込みます。これは「選択された」領域を表示します。必要に応じて、SetConsoleCursorPositionを使用してカーソル位置を変更します。 ReadConsoleOutputとWriteConsoleOutputの使用方法の例はhereです。

+0

うん。それはハイライトのためのものです。私は、コンソールが 'SetConsoleMode'で' ENABLE_QUICK_EDIT_MODE'に置かれた後、通常はマウスで行われる選択のエミュレーションについて質問しています。 – c00000fd

関連する問題