; 此脚本从此行开始
;/*
;===========================================
; 设置激活或者隐藏 MasterSeeker 窗口的快捷键为 F3
; (F3键位于Esc键右边第3个键)
;
; 脚本作者 : feishu cn
;
; 用法: (需要最新版本 AHK v1.1.31+)
; 1. 到MasterSeeker官方网站下载并安装MasterSeeker
; http://www.master-seeker.com/
; 2. 将本脚本保存为"MasterSeeker-F3.ahk"并复制到C:/Prog/MasterSeeker文件夹中
; 3. 使用 Maye 来设置 MasterSeeker-F3.ahk 的热键
; https://www.lanzoux.com/b0bqwqjvg
; https://blog.arae.cc/post/25830.html
; https://github.com/25H/Maya/releases/
; 升级更新历史:
; 版本1.0 2022年2月24日 新建 创建此AutoHotkey脚本并测试通过F4热键功能
;
; 由于Everything的结果显示速度没有MasterSeeker快,所以改用MasterSeeker
; MasterSeeker能够在索引完成之前显示部分搜索结果,
; Everything不能在搜索完成之前显示搜索结果,
; MasterSeeker的最大缺点是需要依赖 .NET Framework 2.0 才能运行,
; MasterSeeker不像有些AutoHotkey或者Delphi编译的程序那样
; 无需依赖大量DLL文件或者运行库就可以直接运行。
;
; 由于AutoHotkey的Hotkey语句设置的热键必需在任务栏或者桌面进程激活时才有效,
; 所以请使用Maye来设置 MasterSeeker 的热键
; https://www.autoahk.com/archives/43181
; 我的腾讯QQ电子邮箱地址是 595076941@qq.com
;
; 我在批量搜索文件正文内容时会用到 http://www.likasoft.com/cn/ 出品的Archivarius 3000 (4.79)
; 我在批量搜索文件正文内容时也会用到 https://www.mythicsoft.com/ 出品的
; FileLocator Pro Version 2022 - Build 3341 付费零售专业版永久完整功能版
; 但是Archivarius 3000和FileLocator Pro这两款软件需要预先创建索引数据库文件才能实现高速全文搜索
; 有时候我只需根据文件名称搜索文件,无需搜索文件的正文内容,此时我会使用MasterSeeker来搜索文件,
; 对MasterSeeker的搜索结果按照文件大小排序的快捷键是 Ctrl + 3,
; MasterSeeker的最大优点是能够在索引完成之前显示一部分搜索结果,
; MasterSeeker的最大缺点是需要依赖 .NET Framework 2.0 才能运行
;===========================================
;*/
;等待指定标题窗口出现
; WinWait,MasterSeeker ahk_class MasterSeeker ahk_exe MasterSeeker.exe
; 运行 MasterSeeker 、激活搜索输入框并调整 MasterSeeker 的窗口位置
#SingleInstance,force
loop,5
{
DetectHiddenWindows,On
Sleep,5
IfWinExist,QQ595076941_MasterSeeker
ExitApp
}
Gui, Show, Hide,QQ595076941_MasterSeeker
; 强制自身以 ansi + 管理员权限 运行。
runwith("","ansi")
#Persistent
; #NoTrayIcon
DetectHiddenWindows,On
SetTitleMatchMode,2
ActivateOrHideWindowHotkey_MasterSeeker()
return
ActivateOrHideWindowHotkey_MasterSeeker()
{
;等待指定标题窗口出现
; WinWait, MasterSeeker 1.5.1 by DxCK ahk_class WindowsForms10.Window.8.app.0.218f99c
IfWinActive,MasterSeeker 1.5.1 by DxCK ahk_class WindowsForms10.Window.8.app.0.218f99c
{
WinMinimize,MasterSeeker 1.5.1 by DxCK ahk_class WindowsForms10.Window.8.app.0.218f99c
ExitApp
}
else
{
IfWinNotExist,MasterSeeker 1.5.1 by DxCK ahk_class WindowsForms10.Window.8.app.0.218f99c
{
Run,C:\Prog\MasterSeeker\MasterSeeker.exe
}
; Send,#{Right}
; WinMove,ahk_class 窗口类名,窗口文本,窗口左上角与屏幕上边沿的距离,窗口左上角与屏幕左边沿的距离,窗口左右宽度,窗口上下高度
loop,3
{
WinActivate,MasterSeeker 1.5.1 by DxCK ahk_class WindowsForms10.Window.8.app.0.218f99c
WinWaitActive,MasterSeeker 1.5.1 by DxCK ahk_class WindowsForms10.Window.8.app.0.218f99c,,5
; 改变指定窗口的位置和/或大小.
WinMove,MasterSeeker 1.5.1 by DxCK ahk_class WindowsForms10.Window.8.app.0.218f99c,,A_ScreenWidth/2,20,A_ScreenWidth/2-10,A_ScreenHeight-90
loop,9
{
Sleep,10
; 设置输入焦点到窗口的指定控件上.
ControlFocus,Filename,MasterSeeker 1.5.1 by DxCK ahk_class WindowsForms10.Window.8.app.0.218f99c
}
}
ExitApp
}
}
; 强制自身进程以 管理员权限 或 普通权限 或 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
}
}
; AutoHotkey热键有时候会失效,点击任务栏才恢复热键,所以请使用Maye来设置 MasterSeeker 的热键
; https://www.autoahk.com/archives/43181
; 我的腾讯QQ电子邮箱地址是 595076941@.qqcom
; 此脚本到此行结束