2009-09-01 5 views

Trả lời

26

Tôi thực sự đã viết một DLL nguồn mở chỉ dành cho loại điều này. Download Here

Điều này sẽ cho phép bạn tìm, liệt kê, thay đổi kích thước, đặt lại vị trí hoặc làm bất cứ điều gì bạn muốn với các cửa sổ ứng dụng khác và các điều khiển của chúng. Ngoài ra còn có chức năng bổ sung để đọc và ghi các giá trị/văn bản của cửa sổ/điều khiển và nhấp vào các sự kiện trên chúng. Về cơ bản nó được viết để làm màn hình cạo với - nhưng tất cả các mã nguồn được bao gồm vì vậy tất cả mọi thứ bạn muốn làm với các cửa sổ được bao gồm ở đó.

+1

Cảm ơn nguồn! :) Nó cực kỳ hữu ích. –

+1

@DataDink, bạn có chuyển thư viện này sang GitHub không? – Theraot

+0

đặt tên dự án: WindowScrape. Nó hiện có sẵn tại đây: http://code.google.com/p/lol-mastery-tool/source/browse/LOL+Mastery+Tool/WindowScrape.dll?r=b88d6a538d88e052a88c69ffb70aaa09fc4a735e với nguồn có sẵn: https: // bitbucket .org/crwilcox/turbo-click/commits/89a687df7511490effb22ad3fc3e48fc9ab8c47a # chg-WindowScrape/ReadMe.txt Một số nội dung của nó là readme, cho các tìm kiếm trong tương lai 'Lớp HwndObject gói gọn một số chức năng xung quanh cửa sổ xử lý đối tượng UI.' – mbrownnyc

4

Bạn sẽ cần phải sử dụng som P/Gọi interop để đạt được điều này. Ý tưởng cơ bản sẽ là tìm cửa sổ đầu tiên (ví dụ, sử dụng EnumWindows function), và sau đó nhận được vị trí cửa sổ với GetWindowRect.

3

David's helpful answer cung cấp các con trỏ quan trọng và liên kết hữu ích.

Để đưa vào sử dụng trong một ví dụ khép kín mà thực hiện kịch bản mẫu trong câu hỏi, sử dụng API Windows thông qua P/Invoke (System.Windows.Formskhông tham gia):

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

}