2009-05-04 17 views
13

Pencere durumu hakkında bilgi toplayan başka bir uygulama mainWindowhandle verilen bir uygulama yapıyorum. Çocuk pencereleri hakkında bilgi toplarken bir sorunum yok, ancak bir uygulamanın diğer açık pencerelerine veya menülere bile erişemiyorum. Bir uygulamanın tüm pencere tutamaçlarını almanın bir yolu var mı?Uygulamanın Pencere Tutamaçlarını Alın

+0

Kontrol dışarı bu çalışma çözüm: http://stackoverflow.com/a/28055461/1274092 –

cevap

15

Process.MainWindowHandle'un yaptıklarını görüyorsunuz: Sistemdeki her üst düzey pencere için geri arama yöntemini çağıran EnumWindows işlevini çağırmak için P/Invoke işlevini kullanın.

Geri arama sırasında, GetWindowThreadProcessId numaralı telefonu arayın ve pencerenin işlem kimliğini Process.Id ile karşılaştırın; İşlem kimlikleri eşleşirse, pencere tanıtıcısını bir listeye ekleyin.

8

İlk olarak, uygulamanın ana penceresinin windowhandle'ını almanız gerekir.

[DllImport("user32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
static extern bool EnumChildWindows(IntPtr hwndParent, EnumWindowsProc lpEnumFunc, IntPtr lParam); 

private List<IntPtr> GetChildWindows(IntPtr parent) 
{ 
    List<IntPtr> result = new List<IntPtr>(); 
    GCHandle listHandle = GCHandle.Alloc(result); 
    try 
    { 
     EnumWindowProc childProc = new EnumWindowProc(EnumWindow); 
     EnumChildWindows(parent, childProc, GCHandle.ToIntPtr(listHandle)); 
    } 
    finally 
    { 
     if (listHandle.IsAllocated) 
       listHandle.Free(); 
    } 
    return result; 
} 
+0

Mez sorun değil mi'

[DllImport("user32.dll", SetLastError = true)] static extern IntPtr FindWindow(string lpClassName, string lpWindowName); IntPtr hWnd = (IntPtr)FindWindow(windowName, null); 

Bunun üzerine tüm childwindows almak için bu kolu kullanabilirsiniz Çocuk pencereleri alıyorum, bunu kolayca yapabilirim, yapamadığım şey, mainWindow ve childs'ın yanı sıra diğer pencerelere de ulaşabilmektir ... – user361526

+0

Bu, herhangi bir pencere için, ayrıca kendi uygulamasına ait olmayan pencereler için de çalışır. Sorunuzu yanlış anlamış olursam özür dilerim. – Mez

+0

'EnumWindowProc' nereden geliyor? –