要求禁用后按任何键盘按键都不起作用,最好就是跟键盘没插一样,只有通过解除禁用才能恢复。
最好是源码或示例
最好是源码或示例
解决方案 »
- Repeater绑定问题
- 求c# 的一条命令
- The type or namespace name 'AAA' could not be found (are you missing a using d
- DataGridView中限制某一单元格是否可编辑!
- 急急, C# 如何将 word 文件转换成 Pdf 文件!
- 一个自己写的Webmethod,运行时老是报错,高手请指正
- 如何在LISTVIEW显示文件的时候显示图标
- C#(WebForm)中是否有能输入文字的下拉列表框控件
- 如何读取硬盘大小!!!!!!!!!!!!!!!!快!1!如何读取硬盘大小!!!!!!!!!!!!!!!!快!1!如何读取硬盘大小!
- C# winform 窗体标题栏文字为什么是居中显示的
- 类下面还可以有一个子类是如何做到的
- asp.net中的gridview分页时怎么重新绑定数据源?
http://www.codeproject.com/KB/system/CSLLKeyboard.aspx?display=Print你可以stop all keystrokes
{
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
return true;
} static void Main()
{
Application.Run(new Test());
}
}
{
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
return true;
}
Test()
{
TextBox tbx = new TextBox();
tbx.Parent = this;
tbx.Text = "任何按键都无效";
}
static void Main()
{
Application.Run(new Test());
}
}
{
#region 锁定鼠标和键盘
//有关鼠标和键盘钩子的相关定义
static int hhookMouse = 0;
static int hhookKeyBoard = 0;
public const int WH_MOUSE = 14;
public const int WH_KEYBOARD = 2;
public const int WH_MOUSE_LL = 14;
private const int WH_KEYBOARD_LL = 13;
public const int HC_ACTION = 0;
//public const int WM_KEYDOWN = 0x100;
//public const int VK_RETURN = 0xD;
public delegate int HookProc(int nCode, IntPtr wParam, IntPtr iParam);
HookProc MouseHookProcedure, KeyBoardHookProcedure;
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hinstance, int threadid);
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern int CallNextHookEx(int idHook, int nCode, IntPtr wParam, int lParam);
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern bool UnhookWindowsHookEx(int idHook);
/// <summary>
/// 钩子处理方法(鼠标锁定)
/// </summary>
/// <param name="nCode"></param>
/// <param name="wParam"></param>
/// <param name="lParam"></param>
/// <returns></returns>
private int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam)
{
//如果nCode<0,直接调用CallNextHookEx返回
if (nCode < 0)
//return CallNextHookEx(hhookMouse,nCode,wParam,lParam);
return 1;
//函数将消息向下传递,下一个钩子处理将截获这一消息
//if(nCode!= HC_ACTION)
// return CallNextHookEx(hhookMouse, nCode, wParam, lParam);
return 1;
}
/// <summary>
/// 启动鼠标锁定
/// </summary>
/// <returns></returns>
public bool EnableMouseCapture()
{
MouseHookProcedure = new HookProc(this.MouseHookProc);
Process currentProcess = Process.GetCurrentProcess(); //安装全局鼠标钩子
hhookMouse = SetWindowsHookEx(WH_MOUSE_LL, MouseHookProcedure, currentProcess.MainModule.BaseAddress, 0);
if (hhookMouse == 0)
return false;
return true;
}
/// <summary>
/// 解除鼠标锁定
/// </summary>
/// <returns></returns>
public bool DisableMouseCapture()
{
return UnhookWindowsHookEx(hhookMouse);
} /// <summary>
/// 钩子处理方法(键盘锁定)
/// </summary>
/// <param name="nCode"></param>
/// <param name="wParam"></param>
/// <param name="lParam"></param>
/// <returns></returns>
private int KeyBoardHookProc(int nCode, IntPtr wParam, IntPtr lParam)
{
//如果nCode<0,直接调用CallNextHookEx返回
if (nCode < 0)
//return CallNextHookEx(hhookKeyBoard, nCode, wParam, lParam);
return 1;
//函数将消息向下传递,下一个钩子处理将截获这一消息
//if (nCode != HC_ACTION)
//return CallNextHookEx(hhookKeyBoard, nCode, wParam, lParam);
return 1;
}
/// <summary>
/// 启动键盘锁定
/// </summary>
/// <returns></returns>
public bool EnableKeyBoardCapture()
{
KeyBoardHookProcedure = new HookProc(this.KeyBoardHookProc);
Process currentProcess = Process.GetCurrentProcess(); //安装全局键盘钩子
hhookKeyBoard = SetWindowsHookEx(WH_KEYBOARD_LL, KeyBoardHookProcedure, currentProcess.MainModule.BaseAddress, 0);
if (hhookKeyBoard == 0)
return false;
return true;
}
/// <summary>
/// 解除键盘锁定
/// </summary>
/// <returns></returns>
public bool DisableKeyBoardCapture()
{
return UnhookWindowsHookEx(hhookKeyBoard);
} #endregion
}
{
Key.HookMessage _HookMessage = new Key.HookMessage(Key.HookMessage.WindowsHookCodes.WH_KEYBOARD_LL, true); _HookMessage.GetHook+=new Key.HookMessage.GetHookMessage(_HookMessage_GetHook);
} bool m_SendKeyCode = false;
void _HookMessage_GetHook(int p_Code, IntPtr p_wParam, IntPtr p_lParam, ref bool p_Send)
{
p_Send = m_SendKeyCode;
}你可以控制m_SendKeyCode 来决定键盘是否有效
下面的类 必须放到一个DLL里..引用就好了
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace Key
{
/// <summary>
/// 用钩子获取消息
/// [email protected]
/// </summary>
public class HookMessage
{
private IntPtr m_HookEx;
/// <summary>
/// 设置自己进程的钩子
/// </summary>
/// <param name="p_HookCodes">钩子类型</param>
public HookMessage(WindowsHookCodes p_HookCodes)
{
m_HookEx = SetWindowsHookEx((int)p_HookCodes, new HookProc(SetHookProc), IntPtr.Zero, GetCurrentThreadId());
}
/// <summary>
/// 设置进程的钩子
/// </summary>
/// <param name="p_HookCodes">钩子类型</param>
/// <param name="p_ThreadID">全局钩子</param>
public HookMessage(WindowsHookCodes p_HookCodes, bool p_Zero)
{
IntPtr _Value = System.Runtime.InteropServices.Marshal.GetHINSTANCE(System.Reflection.Assembly.GetExecutingAssembly().GetModules()[0]);
m_HookEx = SetWindowsHookEx((int)p_HookCodes, new HookProc(SetHookProc), _Value, 0);
}
/// <summary>
/// 关闭钩子
/// </summary>
public void UnHookMessage()
{
if (UnhookWindowsHookEx(m_HookEx))
{
m_HookEx = IntPtr.Zero;
}
} public delegate void GetHookMessage(int p_Code, IntPtr p_wParam, IntPtr p_lParam, ref bool p_Send);
public event GetHookMessage GetHook; private IntPtr SetHookProc(int p_Code, IntPtr p_wParam, IntPtr p_lParam)
{
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
bool _SendMessage = true;
if (GetHook != null) GetHook(p_Code, p_wParam, p_lParam, ref _SendMessage);
if (!_SendMessage) return new IntPtr(1);
return IntPtr.Zero;
}
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SetWindowsHookEx(int hookid, HookProc pfnhook, IntPtr hinst, int threadid); public delegate IntPtr HookProc(int nCode, IntPtr wParam, IntPtr lParam); [DllImport("kernel32.dll", ExactSpelling = true, CharSet = CharSet.Auto)]
public static extern int GetCurrentThreadId(); public enum WindowsHookCodes
{
WH_MSGFILTER = (-1),
WH_JOURNALRECORD = 0,
WH_JOURNALPLAYBACK = 1,
WH_KEYBOARD = 2,
WH_GETMESSAGE = 3,
WH_CALLWNDPROC = 4,
WH_CBT = 5,
WH_SYSMSGFILTER = 6,
WH_MOUSE = 7,
WH_HARDWARE = 8,
WH_DEBUG = 9,
WH_SHELL = 10,
WH_FOREGROUNDIDLE = 11,
WH_CALLWNDPROCRET = 12,
WH_KEYBOARD_LL = 13,
WH_MOUSE_LL = 14
} [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
public static extern bool UnhookWindowsHookEx(IntPtr hhook);
}
}