Подтвердить что ты не робот

Как получить и установить положение окна другого приложения в С#

Как я могу получить и установить позицию другого приложения с помощью С#?

Например, я хотел бы получить верхние левые координаты Notepad (скажем, что он плавает где-то на 100 400), и положение этого окна на 0,0.

Какой самый простой способ достичь этого?

4b9b3361

Ответ 1

Я действительно написал DLL с открытым исходным кодом только для такого рода вещей. Загрузить здесь

Это позволит вам находить, перечислять, изменять размер, перемещать или делать то, что вы хотите для других окон приложений и их элементов управления. Существует также добавленная функциональность для чтения и записи значений/текста окон/элементов управления и нажатия на них событий. В основном это было написано для создания скриншотов экрана - но все исходные коды включены, поэтому все, что вы хотите сделать с окнами, включено там.

Ответ 2

Попробуйте использовать FindWindow (подпись), чтобы получить HWND целевого окна. Затем вы можете использовать SetWindowPos (подпись), чтобы переместить его.

Ответ 3

Для достижения этой цели вам потребуется использовать som P/Invoke interop. Основная идея заключалась бы в том, чтобы сначала найти окно (например, используя EnumWindows function), а затем получить позицию окна с GetWindowRect.

Ответ 4

Полезный ответ Дэвида содержит важнейшие указатели и полезные ссылки.

Чтобы использовать их в автономном примере, который реализует примерный сценарий в вопросе, использование API Windows через P/Invoke (System.Forms не задействовано):

using System;
using System.Runtime.InteropServices; // For the P/Invoke signatures.

public static class PositionWindowDemo
{

    // P/Invoke declarations.

    [DllImport("user32.dll", SetLastError = true)]
    static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

    [DllImport("user32.dll", SetLastError = true)]
    static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);

    const uint SWP_NOSIZE = 0x0001;
    const uint SWP_NOZORDER = 0x0004;

    public static void Main()
    {
        // Find (the first-in-Z-order) Notepad window.
        IntPtr hWnd = FindWindow("Notepad", null);

        // If found, position it.
        if (hWnd != IntPtr.Zero)
        {
            // Move the window to (0,0) without changing its size or position
            // in the Z order.
            SetWindowPos(hWnd, IntPtr.Zero, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
        }
    }

}