作者VElysian (家瑀 致中和)
看板EzHotKey
标题Re: [讨论] 大家想让电脑有什麽方便的功能?
时间Fri Jul 25 18:58:02 2008
找出资料夹路径的方法
想了很久,花了一个晚上总算写出来了。
不过前提是要把那个资料夹打开,然後用 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
如果我们想直接开启这个路径下的个档案,可以用 FileSelectFile:
FileSelectFile, 存放变数 ,
选项,
绝对路径\档名,
标题,
档案筛选
存放变数:将使用者的档案名称丢进这个变数。
选项(可忽略):
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
1F:推 linpien:这个不推不行啊! 07/25 19:42
※ 编辑: VElysian 来自: 61.64.173.134 (07/25 20:08)
2F:推 yinjing:推!!改天再读 XD 07/25 20:21
3F:推 jyhfang:推你的热血 XDXD 07/25 20:27
4F:推 ilovett:推推 07/25 20:28
5F:推 moonls:这也太强了吧!! 推版主 07/25 22:38
※ 编辑: VElysian 来自: 61.62.148.155 (07/25 23:41)
6F:推 Kenqr:推! 07/25 23:59