• ベストアンサー

タスクトレイの常駐解除後について

VB6(SP6)にてタスクトレイに常駐するプログラムを作成しました。 そして、プログラムを終了するとき下記コードにて常駐を解除しています。 Private Sub Form_Unload(Cancel As Integer) 'タスクトレイのアイコンを消去 ingAPIReVal = Shell_NotifyIcon(NIM_DELETE, nidNoftyIconData) '終了 End End Sub プログラムは無事終了するのですが、タスクトレイにアイコンが残ってしまいます。 マウスをタスクトレイに近づけると消えるのですが... 極端な話 5回実行・終了を繰り返すと、同じアイコンが5個並び...マウスを近づけると一気に消えてしまいます。 プログラムの動作に問題はないのですが、あまり体裁が良いとは思えず どうにかならないかと質問させて頂きました。 対処方法をご存じの方、ご教授下さいm(__)m

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

QueryUnloadイベントで消しても一緒ですか? 環境が無いので、推測で発言しております。

kazon_ume
質問者

お礼

ソースを調べてみたら、別のところでEndしているところがありました。 そのEndの前に 'タスクトレイのアイコンを消去 ingAPIReVal = Shell_NotifyIcon(NIM_DELETE, nidNoftyIconData) を追加したところ、無事消えましたm(__)m 途中でEndしたら、Form_Unloadは実行されないのかな? (そのためにForm_QueryUnloadがあるのかな?) ↑これから勉強してみます。 お騒がせしました。m(__)m

その他の回答 (3)

回答No.4

#3です。#1さんがすでにおっしゃってましたね。

回答No.3

まったく自信はありませんが、 Form_QueryUnload にもENDステートメントをかいたら いかがでしょう?

回答No.2

自分の環境ではうまくいくんですよね。 その終了で 関係ないと思うけど自分の方法は本当はやっては ダメな方法だけど 自分は 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がアイコン削除関数

kazon_ume
質問者

お礼

