Faça o ícone antigo desaparecer da bandeja do sistema automaticamente após a reinicialização do SpeedFan

Faça o ícone antigo desaparecer da bandeja do sistema automaticamente após a reinicialização do SpeedFan
@echo off
taskkill /F /T /IM speedfan.exe
start "" "C:\Program Files (x86)\SpeedFan\speedfan.exe"
cls
exit

Eu uso os comandos acima em um arquivo .bat para reiniciar o SpeedFan automaticamente sempre que o computador sai do modo de suspensão.

No entanto, o antigo ícone do SpeedFan na bandeja do sistema não desaparecerá automaticamente quando o novo aparecer. Tenho que mover manualmente o cursor para o ícone antigo para fazê-lo desaparecer. Como posso fazê-lo desaparecer automaticamente?

Acabei de encontrar uma solução simples: baixe NoTrayOrphans.exe dehttp://www.autohotkey.net/~Nazzal/Other/NoTrayOrphans.exe

Meus agradecimentos a todos vocês pela ajuda!

Responder1

Eu tive exatamente o mesmo problema e resolvi-o com uma simples alteração no meu arquivo bat e sem precisar instalar nenhum outro programa.

O problema é que você está executando o taskkill com /f que força (hard) a eliminação da tarefa. Se você matá-lo sem o /f, ele enviará um sinal de fechamento ao aplicativo, o aplicativo sairá limpo e removerá o ícone da bandeja do sistema.

No meu arquivo bat eu executo dois comandos taskkill; o primeiro sem o /f e depois novamente com o /f. Se o primeiro funcionar (o que normalmente deveria), tudo estará bem e o ícone da bandeja do sistema desaparecerá. Se por algum motivo o primeiro falhar, o segundo ainda irá matá-lo, embora nesse caso o ícone da bandeja do sistema não seja removido.

Então, no seu caso, use:
taskkill /T /IM speedfan.exe
taskkill /F /T /IM speedfan.exe

Responder2

Agora, para uma resposta adequada.

Basta usar um script AutoIt simples em vez de taskkill /F /IM:

 WinClose("SpeedFan")

Você só precisa ter certeza de que "Minimizar ao fechar" está desabilitado na configuração do SpeedFan (guia "Opções").


Sinto muito se esta não é uma resposta adequada e não posso comprovar com experiência pessoal, mas você já tentou encontrar uma solução?

A minha abordagem geral seria fazermovimentos virtuais do mouseou use algumChamadas de API do Windowsforçar as janelas aatualizar a área de notificação.

Nunca fiz algo assim, mas depois de algumas pesquisas cheguei a esta string de pesquisa do Google:windows refresh icons "system tray" OR "notification area" autohotkey OR autoit

Um resultado bonito:AHK - ícones da bandeja do sistema ow-to-refresh
Outro: autohotkey.com/board/topic/80624-notrayorphans/(link no tópico acima)

Outros resultados (sem autohotkey OR autoit):

  1. atualizando a bandeja do sistema da área de notificação
  2. forum.lazarus.freepascal.org/index.php?topic=14847.0
  3. blog.stephenklancher.com/2013/08/refreshing-the-notification-area-system-tray/(comexecutável- mas parece não funcionar no Windows 8.1 com shell clássico)

Existe umPossível duplicatano SO (lembro-me de ter visto mais, mas não consigo encontrá-los): stackoverflow.com/questions/74723/can-you-send-a-signal-to-windows-explorer-to-make-it-refresh-the-systray-icons

Infelizmente não posso postar mais links diretos e teria preferido escrever um comentário em vez desta 'resposta'...

Responder3

Coloque o código abaixo em seu arquivo em lote para atualizar a bandeja do sistema. encontrei uma fonte neste link que funciona bem(código colado abaixo do link)

@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

Responder4

O lote a seguir moverá o curador sobre os ícones e os dos programas que foram encerrados serão removidos:

Olhe parahttps://www.nirsoft.net/utils/nircmd.htmlpara funções gratuitas.

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

informação relacionada