Сделайте так, чтобы старый значок автоматически исчезал из системного трея после перезапуска 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-файла и без необходимости установки каких-либо других программ.

Проблема в том, что вы запускаете taskkill с /f, что принудительно (жестко) убивает задачу. Если вы убиваете ее без /f, она отправляет сигнал закрытия приложению, приложение завершается корректно и удаляет свой значок в системном трее.

В своем bat-файле я делаю две команды taskkill: первую без /f, а затем снова с /f. Если первая срабатывает (а обычно так и должно быть), то все хорошо, и значок в системном трее исчезает. Если по какой-то причине первая не срабатывает, вторая все равно убьет его, хотя в этом случае значок в системном трее не будет удален.

Итак, в вашем случае используйте:
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

Один неплохой результат:AHK - значки-системного-трея-необходимо-обновить
Еще один: 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 с классической оболочкой)

EстьВозможный дубликатна 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

Связанный контент