2016-07-28 5 views
0

私はC#でコンソールアプリケーションを作っていますが、シフトを押しながら矢印を押しながらテキストの選択を無効にすることができるのだろうかと思います。コンソールでテキストの選択をキャンセルすることはできますか?

Console.CancelKeyPressを使用しようとしましたが、この場合は動作しません。これらのメソッドを使用する

+3

はあなたが処理するためのフックを使用しようとしたしましたか? SetWindowsHookEx、UnhookWindowsHookExのようなネイティブメソッドと同様?ここで、どのキーが押されたかを検出し、覚えているように押さえることができます。 – VitaliyK

+0

いいえ、私はそれを聞いていませんでした私は今それを探しています –

+0

あなたは賢明なウェブサイトは、コンテキストメニューを無効にするか、選択を無効にするときにしようとすると同じように使い勝手を劇的に減らそうとしているように見えます。 –

答えて

0

試してみてください。

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
private static extern IntPtr SetWindowsHookEx(int idHook, 
    LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId); 

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
[return: MarshalAs(UnmanagedType.Bool)] 
private static extern bool UnhookWindowsHookEx(IntPtr hhk); 

とフック方式に比べて:

private static IntPtr HookCb(int nCode, IntPtr wParam, IntPtr lParam) 
{ 
    if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN) 
    { 
     int keyCode = Marshal.ReadInt32(lParam);   
     string keyName = ((Keys)keyCode).ToString(); 
     //there you can define which key was pressed and react accordingly 
    }} 
+0

私はこのLowLevelKeyboardProcのnead refrenceとそのWM_KEYDOWNが現在のコンテキストに除外していないと言います –

+0

コードにこれを追加:private const int WM_KEYDOWN = 0x0100; プライベートconst int WM_KEYUP = 0x0101; プライベートデリゲートIntPtr LowLevelKeyboardProc(int nCode、IntPtr wParam、IntPtr lParam); – VitaliyK

+0

残念ながら、それは動作しません:/ HookCb()は呼び出されませんでした –

関連する問題