0%

便携软件实现开机后台自启

前言

使用过便携软件不知是否留意过,便携软件设计的初衷是为了在软件工作在U盘上,为了“不给系统留下痕迹”,故去除了开机自启,文件关联机制,响应系统注销、关机、重启事件,右键菜单。

但是,使用便携软件的目的是为了重装安装系统不用重装安装软件,并且保留个人使用数据。而便携软件不能实现的功能是日常使用软件的刚需。

所以便有了以下的探讨。

实现便携软件开机后台自启(以AirExplorer Portable为例)

实现功能:

  1. 响应系统注销、关机、重启事件,自动退出程序
  2. 窗口最小化时隐藏到托盘
  3. 单击托盘图标显示窗口
  4. 右键退出托盘图标时,自动退出程序

解决问题:

  1. 便携软件非正常(强制退出)时,下次启动报错。–XXX did not closed properly

  2. 部分软件没有最小化托盘的功能

  3. 便携软件默认开机启动会打开主界面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
;=====================================================================
; AirExplorer Portable Tray
; Author:zzz
; date:2018-8-31
; 使用方法:将AHK放在AirExplorerPortable.exe目录中运行
; 理论上支持所有AirExplorer版本,包括以后发布的版本
;---------------------------------------------------------------------
#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%
DllCall("kernel32.dll\SetProcessShutdownParameters", UInt, 0x4FF, UInt, 0)
#SingleInstance ignore
;设置脚本运行时托盘图标
menu,tray,icon,App\AppInfo\appicon.ico
;title must contain
SetTitleMatchMode, 2
;启动便携软件
Run, AirExplorerPortable.exe
;等待便携软件启动成功
WinWait, ahk_exe AirExplorer.exe
;WinMinimize, ahk_exe AirExplorer.exe
;便携软件启动成功后立即隐藏到托盘图标
WinHide, ahk_exe Thunderbird.exe
;托盘程序右键退出时执行命令
OnExit, ExitSub
;检测便携软件窗口状态,最小化时自动隐藏到托盘
OnMessage(0x404, "AHK_NOTIFYICON")
;检测系统注销、关机、重启事件,响应并安全退出程序
OnMessage(0x11, "WM_QUERYENDSESSION")
;单击托盘图标,显示窗口
AHK_NOTIFYICON(wParam, lParam)
{
if (lParam = 0x202) ; WM_LBUTTONUP
{
WinShow, Air Explorer
WinActivate, Air Explorer
}
}
;响应系统注销、关机、重启事件,正常退出程序
WM_QUERYENDSESSION(wParam, lParam)
{
ENDSESSION_LOGOFF = 0x80000000
Process,Close,AirExplorer.exe
Process,WaitClose,AirExplorerPortable.exe
}

ProcessExist(Name){
Process,Exist,%Name%
return Errorlevel
}
;检测程序窗口状态,并执行相应指令
Loop
{
If !ProcessExist("AirExplorer.exe")
{
ExitApp
}
WinGet, winState, MinMax, ahk_exe AirExplorer.exe
if (winState = -1)
{
WinHide, Air Explorer
}
sleep 500
}

;右键托盘图标退出时执行的操作
ExitSub:
WinClose, ahk_exe AirExplorer.exe
Process,close,AirExplorer.exe
ExitApp

更新历史

  • 2020-3-16:内容及排版调整
  • 2018-8-31:AHK以及BAT代码讲解

欢迎关注我的其它发布渠道