サンプルソースコード
■ウィンドウの非表示■
標準ではフォームが表示されてしまうので、ShownイベントでVisibleにFalseを設定し、常に非表示にします。
Private Sub Form_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shownまた、ShowInTaskbarプロパティにFalseを設定し、タスクバーに表示されないようにします。
Me.Visible = False
End Sub
■タスクトレイにアイコンを表示■
タスクトレイ(タスクバーの右端に並ぶアイコンのことです)にアイコンを表示する方法ですが、NotifyIconクラスを使用します。
使い方は簡単で、ツールボックスからフォームにNotifyIconを貼り付けるだけです。アイコンや表示するテキストはプロパティから変更できます。
NotifyIconのイベントではアイコンをクリックした場合のマウスイベントを拾えます。また、ContextMenuStripプロパティを使用すれば、右クリック時に表示するメニューを設定できます。サンプルでは終了のメニューを表示しています。
■デスクトップにウィンドウを張り付ける■
Win32APIをいくつか使用するとデスクトップに張り付いたウィンドウを表示できます。
以下のWin32APIを定義します。
Public Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Integer) As Integerウィンドウタイトルより”Program Manager”を検索し、親ウィンドウに設定します。
Public Declare Function FindWindow Lib "USER32.DLL" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
Public Declare Function SetParent Lib "USER32.DLL" (ByVal hWndChild As Integer, ByVal hWndNewParent As Integer) As Integer
また、デスクトップ上のアイコンに隠れないように最前面に表示します。
Protected Sub SetFormPosDesktop(ByVal targetForm As Form)
Dim hProgramManagerHandle As Integer
hProgramManagerHandle = FindWindow(vbNullString, "Program Manager")
Call SetParent(targetForm.Handle.ToInt32, hProgramManagerHandle)
Call SetForegroundWindow(targetForm.Handle.ToInt32)
End Sub
試しにカレンダーのサンプルを作成してみました。
実行した画面はこんな具合です。
画像だとわかりにくいかもしれませんが、ウィンドウをアクティブにしてもデスクトップに張り付いています。
ソースコードとサンプルプログラムはこちら↓からダウンロードできます。
http://tecproglab.googlecode.com/files/Calendar.zip
開発環境:Windows 7, VS2005Pro
とても参考になりました。
返信削除このサンプルにおいて、デスクトップ上のアイコンの
裏に表示させる方法はあるのでしょうか?