2012-08-10 141 views

回答

1

你可以试试这个PInvoke的电话:

[DllImport("User32")] extern IntPtr GetTopWindow(IntPtr hWnd); 
[DllImport("User32")] extern IntPtr GetNextWindow(IntPtr hWnd, uint wCmd); 

,并以此作为参数

uint GW_HWNDNEXT = 2; 

所以首先得到顶部窗口(或你的)。在那次调用GetNextWindow和一次又一次的结果句柄之后,...所以你会得到所有的窗口

+0

你实际上不能调用'GetNextWindow',因为它是'GetWindow'的子函数(它应该被调用相反),有点误导。 :) – Edgar 2017-04-01 11:47:56

0

您可以使用GetNextWindow函数获取下一个或上一个窗口(z顺序)。

编辑:我刚才在pinvoke.net上看到GetNextWindow是一个宏GetWindow。从pinvoke.net

代码:所以你还不如直接调用GetWindow

[DllImport("user32.dll", SetLastError = true)] 
static extern IntPtr GetWindow(IntPtr hWnd, GetWindow_Cmd uCmd); 

enum GetWindow_Cmd : uint { 
    GW_HWNDFIRST = 0, 
    GW_HWNDLAST = 1, 
    GW_HWNDNEXT = 2, 
    GW_HWNDPREV = 3, 
    GW_OWNER = 4, 
    GW_CHILD = 5, 
    GW_ENABLEDPOPUP = 6 
}