windows的explorer极客版 —— Tablacus Explorer 分组多标签文件管理器

Tablacus 可能不是最好的文件管理器,但他一定是最好的explorer的替代品。建议平时临时打开文件夹就用原生 explorer 自带的,需要持久化标签页时,就用 Tablacus !

他和explorer用的是同一套技术。列表控件和自带文件管理器相差无几。外壳则基于ie或其他浏览器引擎。

外壳和扩展都是基于HTML/js/css写的。所以他也适合喜欢调整代码的极客使用。他有很多插件扩展,是原作者漫长时间处理用户issue积累的宝库,插件本身就是学习资料。

优点1:十分小巧

加上81个扩展,小于3MB。本体只有700KB。

优点2:高度可编程

  • tablacus 本体完全开源。
  • 外壳都是 html/css/js
  • 插件也是。插件就是学习资料。
  • 这种嵌入ie的都可以用 AHK 调用com接口,分析dom或者执行任意JScript脚本。
  • 据说可以更换浏览器引擎
  • 据说可以在wine上运行。

优点3:与 AHK 脚本通信,运行JScript

例如:AHK中获取当前的文件选择,并复制文件名到剪贴板:(同时支持 Tablacus 以及原生 explorer 文件管理器!)

python 复制代码
GroupAdd, texp_gp, ahk_exe TEd32.exe
GroupAdd, texp_gp, ahk_exe TEd64.exe
GroupAdd, texp_gp, ahk_exe explorer.exe

WBGet(hwnd, Svr:=1) {               ;// based on ComObjQuery docs
    msg := DllCall("RegisterWindowMessage", "str", "WM_HTML_GETOBJECT")
         IID1 := "{0002DF05-0000-0000-C000-000000000046}"	; IID_IWebBrowserApp
		 IID2 := "{332C4427-26CB-11D0-B483-00C04FD90119}"	; IID_IHTMLWindow2
   SendMessage msg, 0, 0, Internet Explorer_Server1, ahk_id %hwnd%
   if (ErrorLevel != "FAIL") {
      lResult:=ErrorLevel, VarSetCapacity(GUID,16,0)
      if DllCall("ole32\CLSIDFromString", "wstr","{332C4425-26CB-11D0-B483-00C04FD90119}", "ptr",&GUID) >= 0 {
         DllCall("oleacc\ObjectFromLresult", "ptr",lResult, "ptr",&GUID, "ptr",0, "ptr*",pdoc)
			return	ComObj(9,ComObjQuery(pwb:=ComObjQuery(pdoc,IID1,IID1),IID2,IID2),1)
				,	ObjRelease(pdoc), ObjRelease(pwb)
      }
   }
}


#IfWinActive, ahk_group texp_gp 
F1::
    hwnd := WinExist("A")
    window := WBGet(hWnd)
    IfWinActive ahk_exe explorer.exe 
    {
        Selection := Window.Document.SelectedItems
    } else {
        Selection := window.te.Ctrl(CTRL_FV).SelectedItems.Count
    }
    Path_to_Selection := ""
    for Items in Selection
        Path_to_Selection .= Items.path "`n"
    MsgBox % Path_to_Selection
    clipboard := Path_to_Selection
    ;消息("已复制" Selection.Count "项", "w500")
    return
return
#IfWinActive

和AHk增强explorer的方式如出一辙。这种基于ie的嵌入的可以这样调用:

js 复制代码
   IfWinActive ahk_exe explorer.exe  ; 如果是原生文件管理器!
   {
       Selection := Window.Document.SelectedItems
   } else { ; 否则就是 tabacus!
       Selection := >window.te.Ctrl(CTRL_FV).SelectedItems.Count
   }

其中 AHK,代码 window.te.Ctrl(CTRL_FV)

对应于Jscript,也也就是任意插件的 script.js 中te.Ctrl(CTRL_FV) 获取的就是当前的文件列表的视图控件(至于控件的方法属性,参考诸多插件即可。)。

其实,插件挂到window对象的function和变量都可以被 AHK 访问。sync.js 需要挂到 MainWindow 上面。script.js 直接挂到 window 即可。

还能直接获取返回值:(但是好像不能直接返回数组?)

js:

window.test = function(){return 1;}

ahk:

msgbox % window.test()

这种顺滑如丝跨语言调用,不知道甩Java几百条街,使得 AHK 像 python 一样成为一门极为好用的胶水语言 和强大的用户脚本引擎

相关推荐
蓝田~22 分钟前
观察者模式和订阅模式
windows·观察者模式
梓仁沐白7 小时前
ubuntu+windows双系统切换后蓝牙设备无法连接
windows·ubuntu
九鼎科技-Leo11 小时前
什么是 WPF 中的依赖属性?有什么作用?
windows·c#·.net·wpf
Yang.9913 小时前
基于Windows系统用C++做一个点名工具
c++·windows·sql·visual studio code·sqlite3
我不瘦但很逗13 小时前
Windows下使用DBeaver连接云数据库(MySQL)
数据库·windows
ashane131415 小时前
Java list
java·windows·list
万里沧海寄云帆15 小时前
Word 插入分节符页码更新问题
windows·microsoft·word
dot.Net安全矩阵16 小时前
.NET 通过模块和驱动收集本地EDR的工具
windows·安全·web安全·.net·交互
编程修仙17 小时前
Collections工具类
linux·windows·python
程序员小羊!19 小时前
高级 SQL 技巧讲解
windows