使用 WPF 開發一個 Windows 螢幕保護程式
- 2020 年 2 月 10 日
- 筆記
使用 WPF 開發一個 Windows 螢幕保護程式
2018-12-22 02:24
最近有小夥伴問我如何可以讓 Windows 靜置一段時間不操作之後,顯示一個特殊的介面。我想了想,螢幕保護程式可以做到這一點,而且,螢幕保護程式的開發也是非常簡單的。
本文將介紹如何為 Windows 這一悠久的功能進行開發。
螢幕保護程式的本質
螢幕保護程式本質上就是一個 Win32 窗口應用程式。
好了,這一節真的結束了……
編譯好一個窗口應用程式之後,把擴展名改為 scr
,於是你的螢幕保護程式就做好了。
安裝螢幕保護程式
現在,在你的 scr
程式上點擊右鍵,可以看到一個 「安裝」 選項,點擊之後就安裝了。
安裝之後,你會立即看到我們的螢幕保護程式已經運行起來了。
為了方便截圖,我調了下窗口大小。實際上本應該是 Visual Studio 創建的空 WPF 程式的默認大小。
處理螢幕保護程式參數
我的螢幕保護程式是一個非常簡單的程式,幾乎就是默認的模板。只是,現在加上了一點文字,輸出命令行參數。
<Window x:Class="Walterlv.DirextXDemo.Wpf.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" Title="Walterlv.ScreenSaver" Height="450" Width="800"> <Grid> <TextBlock x:Name="ArgsTextBlock" VerticalAlignment="Center" TextAlignment="Center" /> </Grid> </Window>
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); Loaded += OnLoaded; } private async void OnLoaded(object sender, RoutedEventArgs e) { var args = Environment.GetCommandLineArgs().Skip(1).ToArray(); Args.Text = string.Join(Environment.NewLine, args); } }
在前面的截圖中,我們看到參數是 「/p 8457636
」,這是表示此程式需要在預覽窗格中進行預覽。
還有其他參數,用於處理其他情況:
/s
螢幕保護程式開始,或者用戶點擊了 「預覽」 按鈕/c:463970
用戶點擊了 「設置」 按鈕/p 8457636
用戶選中螢幕保護程式之後,在預覽窗格中顯示
實際上螢幕保護程式開始和預覽是不同的。預覽的時候,只會啟動你的程式;而實際開始的時候,Windows 會先為你創建一個白色的背景,覆蓋所有的螢幕,然後你的螢幕保護程式窗口顯示在那個白色的背景之上。
請預防一些坑
你可能會發現 Windows 自帶的螢幕保護程式在 C:WindowsSystem32
文件夾中。但!那不是你放螢幕保護程式的地方!如果把你的螢幕保護程式拷貝到那個 Windows 的受信任目錄下,你的程式是無法運行起來的。正確的做法,是右鍵,使用 「安裝」 選項進行安裝。
我後面附的鏈接中可能說螢幕保護程式還要有一些其他的要求,例如必須全螢幕、不要顯示到任務欄等等。但那其實並不是強制性的要求,比如本文就顯示了一個普通的窗口。
參考資料
本作品採用 知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議 進行許可。歡迎轉載、使用、重新發布,但務必保留文章署名 呂毅 (包含鏈接: https://blog.walterlv.com ),不得用於商業目的,基於本文修改後的作品務必以相同的許可發布。如有任何疑問,請 與我聯繫 ([email protected]) 。