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
以上です。
どうかよろしくお願い致します。
(質問するカテゴリを間違えていたため、一時削除しました。申し訳ありません。)
No.1ベストアンサー
- 回答日時:
タスクトレイって、実体はただのツールバーで、アイコンを登録したウィンドウにメッセージを送っているだけなので、おそらく非表示になっているだけで、aiueo.exe にはウィンドウがあると思います。
Microsoft の Spy++ がインストールされているなら、Spy++ で調べてみるとよいと思います。
Spy++ がなければ、
http://www001.upp.so-net.ne.jp/yamashita/product …
なんかがよさそうです。
ウィンドウクラス名がわかれば、API の FindWindow 関数、もしくは FindWindowEx 関数を使用して、ウィンドウハンドルが取得できます。
で、取得したウィンドウハンドルに SendMessage 関数で WM_DESTROY を送ってやれば、普通のアプリケーションなら、タスクトレイからアイコンを削除して終了すると思います。
もし何か異常な状態になっていて、WM_DESTROY ではアイコンが削除されないのであれば、
Shell_NotifyIcon で削除しなければならないと思いますが、
http://msdn.microsoft.com/en-us/library/bb773352 …
に記載されているように、NOTIFYICONDATA の hWnd と uID の組み合わせ、もしくは、guidItem によって識別しています。ということで、
Dim i As Long
NID.hWnd = FindWindow( "ウィンドウクラス名", "" )
For i = 0 To &HFFFFFFFF
NID.uID = i
If Shell_NotifyIcon( NIM_DELETE, NID ) Then
Exit For
End If
Next
のようにすればよいと思います。
この回答への補足
回答ありがとうございます。
返信が遅くなり申し訳ありません。
急遽出張することになり回答が出来ない状況でした。
了解しました。
早速試してみます。
色々と試してるうちに遅くなりまして申し訳ありません。
おかげさまで解決する事ができました。ありがとうございます。
ほんと助かりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 数式が消える 1 2023/03/19 16:55
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) モードレスでユーザーフォームが開け(表示)ません。 4 2022/09/09 11:05
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
UWSCで特定のChromeのタブをア...
-
Excelの上下を固定したい
-
ゲームでは結局どっちが良いの?
-
CAsyncSocketのOnConnectがスレ...
-
VB6.0 モジュールウィンドウの移動
-
子孫ウィンドウのキャプション...
-
DellノートPC購入で悩んでいま...
-
検索の画面がでなくなってしま...
-
ExcelのBOOKが消えた!
-
MFC ダイアログ上のID取得につ...
-
パソコン関連)何度消してもま...
-
勝手にウィンドウが開いて止ま...
-
[VBA] UserForm を Excel の W...
-
MDI(自作メモ帳)の子ウィンドウ...
-
VBでタスクバーアイコンの数を...
-
エクセルで複数のウィンドウ枠...
-
名前を付けて保存のウィンドウ...
-
「&HFFFF」「&H1A」とは?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
検索の画面がでなくなってしま...
-
勝手にウィンドウが開いて止ま...
-
ゲームでは結局どっちが良いの?
-
Excelの上下を固定したい
-
VBA .Value=.Value ?
-
作成したウインドウのサイズを...
-
Vba LongPtrについて教えてくだ...
-
ExcelのBOOKが消えた!
-
他のアプリケーションの終了処理
-
ラジオボタンの初期指定
-
「&HFFFF」「&H1A」とは?
-
親ウインドウにあるOKボタンを...
-
EnumChildWindowsの使い方(VBA)
-
[VBA] UserForm を Excel の W...
-
MFC ダイアログ上のID取得につ...
-
UWSCで特定のChromeのタブをア...
-
ボタンのハンドルウィンド取得...
-
ExcelVBAでAPIを使って外部ウイ...
おすすめ情報