常時起動しておきたいプロセスがあります。Windowsサービスのように利用したいのですが、とある理由でWindowsサービスに登録できないため、Windowsアプリケーションでプログラムを構築します。
起動時からウィンドウを非表示にしておけばよいのですが、ある処理をすると最前面に表示します。
たとえば、エラー監視をしていてエラーが発生したときにウィンドウを表示します。ウィンドウクローズ(閉じるボタン)でウィンドウが終了したと見せかけて、裏に隠れてまたエラー監視をするような感じです。
最前面表示から再度裏に隠したいときに、ユーザーにはあたかもウィンドウをクローズしているかのような動作に見えるでしょう。
アプリケーションの起動は、タスクスケジューラでWindows起動時に起動しようと思います。
開発環境
MainWindow.xaml
WindowにClosingイベントハンドラを登録します。
<Window x:Class="TestHide.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"
xmlns:local="clr-namespace:TestHide"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800" Closing="Window_Closing">
MainWindow.xaml.cs
クローズするイベントハンドラで
this.Hide();
をするだけでOKです。このとき、
e.Cancel = true;
でClosing処理を中断しておくことを忘れずに。
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
this.Hide(); // 自分をHideにする
e.Cancel = true;
return;
}