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); }