我需要捕获第三方进程的特定窗口。我可以找到主窗口句柄作为Process.MainWindowHandle,但我可以用它来列出其他窗口?
我正在使用C#/ .NET
答案 0 :(得分:3)
答案 1 :(得分:3)
EnumChildWindows功能可能会帮助您。儿童窗户也可能有孩子等等。
此处的另一篇文章包含更多详情:Get handles to all windows of a process
答案 2 :(得分:3)
第三方应用程序启动其他窗口而不是作为子窗口。
使用Visual Studio附带的Spy ++工具可以找出什么是结构。
在此之后,我能够使用WindowClassName(取自Spy ++)使用FindWindowEx函数找到必要的窗口: lastWindows = FindWindowEx(IntPtr.Zero,lastWindows,m.WindowClassName,null);
答案 3 :(得分:2)
使用Win32 API EnumWindows(如果您需要EnumChildWindows)
[DllImport("user32.dll", CharSet=CharSet.Auto, SetLastError=true)]
public static extern bool EnumWindows(EnumThreadWindowsCallback callback, IntPtr extraData);
然后使用Win32 API GetWindowThreadProcessId
检查每个窗口所属的进程[DllImport("user32.dll", CharSet=CharSet.Auto, SetLastError=true)]
public static extern int GetWindowThreadProcessId(HandleRef handle, out int processId);