Fazer uma recarga sem piscar o ícone da bandeja - Script Autohotkey

0

Eu quero fazer um Recarregar Sem Flashing O ícone da bandeja , no meu sistema Windows 10 de 64 bits.

Existe um script Autohotkey simples que eu posso usar.

eu não quero, se eu executar o Recarregar Comando , que Meu ícone de Autohotkey Desaparecer e, em um determinado momento, aparecerá de volta. (e ele reordenará todos os outros ícones da Bandeja na barra de tarefas.)

Se você executar este script Ahk e clicar na tecla [F1], poderá ver o que quero dizer.

#SingleInstance force

;if you have Many variables +-1000x and you want to clean them.
;you can use the Reload Command to empty them.
;but i do not want that the System Tray will be Flashing. and it will reordered all my other Tray icons.

f1:: ;Restart script and clear all variables.
reload
return

f2::
a1 := 100
;a.... := ....
a1000 := 100
return


~esc::exitapp

.

Grite que não seja ótimo se você puder escrever um Script Ahk que possa Recarregar e Ignorar o Ícone da Bandeja, se já existir na Barra de Tarefas do Sistema por que gritar, queremos recarregá-lo novamente, ou se você puder usar um comando, algo como isto [ReloadIgnoreTray] ou [#ReloadIgnoreTray] assim como [#notrayicon]

Talvez os Criadores que fizeram o Autohotkey possam mudar ou o comando Atualizar esse Recarregamento, o comando Recarregar só precise fazer isso, primeiro olhe para o Nome do Ícone da Bandeja, se existir, e Ignorar Recarregar o Ícone da Bandeja. (a única pergunta é, é possível alterar o TrayMenus sem precisar recarregar o ícone da bandeja)

    
por Philip Lavour 23.01.2018 / 17:35

2 respostas

1

Se você quiser fazer um recarregamento sem piscar o ícone da bandeja.

Você pode fazer isso com um pequeno truque.

Você pode Resolvê-lo com um (ícone de bandeja externa com menus de bandeja)

Tente estes dois scripts Ahk e você está pronto para ir.

Não precisa mais ser aborrecido Escrever muitas linhas de código para Limpar todas as suas variáveis ou qualquer outra coisa.

  • Example1.ahk - é o seu script principal. (Isso tem um comando #Notrayicon para ocultar o ícone da bandeja.)

  • Example1Tray.ahk é o script externo. (se você executar isso, executar automaticamente o script principal)

Nota - Este é apenas um exemplo simples para mostrar que você pode fazer isso.

Example1.ahk

#Notrayicon
#SingleInstance force

;Click on <esc> key - to exit
;Click on <f1> key - to do an Reload Without Flashing Tray Icon
;Click on <f2> key - to do put the variables
;Click on <f3> key - to show if the variables is be Cleared

;Tip - if you change the Name Example1.ahk into Example2.ahk 
;Then you can use ReplaceAll Function in Notepad - ReplaceAll Example1 to Example2

WriteReg_Example1("Suspend","0")
WriteReg_Example1("Exit","0")

mode=1


loop
{
;----------------
RegRead, x, HKEY_CURRENT_USER,software\Example1,Suspend ; read SuspendValue
if x=1
{
WriteReg_Example1("Suspend","0")
x=0
Suspend
}
;----------------

;----------------
RegRead, x, HKEY_CURRENT_USER,software\Example1,Exit ; read ExitValue
if x=1
{
exitapp
WriteReg_Example1("Exit","0")
x=0
}
;----------------

} ;End Loop

;if you have Many variables +-1000x and you want to clean them.
;you can use the Reload Command to empty them.
;but i do not want that the System Tray will be Flashing. and it will reordered all my other Tray icons.


;----------------------------------
#if mode
f1:: ;Restart script and clear all variables.
reload
return

f2::
a1 := 100
;a.... := ....
a1000 := 100
msgbox a1 = %a1% to a1000 = %a1000%
return

f3::
msgbox a1 = %a1% to a1000 = %a1000%
return


~esc::exitapp
#if
;----------------------------------

;----------------------------------
WriteReg_Example1(KeyName,KeyValue)
{
RegWrite, REG_SZ, HKEY_CURRENT_USER,software\Example1,%KeyName%,%KeyValue%  ;write Registry for External Program
}
;---------------------------------

Example1Tray.ahk

;#Notrayicon
#Persistent
OnExit, DoExitExternal
#SingleInstance force
mode=1

;Tip - if you change the Name Example1.ahk into Example2.ahk 
;Then you can use ReplaceAll Function in Notepad - ReplaceAll Example1 to Example2 and it is done!

WriteReg_Example1("Suspend","0")
WriteReg_Example1("Exit","0")

Menu, Tray, NoStandard ; Remove the Standard Menu items

Menu, Tray, Add , H&elp, DoHelp
Menu, Tray, Add , W&indow Spy, DoWindowSpy
Menu, Tray, Add , S&uspend Script, DoSuspendExternal 
Menu, Tray, Add , E&xit, DoExitExternal 

;----------------
#If WinNotExist Example1.ahk 
{
run Example1.ahk 
}
;----------------

loop
{
} ;End Loop

;----------------
DoHelp:
run C:\Program Files\AutoHotkey\AutoHotkey.chm
return
;----------------

;----------------
DoWindowSpy:
run C:\Program Files\AutoHotkey\AU3_Spy.exe
return
;----------------

;----------------
DoSuspendExternal:
WriteReg_Example1("Suspend","1")
if a=1
{
Menu, Tray, Icon , Shell32.dll, 29, 1
a=0
}else{
Menu, Tray, Icon, Shell32.dll, 132, 1
a=1
}
return
;----------------

;----------------
DoExitExternal:
WriteReg_Example1("Suspend","0")
WriteReg_Example1("Exit","1")
sleep 250
ExitApp
return
;----------------

;----------------------------------
WriteReg_Example1(KeyName,KeyValue)
{
RegWrite, REG_SZ, HKEY_CURRENT_USER,software\Example1,%KeyName%,%KeyValue%  ;write Registry for External Program
}
;----------------------------------

;----------------------------------
#if mode
~esc::
gosub DoExitExternal
return
#if
;----------------------------------
    
por 25.01.2018 / 17:45
1

O que você está tentando realizar com a recarga?

Você provavelmente não conseguirá modificar (com facilidade) o comportamento padrão de recarregamento do comando reload integrado ao AutoHotkey, mas é possível re-inicializar todas as variáveis conforme necessário chamando uma chamada de função e possivelmente apenas adicionando-a para o menu da bandeja como uma opção "Recarregamento suave" que limpará as variáveis de estado internas que você deseja limpar.

Se você estivesse tentando fechar automaticamente os diálogos e coisas dessa natureza, pode ser um pouco mais complicado.

Gostaria de começar adicionando uma opção ao menu da bandeja e obtendo uma função externa que será executada quando você selecionar essa opção e, em seguida, adicionando código a essa função para redefinir o que gostaria de redefinir, sem forçar um recarregamento completo que redefinirá a posição do ícone da bandeja.

Main:

    Menu, Tray, Add, SoftRestart, myFuncSoftRestart
Return

f1::reload

f2::
    a := 100
    a100 := 100
return    

myFuncSoftRestart() {       ; use this function to clear internal state variables
    a :=""
    a100 := ""
}
    
por 24.01.2018 / 06:21