public class Win32API//API函数声明
{
public const int WH_KEYBOARD_LL = 13;
public delegate int HookProcHandler(int nCode, int wParam, IntPtr lParam);
[DllImport("user32.dll")] // 安装钩子
public static extern IntPtr SetWindowsHookEx(int idHook, HookProcHandler lpfn, IntPtr hInstance, int threadId);
[DllImport("user32.dll")]// 卸载钩子
public static extern bool UnhookWindowsHookEx(IntPtr hHook);
[DllImport("kernel32.dll")]
public static extern IntPtr GetModuleHandle(string name);
[DllImport("user32.dll")] //调用下一个钩子
public static extern int CallNextHookEx(IntPtr idHook, int nCode, int wParam, IntPtr lParam);
[StructLayout(LayoutKind.Sequential)]
public class KeyBoardHookStruct //键盘Hook结构
{
public int vkCode;
public int scanCode;
public int flags;
public int time;
public int dwExtraInfo;
}
}
private Win32API.HookProcHandler KeyboardHookProc;
IntPtr hhook = IntPtr.Zero;
private void BeginHook()
{
KeyboardHookProc = new Win32API.HookProcHandler(HookProc);
IntPtr hInstance = Win32API.GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName);
hhook = Win32API.SetWindowsHookEx(Win32API.WH_KEYBOARD_LL, KeyboardHookProc, hInstance, 0);
}
private void EndHook()
{
if (hhook != IntPtr.Zero)
Win32API.UnhookWindowsHookEx(hhook);
}
private int HookProc(int nCode, Int32 wParam, IntPtr lParam)//钩子处理过程
{
if (nCode >= 0)
{
Win32API.KeyBoardHookStruct kbh = (Win32API.KeyBoardHookStruct)Marshal.PtrToStructure(lParam, typeof(Win32API.KeyBoardHookStruct));
switch (kbh.vkCode)
{
case 91://左win
case 92://右win
ShowStarMenu();
return 1;
/*
case (int)Keys.Escape:
{
if (Control.ModifierKeys == Keys.Control)//截获Ctrl+Esc
{
MessageBox.Show("control+esc");
return 1;
}
if ((int)Control.ModifierKeys == (int)Keys.Control + (int)Keys.Shift)//截获Ctrl+Shift+Esc
{
MessageBox.Show("control+shift");
return 1;
}
break;
}
case (int)Keys.F4:
{
if (Control.ModifierKeys == Keys.Alt)//截获alt+f4
{
MessageBox.Show("alt+F4");
return 1;
}
break;
}
case (int)Keys.Tab:
{
if (Control.ModifierKeys == Keys.Alt)//截获alt+tab
{
MessageBox.Show("alt+tab");
return 1;
}
break;
}
case (int)Keys.Space:
{
if (Control.ModifierKeys == Keys.Alt)//截获alt+空格
{
MessageBox.Show("alt+space");
return 1;
}
if ((int)Control.ModifierKeys == (int)Keys.Control + (int)Keys.Alt)//截获control+alt+space
{
MessageBox.Show("control+alt+space");
return 1;
}
break;
}
case 241://截获F1
MessageBox.Show("F1");
return 1;
*/
}
/*
if ((int)Control.ModifierKeys == (int)Keys.Control + (int)Keys.Alt+(int)Keys.Delete)//截获Ctrl+Alt+Delete
{
MessageBox.Show("control+alt+delete");
return 1;
}
if ((int)Control.ModifierKeys == (int)Keys.Control + (int)Keys.Shift)截获Ctrl+Shift
{
MessageBox.Show("control+shift");
return 1;
}
*/
}
return Win32API.CallNextHookEx(hhook, nCode, wParam, lParam);
}
C#之键盘钩子
最新推荐文章于 2024-05-28 13:19:24 发布