我正在开发一个winForm应用程序,我列出了所有正在运行的进程。 在任何进程的鼠标hover时,我需要预览窗口(如在Windows 7中,将鼠标hover在任务栏中的应用程序上时,会生成预览,显示应用程序窗口的内容。
任何想法如何实现这一点,我无法得到它。 任何build议都会有帮助。 谢谢..
显示Windows对话框后如何处理?
使用C uder Window OS与UTC时间同步系统时钟
在Windows中从C ++应用程序进行Thrift调用
Python:Howto启动一个完整的进程而不是subprocess并检索PID
如何编写一个工具,反转Windows中的颜色?
扩展时重绘comboBox项目
是否有可能将Windows Mobile仿真build立到应用程序中?
程序在缓冲区溢出时没有崩溃
为什么没有Microsoft.Win64命名空间?
完整的例子在这个网站
你需要两个功能:
[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
你在你的形式 ,并处理它你想在你的程序上绘制一个外部程序。
IntPtr hWnd = process.MainWindowHandle; int i = DwmRegisterThumbnail(this.Handle,hWnd,out thumb);
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);
你不需要编写任何代码来实现这一点。 它是Windows Vista中引入的Aero主题的一部分,仍然存在于Windows 7中。默认情况下,当您将鼠标悬停在任务栏中的图标上时,会显示应用程序窗口的一个缩略图。 对于您展示的Skype示例,以及您自己编写的C#应用程序,情况也是如此。
如果您想要更精确地控制预览中显示的内容(如果您只想显示应用程序窗口的一小部分),则可以编写一些调用一个或多个相关DWM API函数的代码 。
但是不要自己编写所有的P / Invoke代码。 使用一个现有的库,以.NET友好的方式封装它,如Windows Forms Aero或Windows API Code Pack 。
如果你想自己的应用程序显示一个Aero缩略图,也许这个C ++示例可以帮助你。 显然它使用DwmRegisterThumbnail()来表示“此HWND现在将显示另一个的缩略图”。