C# コンソールのタイトル・アイコンを変更する

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

ちょっとしたアプリケーションを作成するときに、UIを作成するのが面倒なのでコンソールアプリを多用してしまいます。特にUIを必要としないバックグランドで動作するものはほとんどコンソールアプリです。
しかし、コンソールアプリばかりで、しかもバックグランドで動作しているものなどは停止するときに、タスクマネージャで識別しにくかったりします。
そこで、プログラム上でコンソールタイトルを変更し、タスクマネージャで認識しやすいようにする方法を載せておきます。
また、プログラムのアイコンもデフォルトから変更しておくと、コンソールのアイコンから変わってわかりやすくなります。

Sponsored links
Sponsored links

開発環境

開発環境

PC : NiPoGi AK1PULS
OS : Windows11 Pro 23H2

Microsoft Visual Studio Community 2022 Version 17.76

Visual Studio プロジェクト

プロジェクト

プロジェクトテンプレート:
     コンソールアプリ(.NET Framework) [C# Windows コンソール]

プロジェクト名: MameMameConsole

フレームワーク: .NET Framework 4.8

標準コンソールの表示例

コマンドプロンプトを起動すると、タイトルは”コマンドプロンプト”です。

タスクバーはコマンドプロンプトのアイコンが表示されています。

タスクバーの設定で「タスクバーのボタンをまとめラベルを非表示にする」を「なし」に設定すると、”管理者:コマンドプロンプト”で表示されました。

コンソールアプリを起動すると、通常はタイトルに起動アプリのパスが表示されています。

Console画面

ここも、タスクバーにはコマンドプロンプトのアイコンが表示されています。

タスクバーでラベルを表示すると、コンソールアプリのパスが表示されています。

このときタスクマネージャでは”ターミナル”ー”WindowsTerminal.exe”で表示されています。

タスクマネージャでの表示

タイトルの設定

コンソールのタイトルを明示的に変更するには Console.Title プロパティに表示する文字列を設定するだけです。

コード例

動作

タイトルが”MamaMame”になりました

タスクバーはコマンドプロンプトのままです。

タスクバーでラベルを表示すると”MameMame”が表示されています。

タスクマネージャでも”ターミナル”ー”MameMame”が確認できます。

タイトルバーのアイコンの設定

設定

ソリューションのプロパティで「アプリケーション」を選択します。
「リソース」の「アイコンとマニフェスト」のアイコンでicoファイルを設定します。

動作

タイトルに”MameMame”が表示されています。
しかし、”mamemame.ico”が表示されていません。

タスクバーでもこんな感じ。

タスクバーでラベルを表示すると”MameMame”が表示されています。


あれ?よく見ると、コンソールのイメージがちがう!
どうもターミナルが開いている!

アイコンを変更したのですが、ターミナルではアイコンが表示されていません。たしかコンソールではアイコンが表示されていたはずなのですが…。

Windows11 22H2から規定のターミナルアプリケーションが「Windows自動に選択する」になっているようです。これを「Windowsコンソールホスト」に設定すればデフォルトでコンソール起動ができます。しかし、デフォルト設定を変更してしまうと、他のアプリケーションにも影響が出てきそうなので、汎用につかうPCの設定を変更してしまってもよいものなのか判断が難しいところです。

既定のターミナルアプリケーションの変更方法

直接CMDを起動してもターミナルが起動してしまいます。ターミナルの設定から既定のアプリを設定できるようです。

[Windows Start]を右クリックします。コンテキストメニューから「ターミナル」をクリックしてターミナルを開きます。

ターミナルで[v]をクリックしてメニューを開きます。メニューの「設定」をクリックします。

「スタートアップ」画面が開きます。「既定のターミナルアプリケーション」が”Windowsで自動的に選択する」になっていることが確認できます。

「Windowsで自動的に選択する」をクリックするとリストが表示されます。「Windowsコンソールホスト」を選択して[保存]すると、次回からターミナルではなくコンソールが開くようになります。

しかし、これでは他のアプリケーションが影響を受けることがあるかもしれない…!

解決策(とりあえず今回のゴール)

いろいろとググってみたのですが、解決方法が見つかりません。
しょうがないので、”conhost.exe“に引数としてアプリケーションを渡してCMDを起動してみました。下記のようなBATで試してみました。

起動時にコンソール画面がちらっと表示されてしまいますのであまり納得していないのですが、完全な解決策がみつかるまでこれで対応していきます。

ここではconhost.exeでコンソールで起動していますが、wt.exeで起動するとターミナルが開きます。

結果の動作

コンソール画面が開きました。タイトル”MameMame”が表示されて、アイコンも”mamemame.ico”が表示されています。

タスクバーではMameMameのアイコンが表示されています。

タスクバーでラベルを表示するとアイコンと”MameMame”が表示されています。

タスクマネージャーでは”MameMameConsole(32ビット)”プロセスで”MameMame”ウィンドウが開いていることが確認できます。

一応これで、イメージどおりになり、コンソールアプリをタスクマネージャでアプリケーションを識別してクローズすることができるようになりました。

また、コンソールを裏に隠して、さらにタスクバーに表示しない方法は下記の記事を参考にしてください。

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