C# - 在任务栏上鼠标悬停时,会生成预览.我怎样才能通过C#编码实现这一目标

Sim*_*mar 2 c# windows preview winforms

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

在此输入图像描述

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

Avr*_*ram 5

这个站点的完整示例
您需要两个功能:

[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);
Run Code Online (Sandbox Code Playgroud)

使用DwmRegisterThumbnail
你在你的表单,并处理你想要在你的程序绘制的外部程序.

IntPtr hWnd = process.MainWindowHandle;
int i = DwmRegisterThumbnail(this.Handle, hWnd, out thumb);
Run Code Online (Sandbox Code Playgroud)

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

            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);
Run Code Online (Sandbox Code Playgroud)