把程序文件(假设为CNC。DLL)的文件复制到安装目录的chook下(如C:\Mcam9\Chooks)进入系统设置中,如图:
在列表中,选择你的CNC.Dll程序文件,点 find key 给你的程序设置一个快捷键,不能用系统中已设定过的键,如有重叠,会设置不成功,设置完后保存设置,按快捷键就可以调用了。
这个有点难,而且做出来也需要时间,我没有时间做,给你一点资料吧:捕捉所有进程关闭的消息,用SetWindowsHookEx挂钩到全局钩子,SetWindowsHookEx函数的资料
SetWindowsHookEx(
idHook: Integer {钩子类型}
lpfn: TFNHookProc{函数指针}
hmod: HINST {包含钩子函数的模块(EXE、DLL)句柄一般是 HInstance如果是当前线程这里可以是 0}
dwThreadId: DWORD {关联的线程可用 GetCurrentThreadId 获取当前线程0 表示是系统级钩子}
): HHOOK {返回钩子的句柄0 表示失败}
//钩子类型 idHook 选项:
WH_MSGFILTER = -1{线程级截获用户与控件交互的消息}
WH_JOURNALRECORD = 0 {系统级记录所有消息队列从消息队列送出的输入消息, 在消息从队列中清除时发生可用于宏记录}
WH_JOURNALPLAYBACK = 1 {系统级回放由 WH_JOURNALRECORD 记录的消息, 也就是将这些消息重新送入消息队列}
WH_KEYBOARD= 2 {系统级或线程级截获键盘消息}
WH_GETMESSAGE = 3 {系统级或线程级截获从消息队列送出的消息}
WH_CALLWNDPROC = 4 {系统级或线程级截获发送到目标窗口的消息, 在 SendMessage 调用时发生}
WH_CBT = 5 {系统级或线程级截获系统基本消息, 譬如: 窗口的创建、激活、关闭、最大最小化、移动等等}
WH_SYSMSGFILTER= 6 {系统级截获系统范围内用户与控件交互的消息}
WH_MOUSE = 7 {系统级或线程级截获鼠标消息}
WH_HARDWARE= 8 {系统级或线程级截获非标准硬件(非鼠标、键盘)的消息}
WH_DEBUG = 9 {系统级或线程级在其他钩子调用前调用, 用于调试钩子}
WH_SHELL = 10{系统级或线程级截获发向外壳应用程序的消息}
WH_FOREGROUNDIDLE = 11{系统级或线程级在程序前台线程空闲时调用}
WH_CALLWNDPROCRET = 12{系统级或线程级截获目标窗口处理完毕的消息, 在 SendMessage 调用后发生}
这里有一个示例程序:
http://blog.sina.com.cn/s/blog_56dee71a010007h1.html
在 C++ 中,可以使用“指针”来读取 EAX 寄存器的值。可以使用以下代码示例:```cpp
DWORD WINAPI HookProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
DWORD dwValue
__asm mov dwValue, eax
// 其他 *** 作
}
HHOOK hHook = SetWindowsHookEx(WH_GETMESSAGE, HookProc, NULL, GetCurrentThreadId())
```
注意,在使用 `__asm` 的代码段之前需要先声明 `dwValue` 变量。当 Hook 处理函数被调用时,它将自动执行以读取 EAX 寄存器的值。将此值保存在本地变量中,您可以随后将它用于后续的 *** 作。
还有一种方法是使用指向 Hook 处理函数的指针,您可以将此指针传递到 C/C++ 编译器中。在 Hook 处理函数中,您可以将指针转换为函数来读取 EAX 寄存器的值。示例代码如下:
```cpp
DWORD WINAPI HookProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
typedef DWORD(WINAPI *lpTargetFunc)(HWND, UINT, WPARAM, LPARAM)
lpTargetFunc pTargetFunc = (lpTargetFunc)&TargetFunction
DWORD dwValue
__asm
{
call pTargetFunc
mov dwValue, eax
}
// 其他 *** 作
}
HHOOK hHook = SetWindowsHookEx(WH_GETMESSAGE, HookProc, NULL, GetCurrentThreadId())
```
在这个例子中,`TargetFunction` 是您想要 Hook 的函数名称。通过将其指针转换为 `lpTargetFunc` 指针类型,您可以将其作为函数调用。在 Hook 处理函数的汇编代码部分中,将执行目标函数并将 EAX 寄存器的值保存在 `dwValue` 变量中。
注意,使用 Hook 来读取寄存器的值可能存在一些安全风险,应该在必要时使用并遵循相关的安全指南。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)