如何在Windows中找到打开窗口的唯一ID?

时间:2014-01-16 06:23:29

标签: c# windows

使用C#,如何列出打开窗口的唯一ID(即使没有标题的那些)?不是运行程序的进程ID,而是窗口本身的底层唯一ID。

我实际上正在尝试构建一个比简单列出打开窗口的唯一ID更复杂的东西,以帮助我们的IT办公室解决他们在虚拟应用程序环境中遇到的一些问题。

提前谢谢!

更新 根据答案和评论,我确实表示Window的Handle,而不是唯一的ID。

2 个答案:

答案 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();
}