- ベストアンサー
タスクトレイの常駐解除後について
VB6(SP6)にてタスクトレイに常駐するプログラムを作成しました。 そして、プログラムを終了するとき下記コードにて常駐を解除しています。 Private Sub Form_Unload(Cancel As Integer) 'タスクトレイのアイコンを消去 ingAPIReVal = Shell_NotifyIcon(NIM_DELETE, nidNoftyIconData) '終了 End End Sub プログラムは無事終了するのですが、タスクトレイにアイコンが残ってしまいます。 マウスをタスクトレイに近づけると消えるのですが... 極端な話 5回実行・終了を繰り返すと、同じアイコンが5個並び...マウスを近づけると一気に消えてしまいます。 プログラムの動作に問題はないのですが、あまり体裁が良いとは思えず どうにかならないかと質問させて頂きました。 対処方法をご存じの方、ご教授下さいm(__)m
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
QueryUnloadイベントで消しても一緒ですか? 環境が無いので、推測で発言しております。
その他の回答 (3)
- otto0001otto
- ベストアンサー率25% (64/249)
#3です。#1さんがすでにおっしゃってましたね。
- otto0001otto
- ベストアンサー率25% (64/249)
まったく自信はありませんが、 Form_QueryUnload にもENDステートメントをかいたら いかがでしょう?
- cocodoco5656
- ベストアンサー率19% (38/192)
自分の環境ではうまくいくんですよね。 その終了で 関係ないと思うけど自分の方法は本当はやっては ダメな方法だけど 自分は ingAPIReValで返値拾わないで callしちゃっているんですけどね。 'Shell_NotifyIcon()API定義 Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias _ "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData _ As NOTIFYICONDATA) As Long Public Const NIM_ADD = &H0 Public Const NIM_MODIFY = &H1 Public Const NIM_DELETE = &H2 Public Const NIF_ICON = &H2 Public Const NIF_MESSAGE = &H1 Public Const NIF_TIP = &H4 Public Const WM_MOUSEMOVE = &H200 Public Const WM_LBUTTONDOWN = 7695 Public Const WM_LBUTTONDBLCLK = 7725 Public Const WM_RBUTTONDOWN = 7740 Public Const WM_RBUTTONDBLCLK = 7770 Type NOTIFYICONDATA cbSize As Long hWnd As Long uID As Long uFlags As Long uCallbackMessage As Long hIcon As Long szTip As String * 64 End Type Public NID_Typ As NOTIFYICONDATA Function Shell_NotifyIcon_Add_Sub(MehWnd_Lon As Long, MeIcon_Lon As Long, Message_Str) NID_Typ.cbSize = Len(typNid) NID_Typ.hWnd = MehWnd_Lon NID_Typ.uID = vbNull NID_Typ.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE NID_Typ.uCallbackMessage = WM_MOUSEMOVE NID_Typ.hIcon = MeIcon_Lon NID_Typ.szTip = Message_Str & vbNullChar Call Shell_NotifyIcon(NIM_ADD, NID_Typ) End Function Function Shell_NotifyIcon_Del_Sub() Call Shell_NotifyIcon(NIM_DELETE, NID_Typ) End Function これが自分が使っている定義と関数です。 Shell_NotifyIcon_Add_Subがアイコン表示関数で Shell_NotifyIcon_Del_Subがアイコン削除関数
お礼
ご回答、ありがとうございます。 >ingAPIReValで返値拾わないで >callしちゃっているんですけどね。 Call関数を使ってみましたけど結果は同じでした(^^;
お礼
ソースを調べてみたら、別のところでEndしているところがありました。 そのEndの前に 'タスクトレイのアイコンを消去 ingAPIReVal = Shell_NotifyIcon(NIM_DELETE, nidNoftyIconData) を追加したところ、無事消えましたm(__)m 途中でEndしたら、Form_Unloadは実行されないのかな? (そのためにForm_QueryUnloadがあるのかな?) ↑これから勉強してみます。 お騒がせしました。m(__)m