2024.10.31 文件管理方案
2024.10.31 文件管理方案
文件管理方案
(注意: 红色文字为应用程序软件的名称)
- 金山文档
请在使用微信扫码登录的金山文档中新建或导入需要长时间大量编辑、长期记录或者分享给他人和他人一起查看/编辑的文档或表格。WPS文档表格打开文件密码和7-ZIP解压缩密码可以使用第37号超级复杂密码,已加密的WPS文档表格拖放到金山文档后打开文件需要密码的设置仍然有效。在QQ拼音输入法状态下输入 rq空格来快速输入当前日期(1位月日前有0)。
- 文件访问
- 在单位西南办公室台式电脑上访问文件:
鼠标拖放文件夹“\\192.168.10.9\hdd1-rw-8tb\_分类整理\办公\01-单位\2024年”到Maye Lite软件窗口左上角。
鼠标拖放文件夹“\\192.168.10.9\hdd1-rw-8tb\_分类整理\办公\01-单位\2024年”到Total Commander的工具栏并设置文件夹双向同步图标。
- 在家里15寸MacBook Pro笔记本电脑上访问文件:
安装RaiDrive V2023.9.250并远程连接群晖NAS
添加》NAS》WebDAV》地址 https://yyxl.myds.me:5986》用户名nas》密码:??.l?P37###6
- 在小米手机或者小米平板上访问文件:
ES文件浏览器 V4.4.2.14》左上角主菜单》FTP》新建》webdav》服务器 yyuxl.myds.me》端口5986》打钩选中 加密(https)》用户名nas》密码:??.l?P37###6 》重命名:NAS WebDAV DDNS
ES文件浏览器 V4.4.2.14》左上角主菜单》FTP》新建》webdav》服务器 yyxl.asuscomm.com》端口5986》打钩选中 加密(https)》用户名nas》密码:??.l?P37###6 》重命名:AC86U WebDAV DDNS
三、传输文件
1、FileZilla Pro 3.67.1
Ctrl + S (站点管理器)》新站点》常规》协议WebDAV》主机 yyxl.myds.me》端口 5986 》加密 使用安全的HTTPS》登录类型 正常》用户 nas 》密码 ??.l?P37###6
四、远程控制电脑
1、向日葵控控A2
2、零层壹号VPN + MSTSC
五、其他设置
1、请经常调整各个窗口的大小和位置到最佳状态,状态栏调宽到两行,切换时先看图标。
2、设置Maye Lite的快捷键热键为~,在AutoHotkey脚本RegHotkey中设置“D:\单位办公”文件夹的快捷键热键为F1,设置Everything的快捷键热键为F3,设置Total Commander的快捷键热键为F4。
3、不易重新取得的、重要的文件和文件夹可以用7-ZIP右键菜单原地打包压缩成7z压缩包。
4、假如暂时没有群晖NAS服务器也可以用Windows功能IIS万维网服务WebDAV发布来创建WebDAV文件服务。
5、安装“WPS-Office-教育考试专用版办公软件-MD5-A80A8”用于编辑文档表格。
设置文档 .docx关联C:\Users\Administrator\AppData\Local\Kingsoft\WPS Office\11.1.0.10009\office6\wps.exe。
6、为了保护Windows操作系统和应用程序请用Acronis Ture Image 2021 (版本39184) for WinPE(MD5: 2722C)备份系统分区C盘之后再安装、设置、测试 Shadow Defender 影子卫士软件。
;======== 设置显示或者隐藏MasterSeeker和Total Commander主窗口的快捷键的AutoHotkey脚本2024.10.21 =========
; 此脚本从此行开始
; D:\app\RegHotkey\RegHotkey.ahk
; 鼠标右击AHK托盘图标显示菜单并提示所有快捷键
; AutoHotkey版本1.1
;======== 强制自身以 U64 + 管理员权限 运行,编译此脚本时选择 ANSI 32位 =========
runwith("admin","U64")
MsgBox,0,. 快捷键提示:,~ Maye Lite`n`nF1 D:\单位办公`n`nF3 MasterSeeker`n`nF4 Total Commander`n`n双击Ctrl 关闭显示器屏幕`n`nAlt+Z 退出此脚本,3
;-----------------------------------
; 多进程热键——快速响应随时中止 v2.1 By FeiYue
;
; 1、一般的多进程热键,每次按热键都会重新启动一个进程
; 这会造成热键响应延迟,和频繁启动、退出进程。
; 这个库利用线程叠加和双进程交替重启的设计解决了上述问题
;
; 2、Go.Go("标签名或函数名", 序号可省略) 启动子进程
; Go.Go("清理标签或为空", 序号可省略) 停止子进程
;-----------------------------------
Class Go { ;// 类开始
init() {
static h:=Go.init()
#NoEnv
#NoTrayIcon
#SingleInstance force
#MaxThreads 255
if (A_Args.Length()>0)
{
Suspend, On
flag:="Ahk_Sub"
s:=RegExReplace(A_Args[1], "\s")
this.WinKill(flag "[" s "]")
r:=this.Menu_Go.Bind(this)
Menu, MyMenu, Add, Run, % r
Gui, %flag%: Add, Text, 0x80 -Wrap
Gui, %flag%: Menu, MyMenu
Gui, %flag%: Show, Hide, % flag "[" s "]"
return
Ahk_SubGuiClose:
Critical
WinMenuSelectItem,,, 1&
return
}
else
{
flag:="Ahk_Main"
this.WinKill(flag)
Gui, %flag%: Show, Hide, % flag
OnExit(this.WinKill.Bind(this,"Ahk_Sub"))
Menu, Tray, Icon
}
}
Menu_Go() {
ControlGetText, s
s:=Trim(s)
if (s="Reload")
{
WinGetTitle, s
this.RunAhk(RegExReplace(s,"Ahk_Sub\[|]"))
ExitApp
}
if IsLabel(s)
gosub, %s%
else if IsFunc(s)
%s%()
loop
Sleep, 60000
}
WinKill(flag) {
DetectHiddenWindows, On
WinGet, list, List, % flag " ahk_class AutoHotkeyGUI"
loop % list
IfWinExist, % "ahk_id " list%A_Index%
{
WinGet, pid, PID
WinClose, ahk_class AutoHotkey ahk_pid %pid%,, 3
IfWinExist,,, Process, Close, %pid%
}
DetectHiddenWindows, Off
}
RunAhk(s="") {
if (A_IsCompiled)
Run, "%A_ScriptFullPath%" /f %s%
else
Run, "%A_AhkPath%" /f "%A_ScriptFullPath%" %s%
}
; 一个进程叠加超过100个线程就切换另一个进程,原进程重启
Go(LabelOrFuncName="", index=0) {
static arr:=[]
DetectHiddenWindows, On
SetFormat, IntegerFast, d
index:=Floor(index), (!arr[index] && arr[index]:=[0,0])
, ii:=Floor(arr[index][1]), jj:=Floor(arr[index][2])
, tt:="Ahk_Sub[" index "_" jj "]"
if (++ii>100)
{
IfWinExist, % tt
{
ControlSetText,, Reload
WinClose
}
else
this.RunAhk(index "_" jj)
arr[index][2]:=jj:=!jj, ii:=1
, tt:="Ahk_Sub[" index "_" jj "]"
}
arr[index][1]:=ii
IfWinNotExist, % tt
{
this.RunAhk(index "_" jj)
WinWait, % tt,, 3
}
IfWinExist, % tt
{
ControlSetText,, % LabelOrFuncName
WinClose
}
DetectHiddenWindows, Off
}
} ;// 类结束
;======== 添加托盘图标右键菜单 =========
; 鼠标右击AHK托盘图标显示菜单并提示所有快捷键
Menu, Tray, Add,按Alt+Z终止此脚本, ExitAppMenuHandler ; 创建新菜单项.
Menu, Tray, Add,双击Ctrl键2秒后关闭显示器屏幕电源, PowerOffDisplay ; 创建新菜单项.
Menu, Tray, Add,按~键显示或者隐藏Maye Lite, PowerOffDisplay ; 请在Maye Lite中设置快捷键热键
Menu, Tray, Add,按F1键显示或者隐藏D:\单位办公, aaa ; 创建新菜单项.
Menu, Tray, Add,按F3键显示或者隐藏MasterSeeker, bbb ; 创建新菜单项.
Menu, Tray, Add,按F4键显示或者隐藏Total Commander, ccc ; 创建新菜单项.
Hotkey,!z,ExitAppMenuHandler
ExitAppMenuHandler()
{
ExitApp
}
;======== 设置关闭显示器的快捷键为 双击 Ctrl键 =========
Control::
if (A_PriorHotkey <> "Control" or A_TimeSincePriorHotkey > 400)
{ KeyWait, Control
return
}
; MsgBox 双击
Go.Go("PowerOffDisplay")
return
PowerOffDisplay:
Sleep,2000 ;暂停2秒,防止受键盘操作影响,关闭显示器后又立即开启。
;~ 关闭显示器
SendMessage, 0x112, 0xF170, 2,, Program Manager
return
;======== 设置显示或者隐藏 D:\单位办公 文件夹窗口的快捷键为 F1 键 =========
; (F1键位于键盘主键区数字键1正上方)
F1::Go.Go("aaa")
aaa:
; WinGetPos, , , W, ,ahk_exe MasterSeeker.exe
; if (WinActive("MasterSeeker 1.5.1 by DxCK" ahk_exe MasterSeeker.exe) and W>700)
IfWinActive,2024年
{
; WinHide,ahk_exe MasterSeeker.exe
WinMinimize,2024年
}
else
{
Run,\\192.168.10.9\hdd1-rw-8tb\_分类整理\办公\01-单位\2024年,,Max
Sleep,200
WinMove,单位办公,,A_ScreenWidth/2,20,A_ScreenWidth/2-10,A_ScreenHeight-90
}
return
;======== 设置显示或者隐藏 MasterSeeker 主窗口的快捷键为 F3 键 =========
; (F3键位于键盘主键区数字键4正上方)
F3::Go.Go("bbb")
bbb:
; WinGetPos, , , W, ,MasterSeeker 1.5.1 by DxCK ahk_exe MasterSeeker.exe
; if (WinActive("MasterSeeker 1.5.1 by DxCK" ahk_exe MasterSeeker.exe) and W>700)
IfWinActive,MasterSeeker 1.5.1 by DxCK ahk_exe MasterSeeker.exe
{
; WinHide,MasterSeeker 1.5.1 by DxCK ahk_exe MasterSeeker.exe
WinMinimize,MasterSeeker 1.5.1 by DxCK ahk_exe MasterSeeker.exe
}
else
{
DetectHiddenWindows,On
SetTitleMatchMode,2
IfWinNotExist,ahk_exe MasterSeeker.exe
{
IfWinNotExist,MasterSeeker 1.5.1 by DxCK
{
IfWinNotExist,ahk_exe MasterSeeker.exe
{
IfWinNotExist,MasterSeeker 1.5.1 by DxCK
{
IfExist,D:\APP\MasterSeeker\MasterSeeker.exe
{
Run,D:\APP\MasterSeeker\MasterSeeker.exe
}
else
{
MsgBox,0,,找不到文件 D:\APP\MasterSeeker\MasterSeeker64.exe,5
ExitApp
}
}
}
}
}
SetTimer,WinActivateMasterSeeker,Delete
SetTimer,WinActivateMasterSeeker,500
}
return
WinActivateMasterSeeker()
{
WinShow,MasterSeeker 1.5.1 by DxCK ahk_exe MasterSeeker.exe
WinGet, WinMSID, ID,MasterSeeker 1.5.1 by DxCK ahk_exe MasterSeeker.exe
DllCall("SwitchToThisWindow", "UInt", WinMSID, "UInt", 1)
WinActivate,MasterSeeker 1.5.1 by DxCK ahk_exe MasterSeeker.exe
WinMove,MasterSeeker 1.5.1 by DxCK ahk_exe MasterSeeker.exe,,0,0,A_ScreenWidth,A_ScreenHeight
WinMaximize,MasterSeeker 1.5.1 by DxCK ahk_exe MasterSeeker.exe
IfWinActive,MasterSeeker 1.5.1 by DxCK ahk_exe MasterSeeker.exe
{
loop,5
{
WinMove,MasterSeeker 1.5.1 by DxCK ahk_exe MasterSeeker.exe,,A_ScreenWidth/2,20,A_ScreenWidth/2-10,A_ScreenHeight-90
; 注意: MasterSeeker 的搜索框控件的名是 Filename ,很奇怪,很神奇,
; MasterSeeker 的搜索框控件不是类名 MasterSeeker 1.5.1 by DxCK ahk_exe MasterSeeker.exe7,也不是类名 Edit1
; ControlFocus,In Directory,MasterSeeker 1.5.1 by DxCK ahk_exe MasterSeeker.exe
; 设置输入焦点到窗口的指定控件上.
ControlFocus,Filename,MasterSeeker 1.5.1 by DxCK ahk_exe MasterSeeker.exe
}
ControlSend,Filename,{LControl Down}a{LControl Up},MasterSeeker 1.5.1 by DxCK ahk_exe MasterSeeker.exe
SetTimer,WinActivateMasterSeeker,Delete
Go.Go()
return
}
}
;======== 设置显示或者隐藏 Total Commander 11.01 主窗口的快捷键为 F4 键 =========
;(F4键位于键盘主键区数字键5正上方
; Total Commander 11.01使用支持按照“拼音首字母”序列筛选过滤文件列表的增强版QuickSearch eXtended 2.2.7插件)
F4::Go.Go("ccc")
ccc:
; WinGetPos, , , W, ,Total Commander (x64) ahk_exe TotalCMD64.exe
; if (WinActive("Total Commander (x64)" ahk_exe TotalCMD64.exe) and W>400)
DetectHiddenWindows,On
SetTitleMatchMode,2
;等待指定标题窗口出现
;WinWait, Total Commander - User ahk_class TTOTAL_CMD ahk_exe TOTALCMD64.EXE, [软件] 2.47
IfWinActive,Total Commander ahk_class TTOTAL_CMD ahk_exe TotalCMD64.exe
{
WinMinimize,Total Commander ahk_class TTOTAL_CMD ahk_exe TotalCMD64.exe
}
else
{
DetectHiddenWindows,On
SetTitleMatchMode,2
WinShow,Total Commander ahk_class TTOTAL_CMD ahk_exe TotalCMD64.exe
WinGet, WinTCID, ID,Total Commander ahk_class TTOTAL_CMD ahk_exe TotalCMD64.exe
DllCall("SwitchToThisWindow", "UInt", WinTCID, "UInt", 1)
WinActivate,Total Commander ahk_class TTOTAL_CMD ahk_exe TotalCMD64.exe
WinMove,Total Commander ahk_class TTOTAL_CMD ahk_exe TotalCMD64.exe,,0,0,A_ScreenWidth,A_ScreenHeight
WinMaximize,Total Commander ahk_class TTOTAL_CMD ahk_exe TotalCMD64.exe
IfWinNotExist,Total Commander ahk_class TTOTAL_CMD ahk_exe TotalCMD64.exe
{
IfWinNotExist,ahk_exe TOTALCMD64.EXE
{
IfExist,D:\APP\TotalCMD\TotalCMD64.exe
{
Run,D:\APP\TotalCMD\TotalCMD64.exe,Max
SetTimer,WinActivateTC,Delete
SetTimer,WinActivateTC,500
Go.Go()
return
}
else
{
MsgBox,0,,找不到文件 D:\APP\TotalCMD\TotalCMD64.exe,5
ExitApp
}
}
}
}
Go.Go()
return
WinActivateTC()
{
DetectHiddenWindows,On
SetTitleMatchMode,2
WinShow,Total Commander ahk_class TTOTAL_CMD ahk_exe TotalCMD64.exe
WinGet, WinTCID, ID,Total Commander ahk_class TTOTAL_CMD ahk_exe TotalCMD64.exe
DllCall("SwitchToThisWindow", "UInt", WinTCID, "UInt", 1)
WinActivate,Total Commander ahk_class TTOTAL_CMD ahk_exe TotalCMD64.exe
WinMove,Total Commander ahk_class TTOTAL_CMD ahk_exe TotalCMD64.exe,,0,0,A_ScreenWidth,A_ScreenHeight
WinMaximize,Total Commander ahk_class TTOTAL_CMD ahk_exe TotalCMD64.exe
WinGetPos,X,Y,W,H,Total Commander ahk_class TTOTAL_CMD ahk_exe TotalCMD64.exe
if (W>A_ScreenWidth-1)
{
IfWinActive,Total Commander ahk_class TTOTAL_CMD ahk_exe TotalCMD64.exe
{
SetTimer,WinActivateTC,Delete
Go.Go()
return
}
}
}
; ===============================================================
; 强制自身进程以 管理员权限 或 普通权限 或 ANSI 或 U32 或 U64 版本运行。
; 例1: runwith("admin","u32") 强制自身以 u32 + 管理员权限 运行。
; 例2: runwith("","ansi") 强制自身以 ansi 版本运行(权限不变)。
; 例3: runwith("normal") 强制自身以 普通权限 运行(版本不变)。
RunWith(RunAsAdmin:="Default", ANSI_U32_U64:="Default")
{
; 格式化预期的模式
switch, RunAsAdmin
{
case "Normal","Standard","No","0": RunAsAdmin:=0
case "Admin","Yes","1": RunAsAdmin:=1
case "default": RunAsAdmin:=A_IsAdmin
default: RunAsAdmin:=A_IsAdmin
}
switch, ANSI_U32_U64
{
case "A32","ANSI","A": ANSI_U32_U64:="AutoHotkeyA32.exe"
case "U32","X32","32": ANSI_U32_U64:="AutoHotkeyU32.exe"
case "U64","X64","64": ANSI_U32_U64:="AutoHotkeyU64.exe"
case "default": ANSI_U32_U64:="AutoHotkey.exe"
default: ANSI_U32_U64:="AutoHotkey.exe"
}
; 获取传递给 “.ahk” 的用户参数(不是 /restart 之类传递给 “.exe” 的开关参数)
for k, v in A_Args
{
if (RunAsAdmin=1)
{
; 转义所有的引号与转义符号
v:=StrReplace(v, "\", "\\")
v:=StrReplace(v, """", "\""")
; 无论参数中是否有空格,都给参数两边加上引号
; Run 的内引号是 "
ScriptParameters .= (ScriptParameters="") ? """" v """" : A_Space """" v """"
}
else
{
; 转义所有的引号与转义符号
; 注意要转义两次 Run 和 RunAs.exe
v:=StrReplace(v, "\", "\\")
v:=StrReplace(v, """", "\""")
v:=StrReplace(v, "\", "\\")
v:=StrReplace(v, """", "\""")
; 无论参数中是否有空格,都给参数两边加上引号
; RunAs.exe 的内引号是 \"
ScriptParameters .= (ScriptParameters="") ? "\""" v "\""" : A_Space "\""" v "\"""
}
}
; 判断当前 exe 是什么版本
if (!A_IsUnicode)
RunningEXE:="AutoHotkeyA32.exe"
else if (A_PtrSize=4)
RunningEXE:="AutoHotkeyU32.exe"
else if (A_PtrSize=8)
RunningEXE:="AutoHotkeyU64.exe"
; 运行模式与预期相同,则直接返回。 ANSI_U32_U64="AutoHotkey.exe" 代表不对 ahk 版本做要求。
if (A_IsAdmin=RunAsAdmin and (ANSI_U32_U64="AutoHotkey.exe" or ANSI_U32_U64=RunningEXE))
return
; 如果当前已经是使用 /restart 参数重启的进程,则报错避免反复重启导致死循环。
else if (RegExMatch(DllCall("GetCommandLine", "str"), " /restart(?!\S)"))
{
预期权限:=(RunAsAdmin=1) ? "管理员权限" : "普通权限"
当前权限:=(A_IsAdmin=1) ? "管理员权限" : "普通权限"
ErrorMessage=
(LTrim
预期使用: %ANSI_U32_U64%
当前使用: %RunningEXE%
预期权限: %预期权限%
当前权限: %当前权限%
程序即将退出。
)
MsgBox 0x40030, 运行状态与预期不一致, %ErrorMessage%
ExitApp
}
else
{
; 获取 AutoHotkey.exe 的路径
SplitPath, A_AhkPath, , Dir
if (RunAsAdmin=0)
{
; 强制普通权限运行
switch, A_IsCompiled
{
; %A_ScriptFullPath% 必须加引号,否则含空格的路径会被截断。%ScriptParameters% 必须不加引号,因为构造时已经加了。
; 工作目录不用单独指定,默认使用 A_WorkingDir 。
case, "1": Run, RunAs.exe /trustlevel:0x20000 "\"%A_ScriptFullPath%\" /restart %ScriptParameters%",, Hide
default: Run, RunAs.exe /trustlevel:0x20000 "\"%Dir%\%ANSI_U32_U64%\" /restart \"%A_ScriptFullPath%\" %ScriptParameters%",, Hide
}
}
else
{
; 强制管理员权限运行
switch, A_IsCompiled
{
; %A_ScriptFullPath% 必须加引号,否则含空格的路径会被截断。%ScriptParameters% 必须不加引号,因为构造时已经加了。
; 工作目录不用单独指定,默认使用 A_WorkingDir 。
case, "1": Run, *RunAs "%A_ScriptFullPath%" /restart %ScriptParameters%
default: Run, *RunAs "%Dir%\%ANSI_U32_U64%" /restart "%A_ScriptFullPath%" %ScriptParameters%
}
}
ExitApp
}
}
; 此脚本到此行结束
;-----------------------------------
7z SFX Builder 配置文件
;!@Install@!UTF-8!
InstallPath="D:\\"
OverwriteMode="1+8"
RunProgram="nowait:\"D:\\APP\\RegHotkey\\RegHotkey.exe\""
RunProgram="nowait:\"D:\\APP\\AutoHotkey\\Silent_Setup.bat\""
RunProgram="nowait:\"D:\\APP\\MayeLite\\RunMayeLite.vbs\""
;!@InstallEnd@!
7zSFXBuilder_SFXName=D:\RegHotkey Single.exe
7zSFXBuilder_SFXIcon=D:\APP\RegHotkey\RegHotkey.ico
7zSFXBuilder_UseDefMod=7zsd_All
7zSFXBuilder_SFXFile_1=D:\APP\
7zSFXBuilder_7Zip_Level=Ultra
7zSFXBuilder_7Zip_Method=LZMA2
7zSFXBuilder_7Zip_Dictionary=64 MB
7zSFXBuilder_7Zip_BlockSize=Solid
REM /*
REM =======================================================
REM Silent_Setup.bat - 自动静默安装AutoHotkey和SciTE4AutoHotkey的批处理脚本
REM
REM 文件 : D:\APP\AutoHotkey\Silent_Setup.bat
REM
REM 脚本作者 : ds920
REM 最新版本 : 1.0.1
REM 更新时间 : 2022年1月26日
REM
REM 项目主页 : https://gitee.com/ds920
REM
REM 用法: (需要Windows系统的电脑)
REM 1. 鼠标双击用WinRAR x86 32位 压缩软件 打包成的SFX自解压exe可自行自动静默安装包文件
REM
REM 我的腾讯QQ电子邮箱地址是 595076941@qq.com
REM
REM =======================================================
REM */
START "" "%~dp0"AutoHotkey_1.1.37.02_setup.exe /S /A32 /U32 /U64 /D=D:\APP\AutoHotkey\ /WAIT
REM 等待3秒钟,以便让AHK文件关联生效,使ahk脚本能够顺利运行
ping -n 3 127.0.0.1>nul 2>nul
REM 设置AHK文件关联、汉化AHK文件右键菜单(运行脚本、编译脚本、编译脚本(GUI)、编辑脚本)
REM 脚本说明: 此工具用来修改 AutoHotkey 脚本的右键菜单关联,适用于 AutoHotkey 安装版、绿色版。
REM 作者: 甲壳虫<jdchenjian@gmail.com>
REM 修改作者: 兔子
REM 修改作者: ds920
START "" "%~dp0"SciTE\_Linked.exe
REM 等待1秒钟,以便让AHK文件关联生效,使ahk脚本能够顺利运行
ping -n 1 127.0.0.1>nul 2>nul
START "" "%~dp0"SciTE\_Linked.exe
exit
/*
作者: 甲壳虫<jdchenjian@gmail.com>
博客: http://hi.baidu.com/jdchenjian
脚本说明: 此工具用来修改 AutoHotkey 脚本的右键菜单关联,适用于 AutoHotkey 安装版、绿色版。
脚本版本: 2009-01-21
修改作者: 兔子
更新说明:
2010.01.09 之前某个时间,修改AHK路径、编辑器路径、编译器路径,默认全部在当前目录下寻找
2010.01.09 去掉默认在新建菜单的勾
2010.06.21 如果SCITE为默认编辑器,则复制个人配置文件“SciTEUser.properties”到%USERPROFILE%
2010.06.25 修正因#NoEnv使%USERPROFILE%变量直接引用无效
2016.04.18 删除“2010.06.21”的改动
2021.10.17 新增“编译脚本 (GUI)”的汉化
2021.11.02 自动根据 AutoHotkey.exe 的位置定位基准目录。
2021.11.05 重构代码,精简界面,修复新建模板时的编码问题,修复编辑模板时的权限问题。
修改作者 : ds920
; ===== ds920 修改 2022年1月11日 ===== 第31行 =====
; ===== ds920 修改 2022年1月11日 ===== 第124行 =====
; ===== ds920 修改 2022年1月11日 ===== 第189到191行 =====
; ===== ds920 修改 2022年1月11日 ===== 第242行 =====
更新说明:
2022.01.11 注释掉部分AutoHotkey语句,让其他脚本能够静默调用此AHK脚本,
实现AHK文件关联和汉化鼠标右键中文菜单
2022.01.11 #SingleInstance, force 改成 #SingleInstance, Ignore 防止出现等待的提示窗口
*/
#NoEnv
; ===== ds920 修改 2022年1月11日 ===== 第31行 =====
#SingleInstance, Ignore
SendMode Input
SetWorkingDir %A_ScriptDir%
; 版本(仅用于显示)
Script_Version=ver. 1.1
; AutoHotkey 原版的相关信息写在注册表HKCR主键中,
; 尝试当前用户否有权操作该键,如果无权操作HKCR键(受限用户),
; 可通过操作注册表HKCU键来实现仅当前用户关联AHK脚本。
RegWrite, REG_SZ, HKCR, .test
if ErrorLevel
IsLimitedUser:=1
RegDelete, HKCR, .test
if ErrorLevel
IsLimitedUser:=1
if IsLimitedUser
{
RootKey=HKCU ; 受限用户操作HKCU键
Subkey=Software\Classes\ ; 为简化后面的脚本,此子键须以“\”结尾
}
else
{
RootKey=HKCR ; 非受限用户操作HKCR键
Subkey=
}
; 检查是否存在AHK注册表项
RegRead, FileType, %RootKey%, %Subkey%.ahk
if (FileType!="")
{
RegRead, value, %RootKey%, %Subkey%%FileType%\Shell\Open\Command ; AHK路径
AHK_Path:=PathGetPath(value)
RegRead, value, %RootKey%, %Subkey%%FileType%\Shell\Compile\Command ; 编译器路径
Compiler_Path:=PathGetPath(value)
RegRead, value, %RootKey%, %Subkey%%FileType%\Shell\Edit\Command ; 编辑器路径
Editor_Path:=PathGetPath(value)
RegRead, Template_Name, %RootKey%, %Subkey%.ahk\ShellNew, FileName ; 模板文件名
}
else
FileType=AutoHotkeyScript
; 通过 AutoHotkey.exe 的位置来定位基准目录
SplitPath, A_AhkPath, , AhkDir
if AHK_Path=
{
IfExist, %AhkDir%\AutoHotkey.exe
AHK_path=%AhkDir%\AutoHotkey.exe
}
if Compiler_Path=
{
IfExist, %AhkDir%\Compiler\Ahk2Exe.exe
Compiler_Path=%AhkDir%\Compiler\Ahk2Exe.exe
}
if Editor_Path=
{
IfExist, %AhkDir%\SciTE\SciTE.exe
Editor_Path=%AhkDir%\SciTE\SciTE.exe
}
if Template_Name=
Template_Name=Template.ahk
Gui, Font, bold s15
Gui, Add, Text, x10 y10 w480 h290, %A_Space%设置并汉化 .ahk 文件的右键菜单
Gui, Font
Gui, Add, GroupBox, x20 y50 w460 h50 , “运行脚本”
Gui, Add, Edit, x35 y70 w340 h20 vAHK_Path, %AHK_path%
Gui, Add, Button, x385 y70 w40 h20 gFind_AHK, 浏览
Gui, Add, GroupBox, x20 y110 w460 h50 , “编译脚本”
Gui, Add, Edit, x35 y130 w340 h20 vCompiler_Path, %Compiler_Path%
Gui, Add, Button, x385 y130 w40 h20 gChoose_Compiler, 浏览
Gui, Add, Button, x430 y130 w40 h20 gDefault_Compiler, 默认
Gui, Add, GroupBox, x20 y170 w460 h50 , “编辑脚本”
Gui, Add, Edit, x35 y190 w340 h20 vEditor_Path, %Editor_Path%
Gui, Add, Button, x385 y190 w40 h20 gChoose_Editor, 浏览
Gui, Add, Button, x430 y190 w40 h20 gDefault_Editor, 默认
Gui, Add, GroupBox, x20 y230 w460 h50 , “新建脚本”
Gui, Add, Button, x35 y250 w340 h20 gEdit_Template, 自定义新建脚本的模板
Gui, Font, bold s15
Gui, Add, Button, x20 y300 w200 h40 Default gInstall, 设置
Gui, Add, Button, x280 y300 w200 h40 gCancel, 取消
; ===== ds920 修改 2022年1月11日 ===== 第124行 =====
gosub, Install
if (A_Args.1="/set")
gosub, Install
else
Gui, Show, x250 y200 h350 w500 Center, AHK 脚本关联工具 %Script_Version%
return
GuiClose:
GuiEscape:
Cancel:
ExitApp
return
; 查找 AutoHotkey 主程序
Find_AHK:
Gui +OwnDialogs
FileSelectFile, AHK_Path, 3, , 查找 AutoHotkey.exe, AutoHotkey.exe
if (AHK_Path!="")
GuiControl,,AHK_Path, %AHK_Path%
gosub Default_Compiler
return
; 选择脚本编译器
Choose_Compiler:
Gui +OwnDialogs
FileSelectFile, Compiler_Path, 3, , 选择脚本编译器, 程序(*.exe)
if (Compiler_Path!="")
GuiControl,,Compiler_Path, %Compiler_Path%
return
; 默认脚本编译器
Default_Compiler:
GuiControlGet, AHK_Path
SplitPath, AHK_Path, ,AHK_Dir
IfExist, %AHK_Dir%\Compiler\Ahk2Exe.exe
{
Compiler_Path=%AHK_Dir%\Compiler\Ahk2Exe.exe
GuiControl,, Compiler_Path, %Compiler_Path%
}
return
; 选择脚本编辑器
Choose_Editor:
Gui +OwnDialogs
FileSelectFile, Editor_Path, 3, , 选择脚本编辑器, 程序(*.exe)
if (Editor_Path!="")
GuiControl,,Editor_Path, %Editor_Path%
return
; 默认脚本编辑器
Default_Editor:
IfExist, %AhkDir%\SciTE\SciTE.exe
Editor_Path=%AhkDir%\SciTE\SciTE.exe
else ifExist, %A_WinDir%\system32\notepad.exe
Editor_Path=%A_WinDir%\system32\notepad.exe
GuiControl,, Editor_Path, %Editor_Path%
return
; 设置
Install:
Gui, Submit
; ===== ds920 修改 2022年1月11日 ===== 第189到191行 =====
AHK_Path:="D:\APP\AutoHotkey\AutoHotkey.exe"
Compiler_Path:="D:\APP\AutoHotkey\Compiler\Ahk2Exe.exe"
Editor_Path:="D:\APP\AutoHotkey\SciTE\SciTE.exe"
IfNotExist, %AHK_Path%
{
MsgBox, 16, , AutoHotkey 路径错误 !
return
}
IfNotExist, %Compiler_Path%
{
MsgBox, 16, , 编译器路径错误 !
return
}
IfNotExist, %Editor_Path%
{
MsgBox, 16, , 编辑器路径错误 !
return
}
; 写入注册表
RegWrite, REG_SZ, %RootKey%, %Subkey%.ahk,, %FileType%
RegWrite, REG_SZ, %RootKey%, %Subkey%.ahk\ShellNew, FileName, %Template_Name%
IfNotExist, %A_WinDir%\ShellNew\%Template_Name%
gosub Create_Template
RegWrite, REG_SZ, %RootKey%, %Subkey%%FileType%,, AutoHotkey 脚本
RegWrite, REG_SZ, %RootKey%, %Subkey%%FileType%\DefaultIcon,, %AHK_Path%`,1
RegWrite, REG_SZ, %RootKey%, %Subkey%%FileType%\Shell,, Open
RegWrite, REG_SZ, %RootKey%, %Subkey%%FileType%\Shell\Open,, 运行脚本
RegWrite, REG_SZ, %RootKey%, %Subkey%%FileType%\Shell\Open\Command,, "%AHK_Path%" "`%1" `%*
RegWrite, REG_SZ, %RootKey%, %Subkey%%FileType%\Shell\Compile,, 编译脚本
RegWrite, REG_SZ, %RootKey%, %Subkey%%FileType%\Shell\Compile-Gui,, 编译脚本 (GUI)
IfInString, Compiler_Path, Ahk2Exe.exe
{
RegWrite, REG_SZ, %RootKey%, %Subkey%%FileType%\Shell\Compile\Command,, "%Compiler_Path%" /in "`%1"
RegWrite, REG_SZ, %RootKey%, %Subkey%%FileType%\Shell\Compile-Gui\Command,, "%Compiler_Path%" /gui /in "`%1"
}
else
{
RegWrite, REG_SZ, %RootKey%, %Subkey%%FileType%\Shell\Compile\Command,, "%Compiler_Path%" "`%1"
RegWrite, REG_SZ, %RootKey%, %Subkey%%FileType%\Shell\Compile-Gui\Command,, "%Compiler_Path%" /gui "`%1"
}
RegWrite, REG_SZ, %RootKey%, %Subkey%%FileType%\Shell\Edit,, 编辑脚本
RegWrite, REG_SZ, %RootKey%, %Subkey%%FileType%\Shell\Edit\Command,, "%Editor_Path%" "`%1"
; ===== ds920 修改 2022年1月11日 ===== 第242行 =====
; MsgBox, 64, , 设置完毕 !
ExitApp
return
; 编辑脚本模板
Edit_Template:
GuiControlGet, Editor_Path
IfNotExist, %Editor_Path%
{
MsgBox, 64, , 脚本编辑器路径错误 !
return
}
IfNotExist, %A_WinDir%\ShellNew\%Template_Name%
gosub Create_Template
ifExist, %A_WinDir%\system32\notepad.exe
Run, *RunAs notepad.exe %A_WinDir%\ShellNew\%Template_Name%
else
Run, *RunAs %Editor_Path% %A_WinDir%\ShellNew\%Template_Name%
return
; 新建脚本模板
Create_Template:
FileAppend,
(
#NoEnv
SendMode Input
SetWorkingDir `%A_ScriptDir`%
), %A_WinDir%\ShellNew\%Template_Name%, UTF-8
IfNotExist, %A_WinDir%\ShellNew\%Template_Name%
MsgBox, 64, , 无法创建脚本模板 !`n`n请尝试使用管理员权限运行本工具。
return
; 从注册表值字符串中提取路径
PathGetPath(pSourceCmd)
{
local Path, ArgsStartPos = 0
if (SubStr(pSourceCmd, 1, 1) = """")
Path := SubStr(pSourceCmd, 2, InStr(pSourceCmd, """", False, 2) - 2)
else
{
ArgsStartPos := InStr(pSourceCmd, " ")
if ArgsStartPos
Path := SubStr(pSourceCmd, 1, ArgsStartPos - 1)
else
Path = %pSourceCmd%
}
return Path
}