2008-09-26 9 views
7

¿Es posible que una aplicación .NET agarre todos los identificadores de ventana actualmente abiertos y mueva/cambie el tamaño de estas ventanas?¿Tomar y mover ventanas de aplicaciones desde una aplicación .NET?

Estoy bastante seguro de que es posible usar P/Invoke, pero me preguntaba si había algunas envolturas de código administrado para esta funcionalidad.

+0

Utilice un Mechanical Turk - sólo aparecerá un cuadro de mensaje y pedir al usuario que lo haga por usted. Asegúrese de proporcionar instrucciones detalladas. : P Lo siento, solo me divierto aquí ... –

Respuesta

14

Sí, es posible con la API de Windows.

Esta entrada no tiene información sobre cómo obtener toda la ventana se encarga de los procesos activos: http://www.c-sharpcorner.com/Forums/ShowMessages.aspx?ThreadID=35545

using System; 
using System.Diagnostics; 

class Program 
{ 
    static void Main() 
    { 
     Process[] procs = Process.GetProcesses(); 
     IntPtr hWnd; 
     foreach(Process proc in procs) 
     { 
      if ((hWnd = proc.MainWindowHandle) != IntPtr.Zero) 
      { 
      Console.WriteLine("{0} : {1}", proc.ProcessName, hWnd); 
      } 
     }   
    } 
} 

y luego se puede mover la ventana usando la API de Windows: http://www.devasp.net/net/articles/display/689.html

[DllImport("User32.dll", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)] 
     private static extern bool MoveWindow(IntPtr hWnd, int x, int y, int cx, int cy, bool repaint); 

... 

MoveWindow((IntPtr)handle, (trackBar1.Value*80), 20 , (trackBar1.Value*80)-800, 120, true); 

Éstos son el parámetros para la función MoveWindow:

Para moverse la ventana, utilizamos la función MoveWindow, que toma el identificador de ventana, las coordenadas para la esquina superior, así como la anchura y la altura deseada de la ventana , basado en la pantalla coordenadas. La función MoveWindow se define como:

MoveWindow (HWND hWnd, int nX, int nY, int nWidth, int nHeight, BOOL bRepaint);

La bandera bRepaint determina si el área de cliente debe ser invalidado, causando un mensaje WM_PAINT que se enviará, permitiendo el área de cliente para ser pintada. Como un lado, la pantalla coordenadas se pueden obtuvieron utilizando una llamada similar a GetClientRect (GetDesktopWindow(), & rcDesktop) con rcDesktop ser una variable de tipo RECT, aprobada por referencia.

(http://windows-programming.suite101.com/article.cfm/client_area_size_with_movewindow)

+0

+1 buena respuesta. –

Cuestiones relacionadas