重新加载而不闪烁托盘图标 - Autohotkey 脚本

重新加载而不闪烁托盘图标 - Autohotkey 脚本

我想做一个重新加载没有闪烁任务栏图标,在我的 Windows 10 64 位系统上。

有没有我可以使用的简单的 Autohotkey 脚本。

我不想,如果我运行重新加载命令,我的 Autohotkey 托盘图标确实消失了,然后在一定时间内又会出现。 (并且它会重新排序任务栏上所有其他托盘图标。)

如果您运行此 Ahk 脚本并单击 [F1] 键,您就会明白我的意思。

#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

如果你能写一个可以重新加载并忽略托盘图标的 Ahk 脚本就好了,如果它已经存在于系统任务栏上,为什么还要重新加载它呢?或者如果你可以使用命令,比如 [ReloadIgnoreTray] 或 [#ReloadIgnoreTray],就像 [#notrayicon]

也许制作 Autohotkey 的创建者可以更改或升级该 Reload 命令,Reload 命令必须只执行此操作,首先查看该托盘图标的名称(如果存在),然后忽略重新加载托盘图标。(唯一的问题是,是否有可能在不必重新加载该托盘图标的情况下更改 TrayMenus)

答案1

如果您想在不闪现托盘图标的情况下重新加载。

您可以使用一些小技巧来做到这一点。

您可以使用(带有托盘菜单的外部托盘图标)解决此问题

尝试一下这两个 Ahk 脚本,就可以开始了。

不再需要麻烦地编写许多代码行来清除所有变量或其他任何内容。

  • Example1.ahk - 是你的主脚本。(它有一个#Notrayicon命令隐藏托盘图标。

  • Example1Tray.ahk 是外部脚本。(如果运行此脚本,它将自动运行主脚本)

注意-这只是一个简单的示例,向您展示您可以做到这一点。

例1.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
}
;---------------------------------

示例1Tray.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
;----------------------------------

答案2

您想通过重新加载实现什么目的?

您可能无法(轻松地)修改 AutoHotkey 中内置的重新加载命令的默认重新加载行为,但您可以根据需要通过调用函数调用重新初始化所有变量,并可能只是将其添加到托盘菜单作为“软重新加载”选项,这将清除您想要清除的内部状态变量。

如果您尝试自动关闭对话框和类似的东西,可能会有点复杂。

我将首先在托盘菜单中添加一个选项,并获取一个在您选择该选项时执行的外部函数,然后向该函数添加代码以重置您想要重置的内容,而无需强制完全重新加载以重置托盘图标的位置。

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 := ""
}

相关内容