【问题标题】:How to get Windows explorer’s position using .net?如何使用 .net 获取 Windows 资源管理器的位置?
【发布时间】:2016-08-16 07:58:55
【问题描述】:

我正在开发一个应用程序,当前台有一个 Windows 资源管理器窗口时触发。我的应用程序触发了一个窗口(表单),该窗口将放置在屏幕上打开的窗口资源管理器附近(计划将其保留在搜索选项下方)。

但是我没有得到任何东西来获取前台“windows explorer”窗口的窗口位置。

有没有办法使用.net 读取当前前景“Windows Explorer”窗口的位置?

【问题讨论】:

  • 有本地 Win32 API 供您查询正在运行的进程及其窗口,因此您应该搜索类似的帖子,然后 PInvoke。
  • @LexLi 我已经搜索过了,但我没有得到任何方法来检索 Windows 资源管理器的窗口位置。

标签: .net windows-explorer window-position


【解决方案1】:

您可以使用非托管代码来做到这一点。

创建一个类:

    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);
                    }
                }
            }

在属性/构建上设置“允许不安全代码”...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多