SpeedFan の再起動後にシステムトレイから古いアイコンを自動的に消す

SpeedFan の再起動後にシステムトレイから古いアイコンを自動的に消す
@echo off
taskkill /F /T /IM speedfan.exe
start "" "C:\Program Files (x86)\SpeedFan\speedfan.exe"
cls
exit

上記のコマンドを .bat ファイルで使用すると、コンピューターがスリープ モードから復帰するたびに SpeedFan が自動的に再起動されます。

ただし、システム トレイの古い SpeedFan アイコンは、新しいアイコンが表示されても自動的には消えません。古いアイコンを消すには、カーソルを手動で移動する必要があります。自動的に消すにはどうすればよいですか?

簡単な解決策を見つけました。NoTrayOrphans.exeをダウンロードしてください。http://www.autohotkey.net/~Nazzal/Other/NoTrayOrphans.exe

ご協力いただいた皆様に感謝いたします!

答え1

私もまったく同じ問題を抱えていましたが、他のプログラムをインストールすることなく、bat ファイルに簡単な変更を加えるだけで解決しました。

問題は、タスクを強制的に (ハードに) 終了する /f 付きで taskkill を実行していることです。 /f なしで終了すると、アプリケーションに終了信号が送信され、アプリケーションは正常に終了し、システム トレイ アイコンが削除されます。

私の bat ファイルでは、2 つの taskkill コマンドを実行します。1 回目は /f なしで、2 回目は /f ありです。最初のコマンドが機能すれば (通常は機能するはずです)、すべて正常に終了し、システム トレイ アイコンは消えます。何らかの理由で最初のコマンドが失敗した場合でも、2 番目のコマンドでタスクが強制終了されますが、その場合、システム トレイ アイコンは削除されません。

したがって、あなたの場合は、次を使用します:
taskkill /T /IM speedfan.exe
taskkill /F /T /IM speedfan.exe

答え2

さて、適切な答えを。

代わりに、単純な AutoIt スクリプトを使用しますtaskkill /F /IM:

 WinClose("SpeedFan")

SpeedFan 設定 ([オプション] タブ) で [閉じるときに最小化] が無効になっていることを確認するだけです。


これが適切な回答ではなく、個人的な経験で裏付けることができない場合は申し訳ありませんが、解決策を見つけようとしたことはありますか?

私の一般的なアプローチは仮想マウスの動きまたはいくつか使用Windows API 呼び出しウィンドウを強制的に通知領域を更新する

私はそのようなことはしたことがありませんでしたが、いくつか検索した後、次の Google 検索文字列にたどり着きました。windows refresh icons "system tray" OR "notification area" autohotkey OR autoit

見栄えの良い結果が 1 つあります。AHK - システムトレイアイコンを更新する方法
もう 1 つ: autohotkey.com/board/topic/80624-notrayorphans/(上記のスレッドにリンクされています)

その他の結果( なしautohotkey OR autoit):

  1. システムトレイの通知領域を更新する
  2. forum.lazarus.freepascal.org/index.php?topic=14847.0
  3. blog.stephenklancher.com/2013/08/refreshing-the-notification-area-system-tray/(と実行可能- ただし、クラシック シェルを搭載した Windows 8.1 では動作しないようです)

そこには重複の可能性ありSO で (もっと見た覚えがあるのですが、見つけられないようです): stackoverflow.com/questions/74723/can-you-send-a-signal-to-windows-explorer-to-make-it-refresh-the-systray-icons

残念ながら、これ以上直接リンクを投稿することはできません。この「回答」の代わりにコメントを書きたかったのですが...

答え3

システムトレイを更新するには、以下のコードをバッチ ファイルに配置します。 このリンクでうまく機能するソースを見つけました(リンクから以下のコードを貼り付けました)

@echo off
reg export "HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify" %userprofile%\desktop\traynotify.reg /y
reg delete "HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify" /v IconStreams /f
reg delete "HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify" /v PastIconsStream /f
taskkill /f /im explorer.exe
start explorer.exe
exit

答え4

次のバッチは、キュアをアイコン上に移動し、終了したプログラムのものは削除されます。

見るhttps://www.nirsoft.net/utils/nircmd.html無料機能用。

SET "_NirCmd=D:\_NirSoft\nircmd-x64\nircmd.exe"

:: For the Taskbar on the bottom scan left -> right<br/>
%_NirCmd% SETCURSOR 1445, 1060<br/>
FOR /L %%C in (1,1,20) DO %_NirCmd% MOVECURSOR 20, 0<br/>
%_NirCmd% SETCURSOR 1445, 1060        <=== Just to move out of the way

:: For the Taskbar on the right scan two columns top -> down
%_NirCmd% SETCURSOR 1895, 800<br/>
FOR /L %%C in (1,1,20) DO %_NirCmd% MOVECURSOR 0, 10<br/>
%_NirCmd% SETCURSOR 1870, 800<br/>
FOR /L %%C in (1,1,20) DO %_NirCmd% MOVECURSOR 0, 10<br/>
%_NirCmd% SETCURSOR 1895, 800         <=== Just to move out of the way

関連情報