使用C#,如何列出打开窗口的唯一ID(即使没有标题的那些)?不是运行程序的进程ID,而是窗口本身的底层唯一ID。
我实际上正在尝试构建一个比简单列出打开窗口的唯一ID更复杂的东西,以帮助我们的IT办公室解决他们在虚拟应用程序环境中遇到的一些问题。
提前谢谢!
更新
根据答案和评论,我确实表示Window的Handle
,而不是唯一的ID。
答案 0 :(得分:1)
答案 1 :(得分:1)
如果按窗口的唯一ID表示窗口的HANDLE
,这是一个简单的例子:
[DllImport("user32.dll")]
private static extern bool EnumDesktopWindows(IntPtr hDesktop, EnumWindowsProc ewp, int lParam);
[DllImport("user32.dll")]
private static extern bool IsWindowVisible(IntPtr hwnd);
public delegate bool EnumWindowsProc(IntPtr hWnd, int lParam);
private static void Main(string[] args)
{
var collection = new Collection<IntPtr>();
EnumWindowsProc enumerateHandle = delegate(IntPtr hWnd, int lParam)
{
if (IsWindowVisible(hWnd)) // remove to include hidden windows
collection.Add(hWnd);
return true;
};
if (EnumDesktopWindows(IntPtr.Zero, enumerateHandle, 0)) {
foreach (var item in collection) {
Console.WriteLine(item);
}
}
Console.Read();
}