Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >利用两个dll实现全局钩子

利用两个dll实现全局钩子

作者头像
全栈程序员站长
发布于 2022-09-06 05:05:47
发布于 2022-09-06 05:05:47
33500
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

全局消息钩子的钩子函数一定要再dll中,然后启动安装钩子不能在dll中,要是我想在程序开始时安装钩子怎么办。很简单利用两个钩子就行了,只要安装钩子和钩子函数不在同一个dll就行了。

下面请看案例(编译

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
编译环境: vs2010 多字节  已在window7 32位测试通过

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//mouseHook.cpp 钩子函数所在dll
#include <windows.h>

// a sample exported function
#define DEF_PROCESS_NAME "winmine.exe"
#define WIDTH 32
#define HEIGHT 24

HINSTANCE g_hInstance=NULL;
HHOOK g_hHook=NULL;


//窗口坐标转化为雷区坐标
VOID windowPosChangeToMinePos(POINT * pt){
    int y = (pt->x-10)/16+1;
    int x = (pt->y-55)/16+1;
    pt->x = x;
    pt->y = y;
}

BOOL first = TRUE;

BYTE rects[HEIGHT][WIDTH];
HWND window = NULL;
// a sample exported function
//LRESULT是一个数据类型,指的是从窗口程序或者回调函数返回的32位值
//lParam wParam 是宏定义,一般在消息函数中带着两个类型的参数,通常用来存储窗口消息的参数。wParam用来存储小段消息,如标志。lParam 通常用于存储消息所需的对象。
LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam)
{
    char szPath[MAX_PATH]={0,};
    char *p=NULL;
    HWND hWnd;
    int x;
    int y;
    char  xs[MAX_PATH] = {0,};
    char  ys[MAX_PATH] = {0,};
    int i,j;
    byte * temp;
    int tempInt;
    char  byteTemp[2] = {0,};
    if (nCode>=0)
    {
        //0=key press,1=key release
        if (wParam == WM_MOUSEMOVE )//释放键盘按键时
        {
            GetModuleFileNameA(NULL,szPath,MAX_PATH);
            p=strrchr(szPath,'\\');//查找字符在指定字符串中从左面开始的最后一次出现的位置
            
            //比较当前进程名称,若为notepad.exe,则消息不会传递给应用程序(或下一个“钩子”)
            if (!_stricmp(p+1,DEF_PROCESS_NAME)){
                //SetWindowTextA(hWnd,"saolei");
                LPMOUSEHOOKSTRUCT lpMouse=(MOUSEHOOKSTRUCT FAR*)lParam;
                if (first==TRUE)

                {    
                    window = lpMouse->hwnd;
                    first=FALSE;
                }
            
                
                ScreenToClient(lpMouse->hwnd,&lpMouse->pt);
                windowPosChangeToMinePos(&lpMouse->pt);
                x = lpMouse->pt.x;
                y =lpMouse->pt.y;
                if(x>0&&y>0&&window==lpMouse->hwnd){
                    temp= (byte *)0x01005361;
                    for (i=0;i<HEIGHT;i++)
                    {
                        for (j=0;j<WIDTH;j++)
                        {    
                            rects[i][j] = *(temp+i*WIDTH+j);
                        }
                    }
                 tempInt =  rects[x-1][y-1];
                //itoa(tempInt,xs,16);
                /* itoa(x,xs,16);
                itoa(y,ys,10);
                strcat(xs,",");
                strcat(xs,ys);*/
                /*    strcat(xs,",");
                itoa(x,ys,10);
                strcat(xs,ys);
                strcat(xs,",");
                itoa(y,ys,10);
                strcat(xs,ys);*/
                /* itoa((int)lpMouse->hwnd,xs,16);
                 SetWindowTextA(lpMouse->hwnd,xs);*/
                 if (tempInt==0x8f)
                 {
                 SetWindowTextA(lpMouse->hwnd,"扫雷");
                 }
                 else
                 SetWindowTextA(lpMouse->hwnd,"扫蕾");
                
                }
                
                }
        }

    }

    //若非notepad.exe,则调用CallNextHookEx()函数,将消息传递给应用程序(或下一个“钩子”)。
    return CallNextHookEx(g_hHook,nCode,wParam,lParam);

}
LPDWORD lpdwProcessId;
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
    switch (fdwReason)
    {
    case DLL_PROCESS_ATTACH:
        g_hInstance = hinstDLL;
        break;

    case DLL_PROCESS_DETACH:
        break;

    case DLL_THREAD_ATTACH:
    
        // attach to thread
        break;

    case DLL_THREAD_DETACH:

        // detach from thread
        break;
    }
    return TRUE; // succesful
}

