入门
普及-
普及
普及+/提高-
提高
提高+/省选-
省选/NOI-
NOI/NOI+/CTS
#include <windows.h>
#include <tchar.h>
//全局钩子句柄
HHOOK hHook = NULL;
// 钩子回调函数
LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam) {
if (nCode == HCBT_ACTIVATE) {
// wParam 是消息框的窗口句柄
HWND hMsgBox = (HWND)wParam;
// 修改按钮文本
// IDOK = 1, IDCANCEL = 2, IDYES = 6, IDNO = 7 等
SetDlgItemText(hMsgBox, IDOK, TEXT("好的"));
SetDlgItemText(hMsgBox, IDCANCEL, TEXT("可以"));
// 如果有 YES/NO 按钮,也可以修改
// SetDlgItemText(hMsgBox, IDYES, TEXT("同意"));
// SetDlgItemText(hMsgBox, IDNO, TEXT("拒绝"));
// 修改完成后立即卸载钩子
UnhookWindowsHookEx(hHook);
hHook = NULL;
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
// 封装自定义 MessageBox 函数
int CustomMessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType) {
// 安装钩子,只监视当前线程
hHook = SetWindowsHookEx(WH_CBT, CBTProc, NULL, GetCurrentThreadId());
// 弹出标准消息框
int result = MessageBox(hWnd, lpText, lpCaption, uType);
// 确保钩子已卸载(防止异常情况下未进入回调)
if (hHook != NULL) {
UnhookWindowsHookEx(hHook);
hHook = NULL;
}
return result;
}
// 使用示例
int main() {
// 需要包含 MB_OKCANCEL 等标志才能看到对应的按钮
while(1)CustomMessageBox(NULL, TEXT("继续显示"), TEXT("提示"), MB_OKCANCEL);
return 0;
}