SetWindowsHookEx()/UnhookWindowsHookEx()を使ってフックして対応
//////////////////////////////////////////////////////////////////
// フックハンドル用の変数をグローバルで宣言する。
HHOOK MyHookHandle; // フックハンドル変数
// OKの文字列と、キャンセルの文字列
// ボタンの文字を変更したい場合はここを変更してください
LPCSTR strYes = "Yes(Hook)"; // はいボタンの文字
LPCSTR strNo = "No(Hook)"; // いいえボタンの文字
LPCSTR strCancel = "Cancel(Hook)"; // キャンセルボタンの文字
// プロトタイプ宣言
LRESULT CALLBACK MsgBoxHookProc (int nCode, WPARAM wParam ,LPARAM lParam );
int MessageBoxHooked(HWND handle , LPCSTR message ,LPCSTR title, UINT nType ;
////////////////////////////////////////////////////////////////////
// メッセージボックス書き換えのための
// フック関数(ローカルフック用)
// ※ グローバル関数である必要があります。
// この関数の中を変えるときは慎重に行って下さい。
LRESULT CALLBACK MsgBoxHookProc (int nCode, WPARAM wParam ,LPARAM lParam )
{
// コード判断
if (nCode >= 0)
{
if ( nCode == HCBT_ACTIVATE)
{
// はいボタン(IDYES)の内容を書き換える
SetDlgItemText( ( HWND )wParam, IDYES, strYes );
// いいえボタン(IDNO)の内容を書き換える
SetDlgItemText( ( HWND )wParam, IDNO, strNo );
// キャンセルボタン(IDCANCEL)の内容を書き換える
SetDlgItemText( ( HWND )wParam, IDCANCEL, strCancel );
HRESULT ret;
// フック関数をアンインストール(フック解除!)
ret = UnhookWindowsHookEx ( MyHookHandle );
}
}
// 次のフックに渡す
return CallNextHookEx ( MyHookHandle, nCode, wParam, lParam);
}
/////////////////////////////////////////////////////////////////////
// MessageBoxHooked(メッセージ,
int MessageBoxHooked(HWND handle , LPCSTR message ,LPCSTR title, UINT nType )
{
// フック関数(MsgBoxHookProc)をインストールする SetWindowHookEx
MyHookHandle = SetWindowsHookEx ( WH_CBT, MsgBoxHookProc, NULL, GetCurrentThreadId( ) );
return ( MessageBox(handle,message, title,nType) );
//return MessageBox("フックメッセージボックス", "HookedMsgBox",MB_OKCANCEL);
}