ご回答、ありがとうございます。 >ingAPIReValで返値拾わないで >callしちゃっているんですけどね。 Call関数を使ってみましたけど結果は同じでした(^^;

関連するQ&A

  • タスクトレイに文字を表示するには

    よろしくお願い致します。 環境 WIN98 VC++6.0 MFC にて タスクトレイに文字を表示するにはどうすれば良いのでしょう? 現在::Shell_NotifyIcon( NIM_ADD, &m_stNotifyIcon );にてアイコンを表示することは出来ています。

  • タスクトレイからアイコンを削除したい

    VB6.0にて、自作のアプリ「zisaku.exe」から、タスクトレイ常駐型の他アプリケーション「aiueo.exe」を再起動したいと考えています。 しかし、色々調べて試してみたのですが、Shell_NotifyIconに設定する設定値が分からず困っています。教えていただけないでしょうか。 (「aiueo.exe」はウィンドウを持たない) 動作フロー (1)「aiueo.exe」のプロセスを削除する。(タスクマネージャにて確認。動作OK) (2)「aiueo.exe」のタスクトレイアイコンを削除する。(設定値が分からない) (3)「aiueo.exe」を起動する。(起動後は自動でタスクトレイに入る) 開発環境 WindowsXP SP2 VB6.0-SP6 コード 'タスクトレイ関連の構造体と定数 Private Type NOTIFYICONDATA cbSize As Long hWnd As Long uID As Long uFlags As Long uCallbackMessage As Long hIcon As Long szTip As String * 64 dwState As Long dwStateMask As Long End Type Private Const NIF_ICON = &H2 Private Const NIF_MESSAGE = &H1 Private Const NIF_TIP = &H4 Private Const NIM_ADD = &H0 Private Const NIM_DELETE = &H2 Private Const NIM_MODIFY = &H1 Private Const WM_MOUSEMOVE = &H200 Private Const WM_LBUTTONDBLCLK = &H203 Private Const WM_LBUTTONDOWN = &H201 Private Const WM_LBUTTONUP = &H202 Private Const WM_RBUTTONDBLCLK = &H206 Private Const WM_RBUTTONDOWN = &H204 Private Const WM_RBUTTONUP = &H205 Private Sub aiueoReStart() Dim intCnt As Integer Dim lngRet As Long Dim strBuf As String Dim strSql As String Dim lobjProcess As Object Dim lstrModule As String Dim NID As NOTIFYICONDATA lstrModule = "aiueo.exe" 'プロセスを削除する。 strSql = "SELECT * FROM win32_process WHERE name='" & lstrModule & "'" For Each lobjProcess In GetObject("winmgmts:").ExecQuery(strSql) If lstrModule = lobjProcess.Name Then lobjProcess.Terminate End If Next 'Shell_NotifyIconを使ってタスクトレイより削除する。 'NIDの設定値が分からない。 '色々試して見たけど巧くいかなかった。 Shell_NotifyIcon NIM_DELETE, NID lngRet = Shell("C:\Program Files\aiueo.exe", vbNormalNoFocus) If lngRet = 0 Then lngRet = MsgBox("起動失敗!", vbCritical) End If Exit Sub End Sub 以上です。 どうかよろしくお願い致します。 (質問するカテゴリを間違えていたため、一時削除しました。申し訳ありません。)

  • タスクトレイのアイコンが消える

    タスクトレイにアイコン表示させる常駐型ソフトを自作しておりますが、WindowsXP環境でアイコンが消えてしまう現象で困っております。 調べてみましたところ、MS Expolerが落ちたとき起こっているようです。 そこで、対策としてForm1のOnPaintイベント中にNIM_DEL して再度NIM_ADDし、アイコンをタスクトレイに再登録しています。 ところがForm1の再描画が結構発生してしまうことがあり、その際タスクトレイのアイコン登録による画面のちらつきが目に付きます。 どなたか、もっと良い対策方法をご教授願えないでしょうか。 よろしくお願いします。

  • Windowsプログラミングでのタスクトレイへの格納について

    Windowsプログラミングでのタスクトレイへの格納について 以下の動作を実現したいです。 (1)初回プログラム起動時タスクトレイにアイコン表示 (2)タスクトレイアイコンのポップアップメニューからプログラムのリージョンウィンドウを表示できる (3)以後デスクトップとタスクトレイ間で出し入れ可能 Shell_NotifyIcon関数などをつかってプログラム起動後メニューなどからメッセージをつかんで出し入れはできるのですが、初回起動時にタスクトレイに格納しようとするとリージョンウィンドウが表示されたままタスクトレイにアイコンが追加されてしまいます。起動時にタスクトレイのみに表示されるようにする方法分かる方教えてくださいお願いします。

  • タスクトレイへアイコンを常駐させる

    ウイルスセキュリティのアイコンだけがタスクトレイから消えてしまうことがあります。常駐させるにはどうすればいいのでしょうか。

  • タスクトレイの常駐ソフト管理

    タスクトレイの常駐ソフト(プログラム)を管理、削除するフリーソフトってありますか? PCを使ってるうちに、かなりの数の常駐ソフトがタスクトレイに入ってしまいました。 動作がかなり重いです。 よろしくお願いします。

  • タスクトレイのアイコンが消えてしまう。

    こんにちは。 今、タスクトレイに常駐するプログラムを作成しています。 プログラム起動するとすぐ、メインウインドウとタスクトレイにアイコンが 表示されます。 メインウインドウ右上の最小化ボタンまたは、終了ボタンを押すと メインウインドウが消えてタスクトレイのアイコンだけが残るように したいと考えています。 最小化ボタンの場合はWM_SIZEをキャッチして、ShowWindow(hwnd, SW_HIDE) で、メインウインドウだけ消え、タスクトレイのアイコンは残ります。 しかし、終了ボタンの場合は、WM_DESTROY をキャッチし、同じくShowWindow(hwnd, SW_HIDE) でメインウインドウを消しているのですが、メインウインドウだけでなく、 アイコンも消えてしまいます。アイコンを消さずに残すようにしたいのですが、 どうしたらよいでしょうか。WM_DESTROYでは、PostQuitMessage(0)はポストして おらず、最後にreturn 0;を返しています。 どうぞよろしくお願いします。 環境 BCC、WindowsXP、C言語、Win32 API

  • SKYPEのタスクトレー常駐を外すには?

    SKYPEがたまに使えれば便利かと思い、インストールしました。でもPCを立ち上げる度にタスクトレーに入ってきます。タスクトレーはけっこう一杯になっているんで高頻度使用のものしか要りません。PCの立ち上げも随分と重くなっているんでPCにこれ以上の負荷は掛けたくありません。 外そうかと思い、「スタートアップ」を開けてみましたがそこには入っていません。「システムツール」の「タスク」にも入っていません。それならば、と、「アイコンを作成する」「クイック起動」などの全てのオプション項目のチェックを外してインストールし直してみましたが無駄でした。 タスクトレーからの常駐を外すにはどうすれば良いのでしょうか???

  • タスクトレイに実行中のアイテムが表示されたりされなかったり・・・

    xpPROです。 タスクトレイ(右下の時計の横)に常駐タスクが表示されたりされなかったりして困っています。 この症状は以前からで、変だなあ、とは思っていたのですが・・・ Meの時には電源管理(電池のようなアイコン)ATIドライバのアイコン、等々すべていつも表示されていました。隣においてある2000PCではそのようなことはないです。それらが、起動時に表示されたりされなかったりするわけです。 起動してないかといえばそういうわけではなくて、ctr+shift+escでタスクマネージャを見るとすべて動いています。 で、終了させて起動させるとタスクトレイに出てきます・・・ 何に困っているかというと、常駐タスクをタスクトレイから終了できないことと、タスクトレイに表示されたボリュームアイコンにマウスカーソルを合わせてホイールで音量調整できるソフトを使い始めたのですが・・・案の定表示しなくて(はじめのうちは表示していた)使い物になりません・・・ これはどういうことなのでしょうか? 対策を教えてください

  • タスクトレイにあるプログラムを起動するショートカットキーは?

    Windows 2000 serverを使用しています。 現在、なぜかマウスが動きません。 タスクトレイに常駐しているプログラムにアクセスしたいのですが、マウスが動かないので出来ません。 タスクトレイにキーボードだけでアクセスすることは出来ますか?