我正在用 C# 构建一个 WPF 应用程序,我想在列表框中显示打开的 IE 选项卡的缩略图。我实际上是在尝试在 Windows 7 中复制 DWM 功能。
我已经想出如何使用 Interop.ShDocVW 枚举打开的选项卡列表,但是为了使用 DWM API 调用,我必须传入一个 hwnd
,并且所有选项卡都共享与 Internet Explorer 相同的句柄。
所以我一直在搞乱 EnumWindows
和 EnumChildWindows
但我什么也做不了。
关于如何最好地解决这个问题有什么建议吗?
最佳答案
此代码枚举对应于 IE 缩略图的窗口句柄,可用作 DwmRegisterThumbnail function 的 hwndSource
参数。
public static IEnumerable<IntPtr> EnumerateIEDwmThumbnails()
{
List<IntPtr> ptrs = new List<IntPtr>();
StringBuilder cls = new StringBuilder(100);
EnumWindows((hwnd, lparam) =>
{
GetClassName(hwnd, cls, cls.Capacity);
if (cls.ToString() == "TabThumbnailWindow")
{
ptrs.Add(hwnd);
}
return true;
}, IntPtr.Zero);
return ptrs;
}
[DllImport("user32.dll")]
private static extern bool EnumWindows(EnumWindowsCallback lpEnumFunc, IntPtr lParam);
private delegate bool EnumWindowsCallback(IntPtr hwnd, IntPtr lParam);
[DllImport("user32.dll")]
private static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount);
关于c# - 如何将打开的 IE 选项卡显示为 DWM 缩略图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9235681/