c# - 如何在 WPF 窗口中显示屏幕保护程序的预览

标签 c# wpf screensaver

我希望能够在 WPF 窗口中显示屏幕保护程序的预览。 (使用容器或控件或...)我知道 Windows 本身将“/p”参数传递给屏幕保护程序以获得预览。但是如何在我的 WPF 应用程序中显示该预览?我应该得到它的句柄并将其父级更改为我的容器或控件吗?怎么办?

最佳答案

您需要使用 Windows.Forms 互操作,因为屏幕保护程序需要窗口句柄 (HWND),而在 WPF 中,只有顶级窗 Eloquent 有它们。

MainWindow.xaml

<Window x:Class="So18547663WpfScreenSaverPreview.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:forms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
        Title="Screen Saver Preview" Height="350" Width="525"
        Loaded="MainWindow_OnLoaded" Closed="MainWindow_OnClosed"
        SizeToContent="WidthAndHeight">
    <StackPanel Orientation="Vertical" Margin="8">
        <TextBlock Text="Preview"/>
        <WindowsFormsHost x:Name="host" Width="320" Height="240">
            <forms:Control Width="320" Height="240"/>
        </WindowsFormsHost>
    </StackPanel>
</Window>

MainWindow.xaml.cs

using System;
using System.Diagnostics;
using System.Windows;

namespace So18547663WpfScreenSaverPreview
{
    public partial class MainWindow
    {
        private Process saver;

        public MainWindow ()
        {
            InitializeComponent();
        }

        private void MainWindow_OnLoaded (object sender, RoutedEventArgs e)
        {
            saver = Process.Start(new ProcessStartInfo {
                FileName = "Bubbles.scr",
                Arguments = "/p " + host.Child.Handle,
                UseShellExecute = false,
            });
        }

        private void MainWindow_OnClosed (object sender, EventArgs e)
        {
            // Optional. Screen savers should close themselves
            // when the parent window is destroyed.
            saver.Kill();
        }
    }
}

程序集引用

  • WindowsFormsIntegration
  • System.Windows.Forms

相关链接

关于c# - 如何在 WPF 窗口中显示屏幕保护程序的预览,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18547663/

相关文章:

WPF 文本 block : How to evenly space displayed characters?

c - mac屏保启动事件

c# - 使用 div 显示错误

c# - 如何更改 Windows 服务的名称?

c# - MVVM 异步等待模式

c# - 使用 FormatConvertedBitmap 从 Pbgra32 转换为 Bgr32 PixelFormats

xcode - 屏幕保护程序不会安装在其他机器上首选项 Pane

c# - 制作桌面一角激活屏保

c# - 报告异步任务的进度

C# 如何避免多个开关(委托(delegate)?)