2016-07-28 74 views
0

我正在C#中創建一個控制檯應用程序,並且我想知道是否可以在按住shift和按箭頭的同時禁用選擇文本。我可以取消在控制檯中選擇文本嗎?

我試過使用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和這個WM_KEYDOWN不在exterm列出在curent上下文 –

+0

添加到您的代碼:private const int WM_KEYDOWN = 0x0100; private const int WM_KEYUP = 0x0101; 私人委託IntPtr LowLevelKeyboardProc(int nCode,IntPtr wParam,IntPtr lParam); – VitaliyK

+0

不幸的是它沒有工作:/ HookCb()從未調用 –

相關問題