【问题标题】:C# - on mouseover at taskbar, a preview is generated. how can i achieve this by C# codingC# - 在任务栏上的鼠标悬停时,会生成预览。我如何通过 C# 编码来实现这一点
【发布时间】:2023-03-24 12:02:02
【问题描述】:

我正在开发一个 winForm 应用程序,其中列出了所有正在运行的进程。 在任何进程的鼠标悬停时,我想要预览窗口(在 Windows 7 中,当您将鼠标悬停在任务栏中的应用程序上时,会生成一个预览,显示应用程序窗口的内容。) 见图片。

任何想法如何实现这一点,我无法得到它。 任何建议都会有所帮助。 谢谢..

【问题讨论】:

  • 这是 Windows 7 的一项功能,不是吗?
  • 是的,我想在window7中..但是如何实现这个@KingKing
  • 我不确定,我只是想知道为什么它是 Windows 7 中受支持的功能,但您仍想获得它?除非您想部署您的应用程序以在 Windows XP 系统中使用。或者你想随意改变弹窗中的预览?
  • 我很困惑。我看到了一个巨大的 Apple 标志和 Snow Leopard 背景,但您问的是 Windows 应用程序。不确定我能否成功克服认知失调,从而回答问题。
  • @KingKing 不,我正在开发一个 winform 应用程序,其中列出了所有正在运行的进程。在我的应用程序中列出的任何进程上的鼠标悬停时,我想要像窗口 7 中那样的预览功能。我希望现在你会明白我真正想要的是什么。

标签: c# windows winforms preview


【解决方案1】:

site的完整示例
你需要两个函数:

[DllImport("dwmapi.dll")]
static extern int DwmRegisterThumbnail(IntPtr dest, IntPtr src, out IntPtr thumb);

[DllImport("dwmapi.dll")]
static extern int DwmUpdateThumbnailProperties(IntPtr hThumb, ref DWM_THUMBNAIL_PROPERTIES props);

DwmRegisterThumbnail 的使用
你在你的form,并且process它是一个你想在你的程序中绘制的外部程序。

IntPtr hWnd = process.MainWindowHandle;
int i = DwmRegisterThumbnail(this.Handle, hWnd, out thumb);

注册后,你只需告诉windows绘制图片的位置

            DWM_THUMBNAIL_PROPERTIES props = new DWM_THUMBNAIL_PROPERTIES();

            props.fVisible = true;
            props.dwFlags = DWM_TNP_VISIBLE | DWM_TNP_RECTDESTINATION | DWM_TNP_OPACITY;
            props.opacity = 255;
            props.rcDestination = new Rect(panel.Left, panel.Top, panel.Right, panel.Bottom);

            DwmUpdateThumbnailProperties(thumb, ref props);

【讨论】:

    【解决方案2】:

    您无需编写任何代码即可实现这一目标。它是 Aero 主题的一部分,随 Windows Vista 引入,并且仍然存在于 Windows 7 中。默认情况下,当您将鼠标悬停在任务栏中的图标上时,会显示应用程序窗口的小缩略图。您展示的 Skype 示例以及您自己编写的 C# 应用程序都是如此。

    如果您想更好地控制预览中显示的确切内容(例如,如果您只想显示应用窗口的一小部分),您可以编写一些代码来调用一个或多个相关 @ 987654321@.

    但不要自己编写所有的 P/Invoke 代码。使用以 .NET 友好的方式将其全部打包的现有库之一,例如 Windows Forms AeroWindows API Code Pack

    【讨论】:

      【解决方案3】:

      如果您希望自己的应用程序显示 Aero 缩略图,this C++ sample 可能会帮助您。显然它使用DwmRegisterThumbnail() 表示“这个 HWND 现在将显示另一个的缩略图”。

      所以,一个小小的 P/Invoke 电话和IWin32Window...

      【讨论】:

        猜你喜欢
        • 2013-07-14
        • 1970-01-01
        • 2023-03-06
        • 1970-01-01
        • 1970-01-01
        • 2019-10-27
        • 2019-03-08
        • 1970-01-01
        • 2011-04-15
        相关资源
        最近更新 更多