NonSoft

既存プログラムをタスクトレイで実行する
サンプル(VB.NET)


 サンプル(ソース/コード)
<このサンプルの概要>
既存プログラム(アプリケーションEXE)をタスクトレイで実行するサンプル(VB.NET)です。

VB.NETでタスクトレイにアイコンを表示する方法は非常に簡単です。
NotifyIconをFromに貼り付けて、NotifyIcon.Iconにアイコン画像を設定するだけです。

このサンプルではOutlook Expressをタスクトレイで実行しています。
また、タスクトレイのアイコンをクリックした時にウィンドウの表示/非表示の切替をしています。

このサンプルを元に作成したツールがあります。タスクトレイ実行ツールは、いろんなプログラム
(Outlook Express、Internet Explorer...)をタスクトレイで実行するツールです。
プログラムだけでは無くいろんなファイル(ショートカットでも)を実行します。
残念ながら、一部タスクトレイに入らないファイルもありますが、実用上問題ないと思います。

★フォームモジュール(Form1.vb)
Public Class Form1
    Const SW_HIDE = 0       ' ウィンドウを非表示
    Const SW_SHOW = 5       ' ウィンドウを表示
    Const SW_RESTORE = 9    ' ウィンドウを元の状態に戻す

    ' ウィンドウを表示/非表示切替
    Private Declare Function ShowWindow Lib "user32.dll" _
        (ByVal hwnd As Integer, ByVal nCmdShow As Integer) As Integer
    ' ウィンドウの表示/非表示チェック
    Private Declare Function IsWindowVisible Lib "user32.dll" _
        (ByVal hwnd As Integer) As Integer
    ' タスクトレイで実行したプログラム(Outlook Express)
    Private exe As System.Diagnostics.Process

    Private Sub Form1_Load( _
        ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles MyBase.Load
        ' タスクトレイで実行したアプリケーションのタイトル
        NotifyIcon1.Text = "Outlook Express"

        ' タスクトレイで実行したアプリケーションのアイコン
        NotifyIcon1.Icon = Me.Icon

        ' アプリケーションを実行(Outlook Express)
        exe = System.Diagnostics.Process.Start("C:\Program Files\Outlook Express\msimn.exe")
    End Sub

    Private Sub NotifyIcon1_MouseDown( _
        ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) _
        Handles NotifyIcon1.MouseDown
        If e.Button = Windows.Forms.MouseButtons.Left Then
            ' マウス左ボタンをクリック
            If exe Is Nothing = False AndAlso exe.MainWindowHandle <> 0 Then
                If IsWindowVisible(exe.MainWindowHandle) = 0 Then
                    ' ウィンドウ表示
                    ShowWindow(exe.MainWindowHandle, SW_SHOW)
                Else
                    ' ウィンドウ非表示
                    ShowWindow(exe.MainWindowHandle, SW_HIDE)
                End If
            End If
        End If
    End Sub

    Private Sub Form1_FormClosed( _
        ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) _
        Handles MyBase.FormClosed
        ' タスクトレイアイコン消去
        NotifyIcon1.Icon = Nothing
    End Sub
End Class