2009-09-01 13 views

Respuesta

26

De hecho, escribí una DLL de código abierto solo para este tipo de cosas. Download Here

Esto le permitirá buscar, enumerar, cambiar el tamaño, cambiar la posición o hacer lo que desee a otras ventanas de la aplicación y sus controles. También hay una funcionalidad adicional para leer y escribir los valores/texto de las ventanas/controles y hacer clic en eventos en ellos. Básicamente fue escrito para hacer raspado de pantalla con - pero todo el código fuente está incluido así que todo lo que quieras hacer con las ventanas está incluido allí.

+1

Gracias por la ¡fuente! :) Es extremadamente útil. –

+1

@DataDink, ¿moverías esta biblioteca a GitHub? – Theraot

+0

localizó el nombre del proyecto: WindowScrape. Actualmente está disponible aquí: http://code.google.com/p/lol-mastery-tool/source/browse/LOL+Mastery+Tool/WindowScrape.dll?r=b88d6a538d88e052a88c69ffb70aaa09fc4a735e con la fuente disponible: https: // bitbucket .org/crwilcox/turbo-click/commits/89a687df7511490effb22ad3fc3e48fc9ab8c47a # chg-WindowScrape/ReadMe.txt Algunos contenidos de su archivo Léame, para búsquedas futuras 'La clase HwndObject encapsula un conjunto de funcionalidades alrededor de un identificador de Windows a un objeto UI. – mbrownnyc

4

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

3

David's helpful answer proporciona los punteros cruciales y enlaces útiles.

Para ponerlos en uso en un ejemplo de auto-contenido que implementa el escenario de ejemplo en la pregunta, el uso de la API de Windows a través de P/Invoke (System.Windows.Forms es no involucrados):

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

} 
Cuestiones relacionadas