簡単!タスクトレー常駐アプリ開発
みなさんこんにちは。日本情報システム株式会社 ICTソリューション部の進藤です。
2015年も残り1ヶ月をきりましたね。寒い日が続いておりますので、風邪を引かぬようご自愛ください。
さて、たまには技術者らしいことを書いてみようと思います。 今回は、初めてでも簡単に作れる常駐アプリの作り方をご紹介します。
事前準備
Visual Studio 2015のインストール
今回はこれを見れば誰でも開発できるように、無料で配布されている開発ツール「Visual Studio 2015」を使ってプログラミングしてみましょう。
上記サイト内の「Communityを無料ダウンロード」をクリックすれば、vs_community.exeというインストーラがダウンロードされるので、それをダブルクリックしてインストールしてください。
※Visual Studio 2008/2010でも同じ手順で開発できます。
手順
1.Visual Studio 2015の起動
インストールした「Visual Studio 2015」を起動。
2.メニュー選択
ファイル(F) → 新規作成(N) → プロジェクト(P)をクリック。
3.プロジェクト種類を選択
Visual C# → Windowsフォームアプリケーションを選択、任意の名前を指定し、OKボタンをクリック。
4.Program.cs変更
namespace testap { static class Program { /// /// アプリケーションのメイン エントリ ポイントです。 /// [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); //Application.Run(new Form1()); // ↓変更 new Form1(); Application.Run(); } } }
5.NotifyIcon追加
ツールボックスのNotifyIconをダブルクリック。
画面左下辺りに「notifyIcon1」が表示されればOK。
6.ContextMenuStrip追加
ツールボックスのContextMenuStripをダブルクリック。
画面左下辺りに「ContextMenuStrip」が表示されればOK。
7.NotifyIcon設定
画面左下辺りに表示されている「notifyIcon1」をクリックすると、今度は右下にそのプロパティが表示されるので、下記のように設定する。
【変更点】
ContextMenuStrip:contextMenuStrip1を選択
Icon:タスクトレーに表示されるアイコン。(お好きなものに)
Text:アイコンのオンマウス時に表示されるツールチップの中身。
8.終了メニューの追加
画面左下辺りに表示されている「contextMenuStrip1」をクリックすると、フォームにテキスト入力欄が表示されるので、「終了」と入力する。
入力後、「終了」をダブルクリックして、終了時の処理を記述する。
private void 終了ToolStripMenuItem_Click(object sender, EventArgs e) { // アイコン非表示 notifyIcon1.Visible = false; // アプリケーション終了 Application.Exit(); }
9.ビルド
ビルド(B) → ソリューションのビルド(B)をクリック。
上記のように表示されればOK。
10.さっそく動かしてみよう
開始をクリック。
タスクトレーにアイコンが表示されれば、常駐アプリの完成です。
完成したアプリは、手順3で作成したプロジェクトフォルダ内にプロジェクト毎に保存されます。 今回の例で言うと以下のパスに保存されます。
C:\Users\ユーザ名\Documents\Visual Studio 2015\Projects\testap\testap\bin\Debug\testap.exe
おまけ
常駐アプリで何をするかは人それぞれですが、メモ帳が使えなくなってしまうプログラムを組んでみましょう。(まったく意味ない機能ですが、あくまでサンプルということで)
public Form1() { InitializeComponent(); // 無限ループ(CPU負荷注意) while (true) { // プロセスリストにて"notepad"が存在する場合 if (System.Diagnostics.Process.GetProcessesByName("notepad").Length > 0) { // "notepad"というプロセスを全て取得 System.Diagnostics.Process[] ps = System.Diagnostics.Process.GetProcessesByName("notepad"); // 上記で取得したプロセスを全て終了 foreach (System.Diagnostics.Process p in ps) { p.Kill(); } // アラート表示 MessageBox.Show("メモ帳は使えません。", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); } // 1秒毎 System.Threading.Thread.Sleep(1000); } }
上記を記述したら、ビルドしてプログラムを実行させてみてください。アプリが常駐した状態でメモ帳を開くと、警告が表示されてメモ帳が閉じてしまうはずです。
プログラム自体のエラーはありませんが、CPU、メモリ負荷とかWindows系のエラーを一切気にしていないプログラムなのでご了承ください。
まとめ
いかがでしたか。
常駐アプリの仕組みをご理解頂けたでしょうか。興味がある方は是非試してみてください。