獲取開啟的文件的路徑
阿新 • • 發佈:2019-02-13
; File encoding: UTF-8 /* AutoHotkey 版本: 1.1.9.0 作業系統: Windows XP/Vista/7 作者: sunwind <1576157 qq="" com=""> 部落格: http://blog.csdn.net/liuyukuan/article/details/7411291 指令碼說明:此為指令碼用於開啟Office、Scite等軟體中 開啟的文件路徑。 指令碼版本: 2012-12-23版 Timestamp:2012年12月23日14:40:22 */ ;2012-12-23 更新Scite路徑獲取方式為com呼叫,即使標題欄沒有顯示全部路徑也能工作。 ;2012-03-31 改熱鍵為win+del,因為我多數是為了清理沒用文件,刪除當前開啟的檔案。 ;2012-03-31 增加:對非office軟體 則開啟程式所在目錄功能。 ;2012-03-31 增加 :可開啟SciTE 、EmEditor文件所在目錄(前提是其標題欄顯示文件路徑) ;對於notepad等程式需要增加也個case標籤單獨處理,可以通過先設定各個程式支援在標題欄中顯示路徑,然後解析路徑的方式.本想弄個通用的用WMI方式查詢cmd_line內容,但是如果運行了記事本,再open,開啟文字檔案的話,檔案路徑是不在cmd_line中的,殘念. #del:: ;開啟office文件所在目錄。非office軟體開啟程式所在目錄。 WinGet, _ProcessPath, ProcessPath, A _DocPath:=getDocumentPath(_ProcessPath) TrayTip,,%_DocPath%,10 Run,% "Explorer.exe /select, " _DocPath Return getDocumentPath(_ProcessPath) { SplitPath,_ProcessPath,Process_Name,Process_Dir,,Process_NameNoExt value:=Process_NameNoExt If IsLabel( "Case_" . value) Goto Case_%value% Else Goto Case_Default Case_WINWORD: ;Word OpusApp Application:= ComObjActive("Word.Application") ;word ActiveDocument:= Application.ActiveDocument ;ActiveDocument Return % ActiveDocument.FullName Case_EXCEL: ;Excel XLMAIN Application := ComObjActive("Excel.Application") ;excel ActiveWorkbook := Application.ActiveWorkbook ;ActiveWorkbook Return % ActiveWorkbook.FullName Case_POWERPNT: ;Powerpoint PPTFrameClass Application:= ComObjActive("PowerPoint.Application") ;Powerpoint ActivePresentation := Application.ActivePresentation ;ActivePresentation Return % ActivePresentation.FullName Case_SciTE: ;;開啟SciTE當前檔案所在目錄 Return % GetCurrentFilePath(GetSciTEInstance()) Case_EmEditor: ;;開啟EmEditor當前檔案所在目錄 WinGetActiveTitle _Title SplitPath,_Title,name,dir Needle:=" - " StringSplit,_name,name,%Needle% FullName:=dir . "\" . _name1 Return % FullName Case_AkelPad: WinGetActiveTitle _Title SplitPath,_Title,name,dir MsgBox %dir% Needle:=" - " StringSplit,_name,name,%Needle% FullName:=dir . "\" . _name1 Return % FullName Case_Notepad: WinGet pid, PID, A wmi := ComObjGet("winmgmts:") queryEnum := wmi.ExecQuery("" . "Select * from Win32_Process where ProcessId=" . pid) ._NewEnum() If queryEnum[Process] { CMDLine := Process.CommandLine ; 獲取程序命令列 RegExMatch(CMDLine, "i)\s+(.*)", ff_) ; 正則匹配命令列引數 ;~ RegExMatch(process.CommandLine,"i).*exe.*?\s+(.*)",CMDLine_1) StringReplace,ff,ff_1,`",,All if ff<> Return % ff else Return % _ProcessPath wmi := queryEnum := Process := "" } Case_Default: Return % _ProcessPath ; 其他程式開啟程式所在目錄 } GetCurrentFilePath(scite) { if !scite { MsgBox, 16, Error, Can't find SciTE! ExitApp } return scite.CurrentFile } GetSciTEInstance() { olderr := ComObjError() ComObjError(false) scite := ComObjActive("SciTE4AHK.Application") ComObjError(olderr) return IsObject(scite) ? scite : "" } ;~ 增加開啟當前程式的路徑,熱鍵設定為win+end。 #end:: ;僅是開啟當前啟用視窗的程式所在目錄。不常用 WinGet, _ProcessPath, ProcessPath, A Run,% "Explorer.exe /select, " _ProcessPath Return