3

このSO回答で推奨されているように、 GetTitleBarInfo関数を使用して、特定のウィンドウに閉じるボタンがあるかどうかを判断しようとしています。しかし、関数を呼び出すと、(閉じるボタンの状態を示すはずの)の戻り値は常に0であり、その理由がわかりません。誰かが私がここで間違っていることを知っていますか?あるいは、誰かがこの情報を取得するための別の方法を提案できる場合は、それも役立ちます。ありがとう!rgstate[5]

[DllImport("user32.dll", ExactSpelling = true, SetLastError = true)]
internal static extern IntPtr GetForegroundWindow();

[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool GetTitleBarInfo(IntPtr hwnd, ref TITLEBARINFO pti);

[StructLayout(LayoutKind.Sequential)]
internal struct TITLEBARINFO
{
    public int cbSize;
    public RECT rcTitleBar;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
    public int[] rgstate;
}

IntPtr handle = GetForegroundWindow();
TITLEBARINFO titleBarInfo = new TITLEBARINFO();
titleBarInfo.cbSize = Marshal.SizeOf(titleBarInfo);

if (!GetTitleBarInfo(handle, ref titleBarInfo))
    throw new Win32Exception(Marshal.GetLastWin32Error());

// titleBarInfo.rgstate[5] is always 0 here. Why?

編集:明確にするために、MSDNによると、戻り値はここにリストされている1つ以上の値の組み合わせである必要があります。

4

0 に答える 0