
可以试试,项目裏面新增一个窗体(自定义消息框),然後看下面代码:
using System;using SystemCollectionsGeneric;
using SystemComponentModel;
using SystemData;
using SystemDrawing;
using SystemLinq;
using SystemText;
using SystemWindowsForms;
using SystemDiagnostics;
using SystemRuntimeInteropServices;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//委托
public delegate int HookProc(int nCode, int wParam, IntPtr lParam);
static int hHook = 0;
public const int WH_KEYBOARD_LL = 13;
//LowLevel键盘截获,如果是WH_KEYBOARD=2,并不能对系统键盘截取,Acrobat Reader会在你截取之前获得键盘。
HookProc KeyBoardHookProcedure;
//键盘Hook结构函数
[StructLayout(LayoutKindSequential)]
public class KeyBoardHookStruct
{
public int vkCode;
public int scanCode;
public int flags;
public int time;
public int dwExtraInfo;
}
#region DllImport
//设置钩子
[DllImport("user32dll")]
public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);
[DllImport("user32dll", CharSet = CharSetAuto, CallingConvention = CallingConventionStdCall)]
//抽掉钩子
public static extern bool UnhookWindowsHookEx(int idHook);
[DllImport("user32dll")]
//调用下一个钩子
public static extern int CallNextHookEx(int idHook, int nCode, int wParam, IntPtr lParam);
[DllImport("kernel32dll")]
public static extern int GetCurrentThreadId();
[DllImport("kernel32dll")]
public static extern IntPtr GetModuleHandle(string name);
#endregion
#region 自定义事件
public void Hook_Start()
{
// 安装键盘钩子
if (hHook == 0)
{
KeyBoardHookProcedure = new HookProc(KeyBoardHookProc);
//hHook = SetWindowsHookEx(2,
// KeyBoardHookProcedure,
// GetModuleHandle(ProcessGetCurrentProcess()MainModuleModuleName), GetCurrentThreadId());
hHook = SetWindowsHookEx(WH_KEYBOARD_LL,
KeyBoardHookProcedure,
GetModuleHandle(ProcessGetCurrentProcess()MainModuleModuleName), 0);
//如果设置钩子失败
if (hHook == 0)
{
Hook_Clear();
//throw new Exception("设置Hook失败!");
}
}
}
//取消钩子事件
public void Hook_Clear()
{
bool retKeyboard = true;
if (hHook != 0)
{
retKeyboard = UnhookWindowsHookEx(hHook);
hHook = 0;
}
//如果去掉钩子失败
if (!retKeyboard) throw new Exception("UnhookWindowsHookEx failed");
}
//这里可以添加自己想要的信息处理
public static int KeyBoardHookProc(int nCode, int wParam, IntPtr lParam)
{
if (nCode >= 0)
{
KeyBoardHookStruct kbh = (KeyBoardHookStruct)MarshalPtrToStructure(lParam, typeof(KeyBoardHookStruct));
if (kbhvkCode == (int)KeysS && (int)ControlModifierKeys == (int)KeysControl) // 截获F8
{
//MessageBoxShow("快捷键已拦截!不能保存!");
Form2 form = new Form2();
formTopMost = true;
formActivate();
formShow();
return 1;
}
if (kbhvkCode == (int)KeysY
&& (int)ControlModifierKeys == (int)KeysControl + (int)KeysAlt) //截获Ctrl+Alt+Y
{
//MessageBoxShow("不能全部保存!");
return 1;
}
if (kbhvkCode == (int)KeysX)
{
//MessageBoxShow("不能全部保存!");
Form2 form = new Form2();
formTopMost = true;
formActivate();
formShow();
return 1;
}
}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
#endregion
private void button1_Click(object sender, EventArgs e)
{
Hook_Start();
}
private void button2_Click(object sender, EventArgs e)
{
Hook_Clear();
}
}
}
以上就是关于在dll安装了全局钩子,hook openprocess的部分不能运行全部的内容,包括:在dll安装了全局钩子,hook openprocess的部分不能运行、c++如何用hook禁用鼠标如何让编写、hook技术需要了解windows消息机制吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)