C# コンソールアプリケーションを裏に隠す

プログラミング プログラミング
プログラミング

コンソールアプリを裏に隠して、常駐アプリケーションのように利用したいと思います。
常駐アプリを作る場合にUIは必要ないので、コンソールアプリで作ると初期工数が少なくて済みます。なにせ、MS-DOS世代の爺には、コンソールの方が何かと作りやすいので・・・。
今回は、Windows11でどのような挙動をするのか調査してみました。

Sponsored links
Sponsored links

テスト環境

テスト環境

PC : NiPoGi AK1PULS
OS : Windows11 Pro 23H2

Microsoft Visual Studio Community 2022 Version 17.76

テストプログラム1

このプロジェクトにはアイコンが設定されています。こちらの記事を参考にしてください。

ここではカレントプロセスのウィンドウハンドルを利用し、HIDEしています

動作結果1

ターミナルで起動

ターミナルで起動すると、普通に表に表示されてしまいました。
GetCurrentProcess()ではターミナルのウィンドウハンドルがとれていないようです。こちらの結果からも予想がついていましたが。

コンソールで起動

batから起動してコンソールで起動しました。(コンソールで起動する方法の詳細はこちらを参照してください。)
その結果、コンソールウィンドウは表示されません。また、タスクバーにもアイコンが表示されていません
タスクマネージャで確認すると、”MameMameConsole(32ビット)”のプロセスが起動していることが確認できます。

テストプログラム2(出力の種類を「Windowsアプリケーション」にする)

コンソールを使わないで作成する方法がありました。プロジェクトの雛形は”コンソールアプリケーション”で作成しましたが、作成後に”Windowsアプリケーション“に変更してしまう方法です。

ソリューションの「プロパティ」を開きます。
「アプリケーション」の「出力の種類」を”コンソールアプリケーション”から”Windowsアプリケーション”に変更します。

これだけでOKです。
ただし、コンソールが無いので、Console.ReadKey()やConsole.WriteLine()などConsoleクラスは使えませんので、下記のようにコメントアウトし、とりあえず無限ループを組んであります。

動作結果2

”MameMameConsole.exe”を直接起動しました
その結果、コンソールウィンドウは表示されません。また、タスクバーにもアイコンが表示されていません
タスクマネージャで確認すると、”MameMameConsole(32ビット)”のプロセスが起動していることが確認できます。

こちらの方法の方がすっきりしていますね。

タイトルとURLをコピーしました