GetWindowLong (または 64 ビットの場合は GetWindowLongPtr) と SetWindowLong (または SetWindowLongPtr) を使用して、過去に多くのウィンドウでシステム メニュー ボタンを無効にしました。Internet Explorer を起動する Citrix セッションを使用していますが、これらのアイテムをタイトル バーから削除できません。通常の非 Citrix の Internet Explorer が開いているときにやりたいことを実行できるため、使用している方法が機能していることはわかっています。Citrix IE セッションのウィンドウ ハンドルを取得することに成功しました。これは、フォーカスしたり、一番上に設定したりできるためです。Get/SetWindowLong を使用したくないだけで、明らかに Citrix と関係があります。属性パラメーターを無視します。最終的には、ウィンドウを操作するために使用される WS_ を渡しますが、これが機能するまで (可能であれば) シンプルに保ちたいだけです。
[DllImport("user32.dll")]
internal extern static long SetWindowLong(int hwnd, int index, long value);
[DllImport("user32.dll")]
internal extern static long GetWindowLong(int hwnd, int index);
public static void SetWindowAttribute(int hwnd, int attribute)
{
IntPtr hwndPtr = new IntPtr(hwnd);
const int GWL_STYLE = -16;
const long WS_MINIMIZEBOX = 0x00020000L;
const long WS_MAXIMIZEBOX = 0x00010000L;
long value = GetWindowLong(hwnd, GWL_STYLE);
Trace.TraceInformation("GetWindowLong value {0}", value.ToString());
long ret = SetWindowLong(hwnd, GWL_STYLE, (value & ~WS_MINIMIZEBOX & ~WS_MAXIMIZEBOX));
Trace.TraceInformation("SetWindowLong reg {0}", ret.ToString());
}