
@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
):
- atualizando a bandeja do sistema da área de notificação
forum.lazarus.freepascal.org/index.php?topic=14847.0
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