Windows HOOK改变MessageBox按钮文本

Windows HOOK改变MessageBox按钮文本

作者: yym439 时间: 2021-08-18

一、使用场景

  1. 修改按钮文本
  2. 不想自己写一个窗口实现MessageBox
  3. 有时只想要简单弹窗,而文字提示不想用Windows默认的

MessageBox上的按钮文字不能直接修改。一种方法可以使用钩子,间接修改按钮上的文字

二、HOOK修改MessageBox按钮文本

// 定义CBT钩子过程
LRESULT CALLBACK MsgBoxCBTProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    switch (nCode) {
    case HCBT_ACTIVATE:
        HWND hWnd = (HWND)wParam;
        SetDlgItemText(hWnd, IDYES, _T("接受"));
        SetDlgItemText(hWnd, IDNO, _T("拒绝"));
        SetDlgItemText(hWnd, IDCANCEL, _T("取消"));
    }
    return 0;
}
 
// 定义一个 MsgBox 函数
int MsgBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)
{
    HHOOK hMsgBoxHook = SetWindowsHookEx(WH_CBT, MsgBoxCBTProc, NULL, GetCurrentThreadId());
    int ret = MessageBox(hWnd, lpText, lpCaption, uType);
    UnhookWindowsHookEx(hMsgBoxHook);
    return ret;
}
 
int WINAPI WinMain(HINSTANCE hinstance,
				   HINSTANCE hprevinstance,
				   LPSTR lpcmdline,
				   int ncmdshow)
{
    //调用MsgBox
    MsgBox(NULL,_T("helloworld?"),_T("IL&RL"),MB_ICONQUESTION | MB_YESNOCANCEL);
    return 0;
}

三、参考博客

HOOK详解

Windows Hook

HOOK技术