吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 567|回复: 4
收起左侧

[求助] 关于SetWindowsHook设置一个消息hook

[复制链接]
wuyingjie2022 发表于 2024-1-28 21:54
//这是EXE
#include <iostream>
#include <windows.h>
typedef BOOL (*stratHOOK)();
typedef BOOL (*freeHOOK)();
int main()
{
     HMODULE hload= LoadLibrary("Dll14.dll");
         if (hload == NULL)
                 printf("LoadLibrary_erro=%d\n",GetLastError());
         HMODULE hmoudle = GetModuleHandle("Dll14.dll");
         stratHOOK mystratHOOK = (stratHOOK)GetProcAddress(hmoudle,"stratHOOK");
         freeHOOK myfreeHOOK = (freeHOOK)GetProcAddress(hmoudle, "freeHOOK");
         mystratHOOK();       
//         myfreeHOOK();
          system("pause");
          return 0;
}
//这是DLL
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "pch.h"
#include <iostream>
#include "mydll.h"
HMODULE g_hModule;
HHOOK __sethook;
//钩子回调函数
LRESULT Hookproc(
        int  code,
        WPARAM wParam,
        LPARAM lParam
);
//安装钩子
BOOL stratHOOK();
//卸载钩子
BOOL freeHOOK();
/////////////////////////////////////////////////////////

//钩子处理函数
LRESULT Hookproc(
        int  code,
        WPARAM wParam,
        LPARAM lParam
)
{
        if (code == HC_ACTION)
                printf("%c\n", wParam);
        else
                CallNextHookEx
                (NULL,
                 code,
                 wParam,
                 lParam);
        return 0;
}
//安装钩子
BOOL stratHOOK()
{
        __sethook = SetWindowsHookEx(WH_KEYBOARD,
                (HOOKPROC)Hookproc,
                g_hModule, 0);//设置全局消息钩子
        if (__sethook)
        {
           printf("HOOK成功\n");
                return 1;
        }
        else
                return 0;
}
//卸载钩子
BOOL freeHOOK()
{
        UnhookWindowsHookEx(__sethook);
        return 0;
}
/////////////////////////////////////////////////////

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
       
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
                g_hModule = hModule;
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}
问题是程序运行时候不进入   钩子回调函数  LRESULT Hookproc来处理消息,希望大神们指点一二

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
为之奈何? + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

sky27076 发表于 2024-1-29 08:43
SetWindowsHookEx(WH_KEYBOARD,   (HOOKPROC)Hookproc,   g_hModule, 0);//设置全局消息钩子

请注意  WH_KEYBOARD,这个是键盘钩子,不是全局钩子,所以对应的回调函数不能用HC_ACTION

程序写的不对应的。
smallbugbug 发表于 2024-1-29 13:09
 楼主| wuyingjie2022 发表于 2024-1-29 17:16
sky27076 发表于 2024-1-29 08:43
SetWindowsHookEx(WH_KEYBOARD,   (HOOKPROC)Hookproc,   g_hModule, 0);//设置全局消息钩子

请注意  WH ...

setwindowshookex 这个函数能跨进程给另一个进程设置消息钩子吗?还是只能将这个函数封装进一个DLL然后将DLL注入到另一个进程中来来实现对其他进程的操作呢????我个人觉得不能,因为能跨进程操作的API都有一个内核对象,这个函数的参数没有安全描述符
 楼主| wuyingjie2022 发表于 2024-1-29 17:17
sky27076 发表于 2024-1-29 08:43
SetWindowsHookEx(WH_KEYBOARD,   (HOOKPROC)Hookproc,   g_hModule, 0);//设置全局消息钩子

请注意  WH ...

全局钩子与非全局钩子取决于setwindowshook这个函数的最后一个参数,最后的参数ThreadID为0则为全局钩子,如果指定了线程ID那么就不是全局钩子
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-12 12:57

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表