C++编写的钩子函数,用于替换PlaySound()函数

#include <Windows.h>

typedef BOOL(WINAPI* PlaySoundFunc)(LPCTSTR lpszSound, HMODULE hmod, DWORD fdwSound);

PlaySoundFunc g_pOrigPlaySound = nullptr;

BOOL WINAPI MyPlaySound(LPCTSTR lpszSound, HMODULE hmod, DWORD fdwSound)
{
    // 在这里编写你想要替代PlaySound()函数的代码
    // ...

    // 调用原始的PlaySound()函数
    if (g_pOrigPlaySound)
    {
        return g_pOrigPlaySound(lpszSound, hmod, fdwSound);
    }

    return FALSE;
}

HHOOK g_hHook = nullptr;

LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode == HCBT_CREATEWND && wParam == 0)
    {
        HWND hWnd = (HWND)lParam;
        TCHAR szClassName[256];
        if (GetClassName(hWnd, szClassName, sizeof(szClassName) / sizeof(TCHAR)) > 0 &&
            _tcscmp(szClassName, _T("#32770")) == 0) // 对话框窗口类名为"#32770"
        {
            // 在对话框创建时钩取PlaySound()函数
            HMODULE hMod = GetModuleHandle(NULL);
            g_pOrigPlaySound = (PlaySoundFunc)GetProcAddress(hMod, "PlaySoundW");
            if (g_pOrigPlaySound)
            {
                g_hHook = SetWindowsHookEx(WH_CBT, (HOOKPROC)MyPlaySound, hMod, GetCurrentThreadId());
            }
        }
    }
    
    return CallNextHookEx(g_hHook, nCode, wParam, lParam);
}

int main()
{
    // 安装钩子函数
    HHOOK hHook = SetWindowsHookEx(WH_CBT, CBTProc, NULL, GetCurrentThreadId());

    // 运行你的应用程序

    // 卸载钩子函数
    UnhookWindowsHookEx(hHook);

    return 0;
}
 
 ````在这里插入代码片`## 机缘

提示:可以和大家分享最初成为创作者的初心
例如:

1. 实战项目中的经验分享
2. 日常学习过程中的记录
3. 通过文章进行技术交流
4. ...

---

## 收获

提示:在创作的过程中都有哪些收获
例如:

1. 获得了多少粉丝的关注
2. 获得了多少正向的反馈,如赞、评论、阅读量等
3. 认识和哪些志同道合的领域同行
4. ...

---

## 日常

提示:当前创作和你的工作、学习是什么样的关系
例如:

1. 创作是否已经是你生活的一部分了
2. 有限的精力下,如何平衡创作和工作学习
3. ...

---

## 成就
提示:你过去写得最好的一段代码是什么? 请用代码块贴出来
例如:

1. 某个解题代码
2. 某个项目实现代码
3.---

## 憧憬

提示:职业规划、创作规划等​​



**Tips**

 1. 您发布的文章将会展示至  [里程碑专区](https://blog.csdn.net/rank/list/milestone) ,您也可以在   [专区](https://blog.csdn.net/rank/list/milestone)  内查看其他创作者的纪念日文章
 2. 优质的纪念文章将会获得神秘打赏哦



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值