MessageBoxのはい/いいえ/キャンセルの文字を変更する

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

}

ネタ元