2012-03-12 23 views
5

Pencerenin pozisyon alma sürecini bilmek istiyorum. Bunu internette aradım ama sonuçsuz. Teşekkür :)Pencerenin konumu nasıl alınır?

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-başka-uygulama-c-keskin –

+0

Onunla ne yapmak istiyorsun? –

+0

lol, [Onun pencere ile antivirüs çıkmak :)], pencere düşünme pozisyonu için sadece kullanabileceğiniz bu mu? – Patryk

cevap

8

bu deneyin:

[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

çalışıyor, teşekkürler :) – Patryk

+0

Çalışacak. Tamam. Ancak, not defteri görev çubuğuna minized olduğunda bu kod çalışmaz. Bunu kontrol etmelisin. (Ayrıca, "notepad çalışmıyor" hata önlemek için try-catch kullanmanızı öneririz) –

+7

Rect üye var yanlış sırada. Sol, Üst, Sağ Alt olmalıdır. Aksi takdirde yanlış değerler elde edersiniz. – 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

Sanırım eksik parçayı buldum ve burada yapı kısmında sipariş hatası var; Ben düzeltmek var ... ama aslında tüm açık notepad pencereleri için bu özelliği nasıl elde edeceğini ve nasıl aktif bir boyutuna nasıl yardımcı olduğunu bilmiyorum ... – hazem

İlgili konular