c# - 如何将打开的 IE 选项卡显示为 DWM 缩略图?

标签 c# winapi aero dwm

我正在用 C# 构建一个 WPF 应用程序,我想在列表框中显示打开的 IE 选项卡的缩略图。我实际上是在尝试在 Windows 7 中复制 DWM 功能。

Windows 7 showing open IE tabs

我已经想出如何使用 Interop.ShDocVW 枚举打开的选项卡列表,但是为了使用 DWM API 调用,我必须传入一个 hwnd,并且所有选项卡都共享与 Internet Explorer 相同的句柄。

所以我一直在搞乱 EnumWindowsEnumChildWindows 但我什么也做不了。

关于如何最好地解决这个问题有什么建议吗?

最佳答案

此代码枚举对应于 IE 缩略图的窗口句柄,可用作 DwmRegisterThumbnail functionhwndSource 参数。

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/

相关文章:

c++ - 获取 FILE * 句柄而不实际在磁盘上创建文件

wpf - 当 Aero 被禁用时,WPF 应用程序的性能更差?

c++ - 在 Windows 10 上使用 DWM API 时出现 Aero 字幕标题栏问题

windows - SetStdHandle 对 cout/printf 没有影响

winapi - 如何使用 Win32 API 将 EDIT 控件放入自定义弹出窗口中?

c# - 如何在 .NET 中调用 DrawThemeTextEx

c# - 如何解决类型约束不匹配,C# 到 F#

c# - 系统参数异常 : The encoded string can only be used for a password

c# - 避免来自 ASP.NET 中的 View 的双重请求的最佳实践

c# - Silverlight 等同于已签名的 Java Applet?