2012-03-12 14 views
5

Chciałbym poznać sposób uzyskiwania pozycji okna procesu. Szukałem tego w Internecie, ale bez rezultatów. Dzięki :)Jak uzyskać pozycję okna?

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

Co chcesz z tym zrobić? [Wyjdź z antywirusa z jego oknem :)] –

+0

lol, czy to jedyny sposób na uzyskanie pozycji okna, o której myślisz? – Patryk

Odpowiedz

8

Spróbuj tego:

[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

działa, dziękuję :) – Patryk

+0

To zadziała. Ok. Ale ten kod nie zadziała, gdy notatnik zostanie minilowany na pasku zadań. Powinieneś to sprawdzić. (Proponuję również użyć try-catch, aby uniknąć błędu "Notatnik NIE działa") –

+7

Zmienna człon var ma niepoprawną kolejność. Powinien to być Left, Top, Right Bottom. W przeciwnym razie otrzymasz nieprawidłowe wartości. – 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

Myślę, że znalazłem brakującą część i tam, gdzie błąd zamówienia w części struct; Naprawiłem to ... , ale tak naprawdę nie wiem, jak uzyskać te właściwości dla wszystkich otwartych okien notatnika i jak uzyskać wymiar aktywnego dzięki za pomoc ... – hazem

Powiązane problemy