看板 EzHotKey 關於我們 聯絡資訊
找出資料夾路徑的方法 想了很久,花了一個晚上總算寫出來了。 不過前提是要把那個資料夾打開,然後用 AutoHotKey 去擷取被打開資料夾的路徑。 檔案名稱用這個方式無法擷取,因為即使選取了某個檔案,只能找到檔案的大小。 不過應該可以藉由檔案大小的這個資訊找到那個檔案。 聽說 ListView 之類的指令可以列出檔案。 可能還有其他方法,或許改日再弄看看吧~~ 以下是程式碼: WinGetActiveTitle, title ;將目前視窗的標題放進變數 title WinGetText, text, %title% ;將標題 title 的視窗資訊放進 text Loop, Parse, text, `r`n ;將 text 依換行字元('r'n)分開 { if ( A_Index = 1 ) ;只取分開後的第一部份 { text2 = %A_LoopField% ;將第一部份的內容放進 text2 break ;離開 Loop, Parse } } FileSelectFile, , ,%text2% , ,(*.*) 教學 要找出某個視窗下的資訊,可以利用 AutoHotKey 內建的 Window Spy 程式。 打開視窗或軟體後,Window Spy 就會出現有關它的資訊唷~~ 例如說我現在打開 C槽 資料夾,Window Spy 的畫面就會類似這樣: ˍˍˍˍˍˍˍˍˍˍˍˍˍˍˍˍˍˍˍˍˍˍˍˍˍ Active Window Info >>>>>>>>>>( Window Title & Class )<<<<<<<<<<< 本機磁碟 (C:) ……略…… >>>>( TitleMatchMode=slow Visible Text )<<<< C:\ C:\ ……略…… ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ WinGetActiveTitle 其中 Window Title & Class 下面的是目前開啟的視窗的標題。 要獲取這個標題,可以用 WinGetActiveTitle,它可以告訴我們目前使用中視窗的標題: WinGetActiveTitle, 存放的變數 範例: ^w:: WinGetActiveTitle, title MsgBox, %title% return 隨意打開一個資料夾(例如 C槽)然後按下 Ctrl + W,就會出現類似如下的視窗: ___________ AutoHotKey.ahk 本機磁碟 (C:) _____ 確定  ̄ ̄ ̄ ̄ ̄ WinGetText 而 TitleMatchMode=slow Visible Text 下面的文字就是就是我們要的檔案路徑。 要把這個路徑找出來,需要用到 WinGetText, WinGetText 可以藉由使用者給它的一些視窗的資訊,然後找到這個視窗, 再擷取這個視窗的資訊,將這些資訊存成一段文字。 用法如下: WinGetText, 存放變數 ,(視窗標題, 視窗文字 , 不包含的視窗標題, 不包含的視窗文字) (視窗標題, 視窗文字, 不包含的視窗標題, 不包含的視窗文字): 這四個是 WinGetText 用來尋找視窗的條件,可以只使用一個、兩個甚至全部。 存放變數: WinGetText 找到所需的資訊時,會將這個資訊轉換成文字,然後放到這個變數裡面。 我們如果只要它擷取 C槽 的資訊時,可以這樣寫: ^p:: ;當按下 Ctrl + P 時執行 Run C:\ ;打開C槽 WinWait, 本機磁碟 (C:) ;等待C槽打開再往下執行 WinGetText, Text, 本機磁碟 (C:) ;擷取視窗標題是本機磁碟 (C:)的資訊 MsgBox, %Text% ;將擷取的資訊顯示出來 return ;執行到 return 停止 結果類似: ˍˍˍˍˍˍˍˍˍ AutoHotKey.ahk C:\ C:\ 31 個物件 FolderView _____ 確定  ̄ ̄ ̄ ̄ ̄ 因為我們只需要第一行 C:\ ,所以要把其他的部份去掉。 AutoHotKey 提供了 Loop, Parse {...} 可以將一長串文字分開。 Loop, Parse Loop, Parse, 要處理的變數,( 分開的代表文字, 首尾忽略文字) 要處理的變數:要被分開的變數名稱。 分開的代表文字: 例如這個代表文字是 , 符號。 那麼 a,b,c 就會被分成 a 和 b 和 c 。 首尾忽略文字:將變數第一個以及最後遇到的文字忽略。 A_Index: 紀錄 Loop,Parse 目前跑了第幾次,由 1 開始計算。 A_LoopField: 被分開的文字會依順序出現在這個變數當中。 以 a,b,c 來說, ╭─────────┬────┬──────╮ │Loop,Parse跑的次數│ A_Index│ A_LoopField│ ├─────────┼────┼──────┤ │ 1 │ 1 │ a │ ├─────────┼────┼──────┤ │ 2 │ 2 │ b │ ├─────────┼────┼──────┤ │ 3 │ 3 │ c │ ├─────────┼────┼──────┤ │ 結束 │ │ │ ╰─────────┴────┴──────╯ 範例如下: abc = a,b,c ;建立變數 abc,內容是 a,b,c Loop, Parse, abc, `, ;將 abc字串以逗號分開(`, { MsgBox,%A_Index% 次: %A_LoopField% } 顯示結果: ___________ AutoHotKey.ahk 第 1 次: a _____ 確定  ̄ ̄ ̄ ̄ ̄ 因為我們找到的字串分成 4 行,所以他們是由換行字元(`r`n)分開的。 因此,要擷取第一行的文字,可以這樣寫: ^p:: ;當按下 Ctrl + P 時執行 Run C:\ ;打開C槽 WinWait, 本機磁碟 (C:) ;等待C槽打開再往下執行 WinGetText, Text, 本機磁碟 (C:) ;擷取視窗標題是本機磁碟 (C:)的資訊 Loop, Parse, Text, `r`n ;將Text用換行字元分開 { if( A_Index = 1 ) ;若 A_Index = 1 成立,執行 {...} { Text2 = %A_LoopField% ;令 A_LoopField 的值給變數 Text2 break ;離開 Loop,Parse } } MsgBox, %Text2% ;將 Text2 的內容顯示出來 return ;執行到 return 停止 結果如下: ___________ AutoHotKey.ahk C:\ _____ 確定  ̄ ̄ ̄ ̄ ̄ FileSelectFile 如果我們想直接開啟這個路徑下的個檔案,可以用 FileSelectFileFileSelectFile, 存放變數 , 選項, 絕對路徑\檔名, 標題, 檔案篩選 存放變數:將使用者的檔案名稱丟進這個變數。 選項(可忽略): M 允許一次選取多個檔案。 S 將“開啟”按鈕改成“儲存”按鈕。 (其他選項請參照說明文件) 絕對路徑\檔名:指定要開啟的資料夾路徑或檔名: C:\My Pictures\Default Image Name.gif C:\My Pictures 標題:指定視窗的標題 檔案篩選:指定看得到的檔案類型: 所有(*.*) 文字(*.txt) 音樂(*.wav; *.mp2; *.mp3) 圈圈(*.oo) 例如要打開 C槽 下的檔案,可以這樣寫: FileSelectFile, tmp, ,C: , 選擇要開啟的檔案, 所有類型(*.*) ※ 引述《sodeass (基米拉)》之銘言: : ※ 引述《VElysian (家瑀 致中和)》之銘言: : : 請問大家, : : 想利用板上討論的軟體,做出什麼樣的功能讓使用電腦更快速方便呢? : : 或者是已經寫出來了,說出來讓大家開開眼界。 : : 還是已經動手在規劃、在製作了,可以說一說。 : : 如果很需要某項功能,卻想不出來怎麼做;也可以提出來參考。 : : 謝謝。 ^_^ : 小弟有個想法,但自己苦工做很久,還沒啥結果,所以想和大家討論 : 在備份檔案方面,小弟都會check MD5碼來看看二個檔案是否相同 : 因為檔案很多,所以希望這樣... : 1. 點一下想算MD5碼的檔案, 例如: file1 (也就讓它反白 XD) : 2. 按熱鍵, 像win+5, 就可以呼叫外部程式,把file1的MD5利用msgbox送出來 : 算MD5碼的部分,不是AHK的守備範圍,所以找外掛就好。 : 問題比較大的一點是,如何AHK,去取得步驟1的file_name 和 file_path : 小弟自己利用 : FileSelectFile, tmp, 3,C:\Documents and Settings\sodeass\桌面 , Choose File, : (*.*) : 開出一個GUI,來選擇檔案,再把檔案路徑丟到變數tmp裡 : 雖然可以得到要的結果,但是要開GUI來慢慢選檔案,速度就比較慢了 : 大家有沒有意見可以給小弟參考一下~ Thx ^^ : 廢話很多,希望有人看得懂 OTZ... -- 主動是機會的誘餌 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.62.93.191
linpien:這個不推不行啊! 07/25 19:42
※ 編輯: VElysian 來自: 61.64.173.134 (07/25 20:08)
yinjing:推!!改天再讀 XD 07/25 20:21
jyhfang:推你的熱血 XDXD 07/25 20:27
ilovett:推推 07/25 20:28
moonls:這也太強了吧!! 推版主 07/25 22:38
※ 編輯: VElysian 來自: 61.62.148.155 (07/25 23:41)
Kenqr:推! 07/25 23:59