外部アプリケーションの[閉じる]ボタンを無効にしたいときがあります。特に自作のアプリケーションから外部アプリケーションの機能を利用したいときなどに多々状況が発生します。
MENUのウィンドウハンドルを取得できれば実現できます。
サンプル
// [閉じる]ボタンを無効にしたいアプリケーションを起動する
Process p = new Process();
p.StartInfo.FileName = "notepad.exe";
p.Start();
p.WaitForInputIdle(); // アイドル状態まで待つ
IntPtr hMenu = GetSystemMenu(p.MainWindowHandle, 0); // Menuのウィンドウハンドルを取得する
// メニューボタンの無効化
RemoveMenu(hMenu, SC_CLOSE, MF_BYCOMMAND);
RemoveMenu(hMenu, SC_MAXIMIZE, MF_BYCOMMAND);
RemoveMenu(hMenu, SC_MINIMIZE, MF_BYCOMMAND);
RemoveMenu(hMenu, SC_RESTORE, MF_BYCOMMAND);
int menuCnt = GetMenuItemCount(hMenu);
RemoveMenu(hMenu, (uint)menuCnt - 1, MF_BYPOSITION | MF_REMOVE); // 閉じるを消す
RemoveMenu(hMenu, (uint)menuCnt - 2, MF_BYPOSITION | MF_REMOVE); //
DrawMenuBar(hMenu);