大家好,又见面了,我是你们的朋友全栈君。
#region 自定义事件
///
/// Hooks the start.
///
public void Hook_Start()
{
// 安装键盘钩子
if (hHook == 0)
{
KeyBoardHookProcedure = new HookProc(KeyBoardHookProc);
hHook = SetWindowsHookEx(WH_KEYBOARD_LL,
KeyBoardHookProcedure,
GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0);
//如果设置钩子失败.
if (hHook == 0)
{
Hook_Clear();
}
}
}
//取消钩子事件
///
/// Hooks the clear.
///
/// UnhookWindowsHookEx failed.
public void Hook_Clear()
{
bool retKeyboard = true;
if (hHook != 0)
{
retKeyboard = UnhookWindowsHookEx(hHook);
hHook = 0;
}
//如果去掉钩子失败.
if (!retKeyboard) throw new Exception(“UnhookWindowsHookEx failed.”);
}
//这里可以添加自己想要的信息处理
///
/// Keys the board hook proc.
///
/// The n code.
/// The w parameter.
/// The l parameter.
/// System.Int32.
public static int KeyBoardHookProc(int nCode, int wParam, IntPtr lParam)
{
return 1;
}
#endregion 自定义事件
#region 暂时屏幕按键
//委托
public delegate int HookProc(int nCode, int wParam, IntPtr lParam);
///
/// The h hook
///
private static int hHook = 0;
///
/// The wh keyboard ll
///
public const int WH_KEYBOARD_LL = 13;
//LowLevel键盘截获,如果是WH_KEYBOARD=2,并不能对系统键盘截取,Acrobat Reader会在你截取之前获得键盘。
///
/// The key board hook procedure
///
private HookProc KeyBoardHookProcedure;
///
/// Class KeyBoardHookStruct.
///
/// 键盘Hook结构函数
[StructLayout(LayoutKind.Sequential)]
public class KeyBoardHookStruct
{
///
/// The vk code
///
public int vkCode;
///
/// The scan code
///
public int scanCode;
///
/// The flags
///
public int flags;
///
/// The time
///
public int time;
///
/// The dw extra information
///
public int dwExtraInfo;
}
#region DllImport
//设置钩子
///
/// Sets the windows hook ex.
///
/// The identifier hook.
/// The LPFN.
/// The h instance.
/// The thread identifier.
/// System.Int32.
[DllImport(“user32.dll”)]
public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);
///
/// Unhooks the windows hook ex.
///
/// The identifier hook.
/// true if XXXX, false otherwise.
[DllImport(“user32.dll”, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
//抽掉钩子
public static extern bool UnhookWindowsHookEx(int idHook);
///
/// Calls the next hook ex.
///
/// The identifier hook.
/// The n code.
/// The w parameter.
/// The l parameter.
/// System.Int32.
[DllImport(“user32.dll”)]
//调用下一个钩子
public static extern int CallNextHookEx(int idHook, int nCode, int wParam, IntPtr lParam);
///
/// Gets the current thread identifier.
///
/// System.Int32.
[DllImport(“kernel32.dll”)]
public static extern int GetCurrentThreadId();
///
/// Gets the module handle.
///
/// The name.
/// IntPtr.
[DllImport(“kernel32.dll”)]
public static extern IntPtr GetModuleHandle(string name);
#endregion DllImport
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/138955.html原文链接:https://javaforall.cn