>>460
パラメータの指定が間違っています
ControlSend [,Control, Keys, WinTitle, WinText, ExcludeTitle, ExcludeText]

!yを送りたいと言う事であれば、たぶん上書き確認のダイアログだと思うのですが
この手の確認ダイアログは、アクティブ最前面で表示されるので単に Send, y でも大丈夫なはずです

ControlSendでボタンを押すのであればControlに 「Button1」 などのClassNNか 「はい(Y)」 などのテキストを指定してください
送るキーは{Enter}や{Space}などでも構いません
ControlSendはWin32 APIによるGUI以外では、親ウィンドウに対してしか効果がないですが
Win32GUIの場合、フォーカスが対象ウィンドウの別のボタン等にある場合、大抵はフォーカスがあるボタンが指定したControlよりも優先されて押されます
YesNoダイアログの場合、初期状態では通常はNoにフォーカスがあるのでControlSendを送る前にYesにフォーカスをセットする必要があります

また、いずれにせよWinWaitで対象ウィンドウの出現を待ったほうが良いです
その際に、前に書いた時は省きましたがWinWait系のコマンドはタイムアウトを指定しておいた方が良いでしょう
まとめると下記のようになります。firefoxの部分は書き換えてください

; ファイルダイアログで保存を押した後に
WinWait, 名前を付けて保存の確認 ahk_class #32770 ahk_exe firefox.exe, , 2
if(ErrorLevel){
MsgBox, タイムアウトしました
Return
}
ControlFocus, Button1, 名前を付けて保存の確認 ahk_class #32770 ahk_exe firefox.exe
ControlSend, Button1, {Enter}, 名前を付けて保存の確認 ahk_class #32770 ahk_exe firefox.exe