#ifdef __cplusplus
extern "C"
{
#endif


    __declspec(dllexport) void HookStart()
    {
        //钩子类型、回调函数地址、实例句柄、线程ID
        g_hHook=SetWindowsHookEx(WH_MOUSE,MouseProc,g_hInstance,0);
    }

    __declspec(dllexport) void HookStop()
    {
        if(g_hHook)
        {
            UnhookWindowsHookEx(g_hHook);
            g_hHook=NULL;
        }
    }

#ifdef __cplusplus
}
#endif
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//middleObject.cpp  生成dll 在dll被加载启动安装钩子
#include <windows.h>
#include <stdio.h>
#include <conio.h>

#define DEF_DLL_NAME "mouseHook.dll"
#define DEF_HOOKSTART "HookStart"
#define DEF_HOOKSTOP "HookStop"

typedef void (*PFN_HOOKSTART)();
typedef void (*PFN_HOOKSTOP)();
HMODULE hDll=NULL;
PFN_HOOKSTART HookStart=NULL;
PFN_HOOKSTOP HookStop=NULL;

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
    switch (fdwReason)
    {
    case DLL_PROCESS_ATTACH:

    

        //加载KeyHook.dll
        hDll=LoadLibraryA(DEF_DLL_NAME);

        //获取导出函数地址
        HookStart=(PFN_HOOKSTART)GetProcAddress(hDll,DEF_HOOKSTART);
    

        //开始钩取
        HookStart();

        break;

    case DLL_PROCESS_DETACH:
        HookStop=(PFN_HOOKSTART)GetProcAddress(hDll,DEF_HOOKSTOP);
        HookStop();
        // detach from process
        break;

    case DLL_THREAD_ATTACH:

        // attach to thread
        break;

    case DLL_THREAD_DETACH:

        // detach from thread
        break;
    }
    return TRUE; // succesful
}
#ifdef __cplusplus
extern "C"
{
#endif

    __declspec(dllexport) void dummy()
    {
        
    }


#ifdef __cplusplus
}
#endif

