按快捷键F3显示或者隐藏UltraSearch主窗口 2023-2-10 (快捷键F3 位于键盘主键区数字4键正上方)
问:为什么选择UltraSearch
答:
一、支持在软件选项中自定义热键 Alt + F (显示或者隐藏主窗口的全局自定义快捷键)
二、因为UltraSearch支持 Synology群晖NAS的SFTP映射网络驱动器(映射软件选用 RaiDrive Version 2020.6.80 最新版本的RaiDrive会弹出广告窗口所以只好用旧版本了,我收集了从RaiDrive-1.4.1到现在的RaiDrive-2022.6.92-x64.exe所有版本的RaiDrive,另外有NetDrive.2.6.16作为备用映射网络驱动器,RaiDrive的映射盘符固定为Z:长期不变,NetDrive的映射盘符固定为Y:长期不变,两个驱动器在系统启动时全自动自动静默映射网络驱动器,一起映射,使用Z:,Y:作为备用)
三、因为Everything需要在选项-索引-文件夹中设置之后才支持 Synology群晖NAS的SFTP映射网络驱动器并且需要预先索引并且必需在索引完成之后才显示搜索结果,而UltraSearch能够在索引完成之前就显示部分搜索结果,果断抛弃Everything。
四、MasterSeeker不支持Synology群晖NAS的SFTP映射网络驱动器。
五、UltraSearch可以设置成简体中文的软件界面。
六、在主窗口右侧有预览文件的子窗口
七、选中文件后按快捷键 Ctrl + O 能够选择位置(打开选中文件所在的位置)
八、UltraSearch有免费的永久使用版本。
九、UltraSearch有Portable的绿色免安装版本。
问:UltraSearch的缺点是什么?
答:
缺点1:无法在FirPE或者Edgeless PE等 银灿IS903 量产U盘的CD-ROM中运行,说明UltraSearch依赖的运行库和资源文件比较多,不够绿色,不够存粹,我还是比较喜欢 Delphi 或者 C++ 的无控件无库无依赖无开发包的纯代码实现的应用程序软件。
缺点2:占用硬盘空间有点大。
缺点3:部分设置使用了注册表,无法通过解压缩ini文件的方法来重置自定义配置,只能通过AutoHotkey脚本来重置自定义配置(我的自定义配置是搜索本地硬盘所有分区和所有映射网络驱动器分区)没有完全用 ini 配置文件实现绿色便携。
缺点4:高级功能需要付费,正在寻找更好的替代品。
缺点5:不支持按照正则表达式搜索。
缺点6:无法自定义全文搜索正文内容的索引数据库文件的保存位置。
;
; 按快捷键F3显示或者隐藏UltraSearch主窗口 2023-2-10 (快捷键F3 位于键盘主键区数字4键正上方)
; 按快捷键 ` 显示或者隐藏 Total Commander 10.52 主窗口 2023-2-5 (快捷键 ` 即波浪键~,位于Esc键正下方,位于Tab键正上方)
; Total Commander 10.52 简体中文增强版能够通过 拼音首字母序列字符串筛选过滤文件列表,
; 文件夹中的文件和文件名都可以自己整理整顿清理,
; 通过TC访问整理之后的文件夹可以快速高效的找到当前所需的文件
; (文档、表格、图片、音乐、视频、源码、快捷方式、网址链接、收藏夹书签、Synology群晖NAS映射网络驱动器等等)
;
/*函数名: Single
设置互斥体,阻止脚本重复运行
功能与#SingleInstance差不多,只是这玩样可以自定义
另:
经测试发现#SingleInstance只识别脚本文件名,改名可重复运行,
在有热键的脚本里要使用 #SingleInstance,off 关闭此功能.
参数:
给这个脚本设置一个独一无二的识别字符串(指纹?)
返回值: 1 为重复,0为第一次
例子:
Single("7EF47F0D-4D37-542E-5787-90FDD196D04B")
Single("123")
*/
; Single(flag) { ;,返回1为重复,返回0为第一个运行
; DllCall("CreateMutex", "Ptr",0, "int",0, "str", "Ahk_Single_" flag)
; return A_LastError=0xB7 ? true : false
; }
; =========================
; 使用案例,脚本改名都没用,照样只能运行一个.
/*
#SingleInstance,Off ;关闭自带互斥功能
if (Single("0024")) { ;独一无二的字符串用于识别脚本,或者称为指纹?
; MsgBox,16,提示,程序已启动!`n请勿重复运行
ExitApp
}
*/
#Persistent
; 强制自身以 ansi + 管理员权限 运行,编译此脚本时选择 ANSI 。
; runwith("","ansi")
;-----------------------------------
; 多进程热键——快速响应随时中止 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
}
} ;// 类结束
;======== 下面是使用的例子 =========
;-- 按住松开型循环
/*
$F1::
Go.Go("aaa")
KeyWait, F1
Go.Go()
return
aaa:
i:=1
loop
ToolTip, % "按住松开型循环-" i++
return
*/
;-- 两次开关型循环
F3:: (ok:=!ok) ? Go.Go("bbb") : Go.Go("ccc")
bbb:
; IfWinActive,UltraSearch
IfWinActive,UltraSearch Free
{
WinMinimize,UltraSearch
WinMinimize,ahk_class UltraSearch
}
else
{
IfWinNotExist,UltraSearch Free
{
IfExist,D:\Prog\UltraSearch\UltraSearch.exe
{
Run,D:\Prog\UltraSearch\UltraSearch.exe
}
else
{
MsgBox,0,,没有找到文件 D:\Prog\UltraSearch\UltraSearch.exe,5
}
}
WinShow,UltraSearch
WinShow,ahk_class UltraSearch Free
WinActivate,UltraSearch
WinActivate,ahk_class UltraSearch Free
; WinMaximize,UltraSearch
; WinMaximize,ahk_class UltraSearch Free
WinMove,UltraSearch,,A_ScreenWidth/2,20,A_ScreenWidth/2-10,A_ScreenHeight-90
WinMove,ahk_class UltraSearch,,A_ScreenWidth/2,20,A_ScreenWidth/2-10,A_ScreenHeight-90
; 设置输入焦点到窗口的指定控件上.
loop,5
{
ControlFocus, TJamCustomStyleSearchEdit2, UltraSearch
ControlFocus, TJamCustomStyleSearchEdit2, ahk_class UltraSearch Free
ControlSend, TJamCustomStyleSearchEdit2, {LCtrl Down}a{LCtrl Up}, UltraSearch
ControlSend, TJamCustomStyleSearchEdit2, {LCtrl Down}a{LCtrl Up}, ahk_class UltraSearch Free
}
}
return
ccc:
IfWinActive,UltraSearch Free
{
WinMinimize,UltraSearch
WinMinimize,ahk_class UltraSearch
}
else
{
IfWinNotExist,UltraSearch Free
{
IfExist,D:\Prog\UltraSearch\UltraSearch.exe
{
Run,D:\Prog\UltraSearch\UltraSearch.exe
}
else
{
MsgBox,0,,没有找到文件 D:\Prog\UltraSearch\UltraSearch.exe,5
}
}
WinShow,UltraSearch
WinShow,ahk_class UltraSearch Free
WinActivate,UltraSearch
WinActivate,ahk_class UltraSearch Free
; WinMaximize,UltraSearch
; WinMaximize,ahk_class UltraSearch Free
WinMove,UltraSearch,,A_ScreenWidth/2,20,A_ScreenWidth/2-10,A_ScreenHeight-90
WinMove,ahk_class UltraSearch,,A_ScreenWidth/2,20,A_ScreenWidth/2-10,A_ScreenHeight-90
; 设置输入焦点到窗口的指定控件上.
loop,5
{
ControlFocus, TJamCustomStyleSearchEdit2, UltraSearch
ControlFocus, TJamCustomStyleSearchEdit2, ahk_class UltraSearch Free
ControlSend, TJamCustomStyleSearchEdit2, {LCtrl Down}a{LCtrl Up}, UltraSearch
ControlSend, TJamCustomStyleSearchEdit2, {LCtrl Down}a{LCtrl Up}, ahk_class UltraSearch Free
}
}
return
;-- 两次开关型循环
`:: (ok:=!ok) ? Go.Go("ddd") : Go.Go("eee")
ddd:
; ToolTip,bbb
; Process,Exist,TotalCMD.exe
; if (%ErrorLevel%=0)
DetectHiddenWindows,On
SetTitleMatchMode,2
; IfWinNotExist,Total Commander or IfWinNotExist,ahk_class TTOTAL_CMD
IfWinNotActive,Total Commander or IfWinNotActive,ahk_class TTOTAL_CMD
{
;-----------------------------------
; Maye Lite 和 此脚本中的快捷键都一致相同的设置为 ` ( 即波浪键~,位于Esc键正下方,位于Tab键正上方 )
; 搜索根目录中含有文件夹filter-file-with-totalcmd的磁盘分区
; 并用 Total Commander 10.52 简体中文增强版打开找到的文件夹
; 一旦找到文件夹后会继续寻找其他磁盘分区,
; 找到最靠后的含有文件夹filter-file-with-totalcmd的磁盘分区后会用Total Commander打开找到的文件夹filter-file-with-totalcmd
; Total Commander的右半边窗口的当前路径保持不变,只改变左半边的窗口的当前路径
; 此时只需要在 Total Commander 窗口中输入 "拼音首字母" 字符串序列就可以筛选过滤当前的文件列表
;-----------------------------------
IfExist,D:\Prog\TotalCMD\TotalCMD64.exe
{
Run,D:\Prog\TotalCMD\TotalCMD64.exe
}
else
{
MsgBox,0,找不到文件 D:\Prog\TotalCMD\TotalCMD64.exe
ExitApp
}
DriveGet,DriveList,List
; loop,Parse,CDEFGHIJKLMNOPQRSTUVWXYZ
loop, Parse, DriveList
{
IfExist,%A_LoopField%:\filter-file-with-totalcmd
{
IfExist,D:\Prog\TotalCMD\TotalCMD64.exe
{
Run,D:\Prog\TotalCMD\TotalCMD64.exe %A_LoopField%:\filter-file-with-totalcmd
}
}
}
}
loop,3
{
WinGet, WinID, ID,Total Commander ahk_class TTOTAL_CMD
DllCall("SwitchToThisWindow", "UInt", WinID, "UInt", 1)
WinShow,Total Commander ahk_class TTOTAL_CMD
WinActivate,Total Commander ahk_class TTOTAL_CMD
WinMove,Total Commander ahk_class TTOTAL_CMD,,0,0,A_ScreenWidth,A_ScreenHeight
WinMaximize,Total Commander ahk_class TTOTAL_CMD
}
return
eee:
; ToolTip,ccc
WinMinimize,Total Commander ahk_class TTOTAL_CMD
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
}
}
; 此脚本到此行结束
*/
#z::ExitApp
/*
#Persistent
; #NoTrayIcon
DetectHiddenWindows,On
SetTitleMatchMode,2
; =========================
DriveGet,DriveList,List
; loop,Parse,CDEFGHIJKLMNOPQRSTUVWXYZ
loop, Parse, DriveList
{
IfExist,%A_LoopField%:\filter-file-with-totalcmd
{
IfExist,D:\Prog\TotalCMD\TotalCMD64.exe
{
Run,D:\Prog\TotalCMD\TotalCMD64.exe %A_LoopField%:\filter-file-with-totalcmd
}
else
{
MsgBox,找不到文件 D:\Prog\TotalCMD\TotalCMD64.exe
ExitApp
; return
}
}
}
*/
; ++++++++++++++++++++++++++++++
请用 Keepass 连接 坚果云或者
TeraCLOUD 的 WebDAV 文件服务 来集中统一管理所有的 网址、用户名、密码、口令等各种个人隐私信息数据。
下面隐藏内容为空白,这里放空白的隐藏内容便于大家支付积分,如不想支付积分可以忽略以下内容