c# window window-position

Cómo obtener y establecer la posición de la ventana de otra aplicación en C#



window window-position (4)

En realidad escribí una DLL de código abierto para este tipo de cosas. Descarga aquí

Esto le permitirá encontrar, enumerar, redimensionar, reposicionar o hacer lo que quiera con otras ventanas de aplicaciones y sus controles. También se agrega funcionalidad para leer y escribir los valores / texto de las ventanas / controles y hacer clic en los eventos en ellos. Básicamente, fue escrito para hacer el raspado de la pantalla con, pero se incluye todo el código fuente, por lo que todo lo que quieres hacer con las ventanas se incluye allí.

¿Cómo puedo obtener y establecer la posición de otra aplicación utilizando C #?

Por ejemplo, me gustaría obtener las coordenadas de la parte superior izquierda del Bloc de notas (digamos que está flotando en algún lugar a 100,400) y la posición de esta ventana en 0,0.

¿Cuál es la forma más fácil de lograr esto?



Necesitará usar alguna interoperabilidad P / Invoke para lograr esto. La idea básica sería encontrar la ventana primero (por ejemplo, usando la función EnumWindows ) y luego obtener la posición de la ventana con GetWindowRect .


La respuesta útil de David proporciona los indicadores cruciales y los enlaces útiles.

Para ponerlos en uso en un ejemplo autocontenido que implemente el escenario de muestra en la pregunta, use la API de Windows a través de P / Invoke ( System.Windows.Forms no está involucrado):

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