GetWindowRect在编译后返回0,但在调试会话期间不返回

时间:2017-04-15 12:34:14

标签: c# winforms winforms-interop

[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
    public int Left;
    public int Top;
    public int Right;
    public int Bottom;
}
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetWindowRect(IntPtr hWnd, out RECT Rect);

- (进一步在代码中)

Process[] processes = Process.GetProcessesByName("ExternalRunningProgram");
RECT Rect = new RECT();
foreach (Process p in processes)
{
    IntPtr handle = p.MainWindowHandle;
    GetWindowRect(handle, out Rect);
}
MessageBox.Show(string.Format("{0},{1},{2},{3}", Rect.Left, Rect.Right, Rect.Top, Rect.Bottom));

-

在调试会话期间,上面的代码将返回正确的ExternalRunningProgam窗口大小。但是,在没有调试会话的情况下运行时,GetWindowRect()调用将始终返回正常和管理员权限下的上/下/左/右0。

我已经尝试了DllImport行的各种“版本”无济于事,并且不知道是什么导致它只能在调试会话期间工作。

1 个答案:

答案 0 :(得分:0)

问题实际上与上述任何内容无关,而是由于COMODO Auto-Containment(沙盒)