我正在开发一个应用程序,当前台有一个 Windows 资源管理器窗口时触发。我的应用程序触发了一个窗口(表单),该窗口将放置在打开的窗口资源管理器附近的屏幕上(计划将其保留在搜索选项下方)。
但是我没有得到任何东西来获取前景“windows explorer”窗口的窗口位置。
有没有办法使用 .net 读取当前前景“Windows Explorer”窗口的位置?
我正在开发一个应用程序,当前台有一个 Windows 资源管理器窗口时触发。我的应用程序触发了一个窗口(表单),该窗口将放置在打开的窗口资源管理器附近的屏幕上(计划将其保留在搜索选项下方)。
但是我没有得到任何东西来获取前景“windows explorer”窗口的窗口位置。
有没有办法使用 .net 读取当前前景“Windows Explorer”窗口的位置?
您可以通过使用非托管代码来做到这一点。
创建一个类:
class RectMethods
{
// http://msdn.microsoft.com/en-us/library/ms633519(VS.85).aspx
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect);
// http://msdn.microsoft.com/en-us/library/a5ch4fda(VS.80).aspx
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}
}
然后,确定资源管理器进程以获取您的句柄,并获取窗口的坐标和大小,然后您可以从那里做您想做的事情:
var processes = System.Diagnostics.Process.GetProcesses();
foreach (var process in processes)
{
if (process.ProcessName == "explorer")
{
var hWnd = process.Handle;
RectMethods.RECT rect = new RectMethods.RECT();
if (RectMethods.GetWindowRect(hWnd, ref rect))
{
Size size = new Size(rect.Right - rect.Left,
rect.Bottom - rect.Top);
}
}
}
在属性/构建上设置“允许不安全代码”...