如何使用.net获取Windows资源管理器的位置?
问题描述:
我正在开发一个应用程序,它在前台有一个Windows资源管理器窗口时触发。我的应用程序触发一个窗口(窗体),它将被放置在靠近打开的Windows资源管理器的屏幕上(计划将其保留在搜索选项的下方)。如何使用.net获取Windows资源管理器的位置?
但我没有得到任何东西来获得前台“窗口资源管理器”窗口的窗口位置。
是否有任何方式使用.net读取当前前台“Windows资源管理器”窗口的位置?
答
您可以通过使用非托管代码来完成此操作。
创建一个类:
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;
}
}
然后,确定explorer进程拿起你的手柄,并采取坐标和窗口的大小,并从那里你可以做你想做什么:
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);
}
}
}
设置“允许不安全的代码”的属性/生成...
有本地的Win32 API为您查询正在运行的进程和他们的窗户,所以你应该寻找类似的帖子,然后PInvoke的。 –
@LexLi我已经搜索,但我没有得到任何方法来检索Windows资源管理器的窗口位置。 –