只要把middleObject.dll加载就可以安装消息钩子了

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/155408.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
华虹半导体三季度收入创历史新高!同比增长39.5%至6.30亿美元
11月10日中午,国内第二大晶圆代工厂华虹半导体发布了2022年第三季度财报。根据财报显示,三季度单季销售收入达6.30亿美元,再创历史新高至,同比增长39.5%,环比增长1.5%;归母净利润为1.04亿美元,同比增长104.5%,环比增长23.8%。
芯智讯
2022/11/22
2200
华虹半导体三季度收入创历史新高!同比增长39.5%至6.30亿美元
国内半导体设备进口额创新高!中微尹志尧:公司进口受限零部件明年100%替代!
8月25日消息,据中国海关数据显示,在日本和荷兰针对半导体设备的出口限制新规生效前,今年6月和7月,中国进口的半导体设备价值总额接近50亿美元,相比去年同期的29亿美元增长了70%。其中大部分进口的半导体设备来自于荷兰和日本。
芯智讯
2023/09/08
3060
国内半导体设备进口额创新高!中微尹志尧:公司进口受限零部件明年100%替代!
SEAJ再度下修日本半导体设备销售额预测,2023年或将同比下滑23%
7月10日消息,受美国对华半导体出口限制以及日本、荷兰两国的半导体设备出口限制新规影响,叠加存储芯片市场持续低迷,使得半导体制造厂商缩减设备投资,日本半导体制造设备协会(SEAJ)第二次大砍 2023 年度日本半导体设备销售额预估,恐将同比下滑23.0%。
芯智讯
2023/08/09
2330
SEAJ再度下修日本半导体设备销售额预测,2023年或将同比下滑23%
5月全球半导体销售额同比大跌21.1%,已连续11个月下滑
7月7日消息,据外媒MarketWatch报导,美国半导体产业协会(SIA)于6日发表报告指出,5月全球半导体销售较去年同期环比下滑21.1%至407亿美元,但较4月的400亿美元微幅上升了1.7%。
芯智讯
2023/08/09
1650
5月全球半导体销售额同比大跌21.1%,已连续11个月下滑
东边日出西边雨,几家欢乐几家愁 — 2022半导体巨头财报汇总
近期,多家半导体厂商先后发布了2022年第四季度及全年财报。总体来看,2022年第四季度及全年财报以业绩下滑为主,亏损者过半,很多企业遭遇了滑铁卢。
AI 电堂
2023/02/23
3580
东边日出西边雨,几家欢乐几家愁 — 2022半导体巨头财报汇总
SIA:2月全球半导体市场大跌20.7%,中国大陆跌幅更高达34.2%!
4月6日,美国半导体产业协会(SIA)公布最新报告,今年2月,全球半导体销售额创下了近14年来最糟糕的表现,较去年同期大跌20%以上,原因是半导体业者在历经疫情2年期间的芯片短缺后,如今正试图摆脱库存过剩的局面。
芯智讯
2023/04/11
2430
SIA:2月全球半导体市场大跌20.7%,中国大陆跌幅更高达34.2%!
受美对华禁令及存储市场下滑影响,SEAJ大砍日本半导体设备销售预估
1月13日消息,据日本半导体制造设备协会(SEAJ)12日公布预测报告指出,因美国去年10月宣布加强对华半导体出口管制,加上存储芯片市场持续低迷(价格下滑),导致半导体厂商对设备投资抱持谨慎姿态,因此将2022年度(2022年4月-2023年3月)日本半导体设备销售额(指日系企业于日本国内及海外的设备销售额)自2022年7月7日预估的40283亿日元(约合人民币2103.7亿元)下修约8.6%至36840亿日元(约合人民币1925.2亿元),使得年度增长降至7.0%。
芯智讯
2023/02/09
2250
日本半导体设备销售额连续5个月下滑,创8个月来新低
3月27日消息,据日本半导体制造设备协会(SEAJ)近日公布的统计数据显示,日本半导体制造设备销售额已经连续5个月呈现环比下滑,月销售额续跌破3,000亿日元大关,创8个月来新低。
芯智讯
2023/04/11
2410
日本半导体设备销售额连续5个月下滑,创8个月来新低
一季度北美半导体设备销售额同比大涨50%,中国大陆同比下滑23%
6月7日,国际半导体产业协会(SEMI)公布的《全球半导体设备市场报告》 (Worldwide Semiconductor Equipment Market Statistics Report, WWSEMS) 指出,2023 年一季度全球半导体设备出货金额达到了268亿美元,同比增长了9%,环比则下滑了3%。
芯智讯
2023/08/09
1770
一季度北美半导体设备销售额同比大涨50%,中国大陆同比下滑23%
2024年晶圆厂设备销售额将增长14.8%,NAND设备将增长59%!
7月14日,国际半导体产业协会(SEMI )于北美国际半导体展(SEMICON West 2023)上公布了《年中整体OEM半导体设备预测报告》。
芯智讯
2023/08/09
2420
2024年晶圆厂设备销售额将增长14.8%,NAND设备将增长59%!
AMD三季度净利暴涨353%,明年AI芯片销售额将超20亿美元!
11月1日消息,美国处理器大厂AMD于美国当地时间10月31日盘后,发布了截至9月30日的第三季度财报。
芯智讯
2023/11/01
2740
AMD三季度净利暴涨353%,明年AI芯片销售额将超20亿美元!
2022Q3全球半导体市场环比下滑7%!英特尔反超三星
11月23日消息,根据市场研究公司Omdia最新公布的数据显示,今年第三季度全球半导体市场规模为1470亿美元,比第二季度的1580亿美元下降了7%。
芯智讯
2022/11/29
2610
全球芯片销售额5月同比下降14.6%,连续5个月负增长
美国半导体协会(SIA)于本周一发布了今年5月份全球半导体的销售情况,数据显示,5月全球半导体的销售额同比下降14.6%至331亿美元,而去年同期为387亿美元,这也是整个行业连续五个月出现负增长。
镁客网
2019/07/11
3840
全球芯片销售额5月同比下降14.6%,连续5个月负增长
日本半导体设备出口额创新高,中国半导体设备进口额锐减
11月25日消息,日本半导体制造装置协会(SEAJ)24日公布了最新的半导体销售数据,显示今年10月日本半导体设备销售同比增长超2成,今年1-10月累计销售额同比增长近3成,创历史新高。
芯智讯
2022/12/09
3470
日本半导体设备出口额创新高,中国半导体设备进口额锐减
2023年全球半导体设备销售额将下滑18.6%!中国大陆为第二大市场
7月12日消息,据国际半导体产业协会(SEMI)发布的最新预测数据显示,2023年全球半导体制造设备销售额恐将同比下滑18.6%,降至874亿美元。
芯智讯
2023/08/09
3650
2023年全球半导体设备销售额将下滑18.6%!中国大陆为第二大市场
受美国新规影响,这家荷兰半导体设备大厂在中国营收将大跌40%!
10月26日消息,荷兰半导体设备供应商ASM International(以下简称“ASMI”)于当地时间周二公布了其2022年第三季度经营业绩(未经审计),显示其第三季度营收创历史新高,但第三季度订单受美国对华出口管制新规影响。ASMI 预计,美国对华新规将影响其在中国 大陆40% 以上的销售额,因此该集团决定减少第三季度的订单和相关积压订单。
芯智讯
2022/10/28
4810
受美国新规影响,这家荷兰半导体设备大厂在中国营收将大跌40%!
2023年全球半导体市场销售额将同比下滑约5%
3月7日消息,据路透引述安联贸易最新的研究报告称,2023年全球半导体市场销售额将同比下滑约5%,而这主要是由于占据了整个半导体市场80%份额的消费电子、PC及通信产业都将会衰减。即便中国大陆需求今年有望回升,但仍无力挽回整个全球市场销售额下滑的窘境。
芯智讯
2023/03/24
2440
2023年全球半导体市场销售额将同比下滑约5%
安森美二季度业绩创纪录!三季度有望保持环比增长
8月2日消息,功率半导体大厂安森美半导体公司(Onsemi)于当地时间8月1日公布了 2022 年第二季度(截至2022 年7 月1 日为止)财报,业绩创下了历史新高。
芯智讯
2022/08/05
2280
安森美二季度业绩创纪录!三季度有望保持环比增长
中国大陆半导体设备市场大涨42%,但国产厂商份额仅5%?
12月4日消息,据日本半导体制造装置协会(SEAJ)于12月1日公布统计数据显示,2023年第三季度(7-9月)全球半导体制造设备销售额较去年同期下滑11%至256亿美元,连续两个季度陷入萎缩,且创下4年来最大降幅。
芯智讯
2023/12/05
4110
中国大陆半导体设备市场大涨42%,但国产厂商份额仅5%?
2022年全球传感器营收将达144亿美元的历史新高!ASP增长超11%
11月18日消息,据IC Insights近日发布的报告称,受“智能”嵌入式控制的普及和市场供应紧张导致售价上涨的推动,预计 2022 年半导体传感器销售额与去年相比将继续实现两位数百分比增长。
芯智讯
2022/11/22
3080
2022年全球传感器营收将达144亿美元的历史新高!ASP增长超11%
推荐阅读
华虹半导体三季度收入创历史新高!同比增长39.5%至6.30亿美元
2200
国内半导体设备进口额创新高!中微尹志尧:公司进口受限零部件明年100%替代!
3060
SEAJ再度下修日本半导体设备销售额预测,2023年或将同比下滑23%
2330
5月全球半导体销售额同比大跌21.1%,已连续11个月下滑
1650
东边日出西边雨,几家欢乐几家愁 — 2022半导体巨头财报汇总
3580
SIA:2月全球半导体市场大跌20.7%,中国大陆跌幅更高达34.2%!
2430
受美对华禁令及存储市场下滑影响,SEAJ大砍日本半导体设备销售预估
2250
日本半导体设备销售额连续5个月下滑,创8个月来新低
2410
一季度北美半导体设备销售额同比大涨50%,中国大陆同比下滑23%
1770
2024年晶圆厂设备销售额将增长14.8%,NAND设备将增长59%!
2420
AMD三季度净利暴涨353%,明年AI芯片销售额将超20亿美元!
2740
2022Q3全球半导体市场环比下滑7%!英特尔反超三星
2610
全球芯片销售额5月同比下降14.6%,连续5个月负增长
3840
日本半导体设备出口额创新高,中国半导体设备进口额锐减
3470
2023年全球半导体设备销售额将下滑18.6%!中国大陆为第二大市场
3650
受美国新规影响,这家荷兰半导体设备大厂在中国营收将大跌40%!
4810
2023年全球半导体市场销售额将同比下滑约5%
2440
安森美二季度业绩创纪录!三季度有望保持环比增长
2280
中国大陆半导体设备市场大涨42%,但国产厂商份额仅5%?
4110
2022年全球传感器营收将达144亿美元的历史新高!ASP增长超11%
3080
相关推荐
华虹半导体三季度收入创历史新高!同比增长39.5%至6.30亿美元
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验