ボタンを4つにする方法は聞いたことがありません。
モーダルダイアログ(?)だったかを設置するのが良いでしょう。
ボタンの文字列変更については無理やりできました。
// 注意:システム言語が日本語の環境でのみ動作します。
#uselib "user32.dll"
#cfunc GetWindowThreadProcessId "GetWindowThreadProcessId" int, int
#func FindWindowEx "FindWindowExA" sptr, sptr, sptr, sptr
#func SendMessage "SendMessageA" int, int, int, int
#func SetTimer "SetTimer" int, int, int, int
#func KillTimer "KillTimer" int, int
#define WM_TIMER $00000113
#define WM_SETTEXT $0000000C
BTN_YES = "Hi."
BTN_NO = "Bye."
oncmd gosub *ON_TIMER, WM_TIMER
SetTimer hwnd, 1, 1, 0
dialog "文字列を変更する。", 2, "HSP"
dialog "元の状態に戻る。", 2, "HSP"
SetTimer hwnd, 1, 1, 0
dialog "もう一回変更するにはSetTimerを。", 3, "HSP"
stop
/*
仕組み
まずクラス名やプロセスIDなどから自分の持つダイアログを調べます。
そして発見次第変更を適応します。
ボタンを調べる際に、そのボタンのタイトルを使用しているので日本語
環境でのみ使用可能となります。
*/
*ON_TIMER
ret1_ = GetWindowThreadProcessId( hwnd, 0 )
hwnd_ = 0
repeat
FindWindowEx 0, hwnd_, "#32770", 0
hwnd_ = stat
if hwnd_ = 0 { break }
if GetWindowThreadProcessId( hwnd_, 0) = ret1_ {
; はい について変更
FindWindowEx hwnd_, 0, "Button", "はい(&Y)"
SendMessage stat, WM_SETTEXT, strlen(BTN_YES), varptr(BTN_YES)
; いいえ について変更
FindWindowEx hwnd_, 0, "Button", "いいえ(&N)"
SendMessage stat, WM_SETTEXT, strlen(BTN_NO), varptr(BTN_NO)
; 今回のみ変更させたい
KillTimer hwnd, 1
break
}
loop
return
もっと簡単で確実な方法があるんだろうなあ。