で本当に奇妙な問題が発生しSHAppBarMessage
ています。数時間さまざまなことを試していますが、うまくいきません。TaskBar の位置を取得しようとしています。Windows 8 では問題なく動作しますが、Windows Server では戻り値はSHAppBarMessage
.
回答からの次のコードは、 Windows 8 では問題なく動作しますが、Windows 2008R2 では奇妙な動作をします。
public static System.Drawing.Rectangle GetTaskbarPosition()
{
var data = new APPBARDATA();
data.cbSize = System.Runtime.InteropServices.Marshal.SizeOf(data);
IntPtr retval = SHAppBarMessage(ABM_GETTASKBARPOS, ref data);
if (retval == IntPtr.Zero) throw new Exception("Please re-install Windows");
return new System.Drawing.Rectangle(data.rc.left, data.rc.top,
data.rc.right - data.rc.left, data.rc.bottom - data.rc.top);
}
// P/Invoke goo:
private const int ABM_GETTASKBARPOS = 5;
[System.Runtime.InteropServices.DllImport("shell32.dll")]
private static extern IntPtr SHAppBarMessage(int msg, ref APPBARDATA data);
private struct APPBARDATA
{
public int cbSize;
public IntPtr hWnd;
public int uCallbackMessage;
public int uEdge;
public RECT rc;
public IntPtr lParam;
}
private struct RECT
{
public int left, top, right, bottom;
}
私は完全にアイデアがありません。そのまま動作するはずです。しかし、なぜそれが機能しないのかわかりません。何か不足していますか?