Как получить позицию проводника Windows, используя.net?

Я разрабатываю приложение, которое запускается, когда на переднем плане есть окно проводника Windows. Мое приложение вызывает окно (форму), которое будет размещено на экране рядом с открытым проводником Windows (планируется сохранить его чуть ниже параметра поиска).

Но я не получаю ничего, чтобы получить положение окна переднего окна "Windows Explorer".

Есть ли способ прочитать положение текущего окна "Windows Explorer" переднего плана, используя.net?

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

Установите "Разрешить небезопасный код" в Свойствах / Сборке...

Другие вопросы по тегам