SetWindowsHookEx为某个进程安装钩子

HMODULE GetModuleHandle (LPCTSTRlpModuleName);
功能说明

获取一个特定的应用程序或动态链接库的模块句柄,且这个模块必须已经被加载到调用者的进程空间中,否则调用LoadLibrary

GetModuleHandle(NULL);
这将返回自身应用程序句柄(好像一直是0x40000000,和GetCurrentProcess(一直是0xFFFFFFFF)是不一样的,一个是模块一个进程,用在不同的地方)即使是在模块内,返回的也是调用它的应用程序的句柄,而不是模块本身的句柄。


要在模块中获得模块本身的句柄,可以通过如下函数获得,该函数通过模块内的函数获得模块的句柄

HMODULE ModuleFromAddress(PVOID pv) 
{
MEMORY_BASIC_INFORMATION mbi;
if(::VirtualQuery(pv, &mbi, sizeof(mbi)) != 0)
{

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用C++安装钩子来监控串口通信,你可以使用Windows API中的串口通信函数和钩子函数来实现。下面是一个示例代码,用于安装钩子来监控串口通信: ```cpp #include <iostream> #include <Windows.h> HHOOK g_hookHandle; // 全局钩子句柄 LRESULT CALLBACK SerialPortHookProc(int code, WPARAM wParam, LPARAM lParam) { if (code >= 0) { if (wParam == HC_ACTION) // 监听串口通信事件 { PMSG pMsg = reinterpret_cast<PMSG>(lParam); if (pMsg->message == WM_COMMNOTIFY) // 检查通信通知消息 { // 在这里可以获取串口通信相关信息并进行自定义操作 std::cout << "Serial port communication event detected!" << std::endl; } } } return CallNextHookEx(g_hookHandle, code, wParam, lParam); } int main() { // 安装钩子 g_hookHandle = SetWindowsHookEx(WH_GETMESSAGE, SerialPortHookProc, NULL, GetCurrentThreadId()); if (g_hookHandle == NULL) { std::cout << "Failed to install hook!" << std::endl; return -1; } std::cout << "Serial port hook installed. Press any key to exit." << std::endl; std::cin.get(); // 卸载钩子 UnhookWindowsHookEx(g_hookHandle); return 0; } ``` 这个示例代码使用`SetWindowsHookEx`函数安装一个全局的钩子来拦截串口通信事件。钩子处理函数中,我们检查钩子事件的消息类型,如果是串口通信相关的消息(如`WM_COMMNOTIFY`),则可以获取相关信息并进行自定义操作。 请注意,为了安装全局钩子,程序需要具有管理员权限。另外,这个示例只是演示了如何安装钩子来监控串口通信,具体的操作和处理逻辑需要根据你的实际需求来进行调整。 希望这个示例对你有所帮助!如果你还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值