2012-03-12 32 views
5

Tôi muốn biết cách nhận được vị trí cửa sổ xử lý. Tôi đã tìm kiếm điều đó trên internet nhưng không có kết quả. Cảm ơn :)Làm thế nào để có được vị trí của cửa sổ?

Process[] processes = Process.GetProcessesByName("notepad"); 
Process lol = processes[0]; 

IntPtr p = lol.MainWindowHandle; 
+2

Dup - http://stackoverflow.com/questions/1364440/how-to-get-and-set-window-position- of-another-application-in-c-sharp –

+0

Bạn muốn làm gì với ứng dụng này? [Thoát khỏi antivirus với cửa sổ của mình :)] –

+0

lol, đó là sử dụng duy nhất để có được vị trí của cửa sổ bạn có thể nghĩ đến? – Patryk

Trả lời

8

Hãy thử điều này:

[DllImport("user32.dll", CharSet = CharSet.Auto)] 
public static extern IntPtr FindWindow(string strClassName, string strWindowName); 

[DllImport("user32.dll")] 
public static extern bool GetWindowRect(IntPtr hwnd, ref Rect rectangle); 

public struct Rect { 
    public int Left { get; set; } 
    public int Top { get; set; } 
    public int Right { get; set; } 
    public int Bottom { get; set; } 
} 

Process[] processes = Process.GetProcessesByName("notepad"); 
Process lol = processes[0]; 
IntPtr ptr = lol.MainWindowHandle; 
Rect NotepadRect = new Rect(); 
GetWindowRect(ptr, ref NotepadRect); 
+0

hoạt động, cảm ơn bạn :) – Patryk

+0

Nó sẽ hoạt động. Được. Nhưng mã này sẽ không hoạt động khi notepad đã được thu nhỏ vào thanh tác vụ. Bạn nên kiểm tra điều đó. (Ngoài ra, tôi đề nghị sử dụng try-catch để tránh lỗi "notepad NOT NOT running") –

+7

var thành viên Rect có thứ tự sai. Nó phải là trái, trên, dưới cùng bên phải. Nếu không, bạn sẽ nhận được các giá trị không chính xác. – Nick

1
using System.Runtime.InteropServices; 
using System.Diagnostics; 


public class GetNotePadLocation 
{ 

    [DllImport("user32.dll", CharSet = CharSet.Auto)] 
    public static extern IntPtr FindWindow(string strClassName, string strWindowName); 

    [DllImport("user32.dll")] 
    public static extern bool GetWindowRect(IntPtr hwnd, ref Rect rectangle); 

    public struct Rect 
    { 
     public int Left { get; set; } 
     public int Top { get; set; } 
     public int Right { get; set; } 
     public int Bottom { get; set; } 
    } 
    public static void NotePadLocation() 
    { 
     Process[] processes = Process.GetProcessesByName("notepad"); 
     Process lol = processes[0]; 
     IntPtr ptr = lol.MainWindowHandle; 
     Rect NotepadRect = new Rect(); 
     GetWindowRect(ptr, ref NotepadRect); 
    } 
} 
+0

Tôi nghĩ rằng tôi đã tìm thấy phần còn thiếu và ở đó lỗi đặt hàng trong phần cấu trúc; Tôi đã sửa chữa nó ... nhưng tôi thực sự không biết làm thế nào để có được những tài sản cho tất cả các cửa sổ notepad mở và làm thế nào để có được kích thước của một hoạt động nhờ sự giúp đỡ ... – hazem

Các vấn đề liên quan