2016-07-28 75 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()从未调用 –

相关问题