【发布时间】:2013-11-30 09:42:01
【问题描述】:
我对@987654324@ 有一个非常奇怪的问题,我已经尝试了几个小时不同的事情,但我没有得到它。我正在尝试获取任务栏位置。它在 Windows 8 上运行良好,但在 Windows Server 上返回值为SHAppBarMessage。
an answer 中的以下代码在 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;
}
我完全没有想法。因为它应该按原样工作。但我不知道为什么它不起作用。我错过了什么吗?
【问题讨论】:
-
您是否尝试过重新安装 Windows?
-
No not尚未尝试先弄清楚。
-
不知道是不是默认,但是pinvoke.net在
APPBARDATA和APPBARDATA和pinvoke.net/default.aspx/shell32/APPBARDATA.html上有一个StructLayoutAttribute -
我也尝试过,事实上最初我的电话是使用 StructLayout。正如我所说,一直在研究它,所以我已经尝试了所有可能想到的东西或通过互联网找到它。
-
如果你明确地在 AnyCPU/x86/x64 架构上运行它会发生什么?
标签: .net c#-4.0 windows-server-2008-r2 taskbar shell32