ちょっとしたアプリケーションを作成するときに、UIを作成するのが面倒なのでコンソールアプリを多用してしまいます。特にUIを必要としないバックグランドで動作するものはほとんどコンソールアプリです。
しかし、コンソールアプリばかりで、しかもバックグランドで動作しているものなどは停止するときに、タスクマネージャで識別しにくかったりします。
そこで、プログラム上でコンソールタイトルを変更し、タスクマネージャで認識しやすいようにする方法を載せておきます。
また、プログラムのアイコンもデフォルトから変更しておくと、コンソールのアイコンから変わってわかりやすくなります。
開発環境
Visual Studio プロジェクト
標準コンソールの表示例
コマンドプロンプトを起動すると、タイトルは”コマンドプロンプト”です。
タスクバーはコマンドプロンプトのアイコンが表示されています。
タスクバーの設定で「タスクバーのボタンをまとめラベルを非表示にする」を「なし」に設定すると、”管理者:コマンドプロンプト”で表示されました。
コンソールアプリを起動すると、通常はタイトルに起動アプリのパスが表示されています。
ここも、タスクバーにはコマンドプロンプトのアイコンが表示されています。
タスクバーでラベルを表示すると、コンソールアプリのパスが表示されています。
このときタスクマネージャでは”ターミナル”ー”WindowsTerminal.exe”で表示されています。
タイトルの設定
コンソールのタイトルを明示的に変更するには Console.Title プロパティに表示する文字列を設定するだけです。
Console.Title = "MameMame";
コード例
namespace MameMameConsole
{
internal class Program
{
static void Main(string[] args)
{
Console.Title = "MameMame";
Console.ReadKey();
}
}
}
動作
タイトルが”MamaMame”になりました。
タスクバーはコマンドプロンプトのままです。
タスクバーでラベルを表示すると”MameMame”が表示されています。
タスクマネージャでも”ターミナル”ー”MameMame”が確認できます。
タイトルバーのアイコンの設定
設定
ソリューションのプロパティで「アプリケーション」を選択します。
「リソース」の「アイコンとマニフェスト」のアイコンでicoファイルを設定します。
動作
タイトルに”MameMame”が表示されています。
しかし、”mamemame.ico”が表示されていません。
タスクバーでもこんな感じ。
タスクバーでラベルを表示すると”MameMame”が表示されています。
あれ?よく見ると、コンソールのイメージがちがう!
どうもターミナルが開いている!
アイコンを変更したのですが、ターミナルではアイコンが表示されていません。たしかコンソールではアイコンが表示されていたはずなのですが…。
Windows11 22H2から規定のターミナルアプリケーションが「Windows自動に選択する」になっているようです。これを「Windowsコンソールホスト」に設定すればデフォルトでコンソール起動ができます。しかし、デフォルト設定を変更してしまうと、他のアプリケーションにも影響が出てきそうなので、汎用につかうPCの設定を変更してしまってもよいものなのか判断が難しいところです。
既定のターミナルアプリケーションの変更方法
直接CMDを起動してもターミナルが起動してしまいます。ターミナルの設定から既定のアプリを設定できるようです。
[Windows Start]を右クリックします。コンテキストメニューから「ターミナル」をクリックしてターミナルを開きます。
ターミナルで[v]をクリックしてメニューを開きます。メニューの「設定」をクリックします。
「スタートアップ」画面が開きます。「既定のターミナルアプリケーション」が”Windowsで自動的に選択する」になっていることが確認できます。
「Windowsで自動的に選択する」をクリックするとリストが表示されます。「Windowsコンソールホスト」を選択して[保存]すると、次回からターミナルではなくコンソールが開くようになります。
しかし、これでは他のアプリケーションが影響を受けることがあるかもしれない…!
解決策(とりあえず今回のゴール)
いろいろとググってみたのですが、解決方法が見つかりません。
しょうがないので、”conhost.exe“に引数としてアプリケーションを渡してCMDを起動してみました。下記のようなBATで試してみました。
@echo off
if not "%~0"=="%~dp0.\%~nx0" (
start /min cmd /c,"%~dp0.\%~nx0" %*
exit
)
start conhost.exe MameMameConsole.exe
起動時にコンソール画面がちらっと表示されてしまいますのであまり納得していないのですが、完全な解決策がみつかるまでこれで対応していきます。
ここではconhost.exeでコンソールで起動していますが、wt.exeで起動するとターミナルが開きます。
結果の動作
コンソール画面が開きました。タイトル”MameMame”が表示されて、アイコンも”mamemame.ico”が表示されています。
タスクバーではMameMameのアイコンが表示されています。
タスクバーでラベルを表示するとアイコンと”MameMame”が表示されています。
タスクマネージャーでは”MameMameConsole(32ビット)”プロセスで”MameMame”ウィンドウが開いていることが確認できます。
一応これで、イメージどおりになり、コンソールアプリをタスクマネージャでアプリケーションを識別してクローズすることができるようになりました。
また、コンソールを裏に隠して、さらにタスクバーに表示しない方法は下記の記事を参考にしてください。