web-dev-qa-db-ja.com

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

@echo off
taskkill /F /T /IM speedfan.exe
start "" "C:\Program Files (x86)\SpeedFan\speedfan.exe"
cls
exit

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

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

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

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

5
Matthew Wai

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

問題は、/ fを使用してtaskkillを実行していることです。これにより、強制的に(ハード)タスクが強制終了されます。/fを指定せずに強制終了すると、アプリケーションにクローズシグナルが送信され、アプリケーションは正常に終了し、システムトレイアイコンが削除されます。

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

したがって、あなたの場合、以下を使用してください。
taskkill/T/IM speedfan.exe
taskkill/F/T/IM speedfan.exe

1
RBorchert

今、適切な答えがあります。

taskkill /F /IMの代わりに単純なAutoItスクリプトを使用するだけです。

 WinClose("SpeedFan")

SpeedFan構成(「オプション」-タブ)で「閉じるときに最小化」が無効になっていることを確認する必要があります。


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

私の一般的なアプローチは、仮想マウスの動きを作成するか、いくつかのWindows-api呼び出しを使用してウィンドウを強制的に通知領域を更新にすることです。

私はそのようなことをしたことがありませんが、数回検索した後、このGoogle検索文字列に到達しました:windows refresh icons "system tray" OR "notification area" autohotkey OR autoit

見栄えの良い結果の1つ: AHK --ow-to-refresh-system-tray-icons
もう1つ:autohotkey.com/board/topic/80624-notrayorphans/(上からスレッドにリンクされています)

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

  1. refreshing-the-notification-area-system-tray
  2. forum.lazarus.freepascal.org/index.php?topic=14847.0
  3. blog.stephenklancher.com/2013/08/refreshing-the-notification-area-system-tray/(with executable-しかし、クラシックシェルを搭載したWindows 8.1では機能しないようです)

SOにPossible Duplicateがあります(もっと見たのを覚えていますが、見つけられないようです):stackoverflow.com/questions/74723/can-you-send-a-signal-to-windows-Explorer-to-make-it-refresh-the-systray-icons

残念ながら、これ以上直接リンクを投稿することはできず、この「回答」の代わりにコメントを書くことをお勧めします...

1
Limer

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

@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
0
RegencySoftware