;~ altrun、wala功能合并简化脚本,打开脚本后按热键alt+r启动主界面。用户可自行添加列表中的项目及对应的功能。 ;~ 用户自行修改说明: ;~ 需自行修改的地方主要有以下3个: ;~ 一是添加修改AltrunList变量,可以依次自行列举自己的常用软件、功能等等,以顿号隔开。 ;~ 二是添加修改AltrunList变量中各个项目对应的标签,以实现其功能,可以参照“金山快盘”等标签进行更改。 ;~ 三是添加修改各种搜索引擎代码,及个人识别标志。 ;#SingleInstance force ;只允许单个该脚本运行,脚本强制替换 AltrunList:= "金山快盘、百度云盘、360云盘、回收站、foobar2000、注册表、cmd" !r:: Gui, -SysMenu AlwaysOnTop ;删除界面上的各种菜单和图标 Gui, font, s12 Gui, Add, Edit,w400 h20 x0 y0 vAltrunInputContent gAltrunSearch AltrunInputContent:= "" Gui, Add, ListView, r11 w400 x0 y20 Count 20 -Hdr ,11|22222222222222222222222 gosub, AltrunLoad Gui, Show,w400 h193,AltrunInputGui ControlFocus,edit1,AltrunInputGui ahk_class AutoHotkeyGUI ;DllCall("SendMessage" , UInt, DllCall("imm32ImmGetDefaultIMEWnd", Uint,ahk_class AutoHotkeyGUI), UInt, 0x0283 , Int, 0x002 , Int, 0x00) ;切换成英文 OnMessage(0x86,"AltrunInputGuiLostFocus") return #IfWinActive AltrunInputGui ahk_class AutoHotkeyGUI esc:: !r:: ;Space & r:: OnMessage(0x86, "") AltrunListSelected:= AltrunInputContent:= isbreak:= AltrunPinyinVar:= "" Gui, Destroy return CapsLock:: Enter:: OnMessage(0x86, "") Gui, Submit ;将编辑框的内容保存到v变量名中(AltrunInputContent),并隐藏窗口 if LV_GetNext() { LV_GetText(AltrunListSelected, LV_GetNext(), 2) Gosub,%AltrunListSelected% Sleep,200 } Else { AltrunInputContent:= Trim(AltrunInputContent) if RegExMatch(AltrunInputContent, "^www" ) ;网址 Run %AltrunInputContent% else if RegExMatch(AltrunInputContent, "^bk" ) ;百度百科 Run,% "http://baike.baidu.com/searchword/?pic=1&sug=1&oq=s&clk=1&rsp=0&word=" . SubStr(AltrunInputContent, 3 ) else if RegExMatch(AltrunInputContent, "^tb" ) ;淘宝 Run,% "http://search.taobao.com/search?commend=all&isnew=2&q=" . SubStr(AltrunInputContent, 3 ) else if RegExMatch(AltrunInputContent, "^jd" ) ;京东 Run,% "http://search.jd.com/search?enc=utf-8&area=19&keyword=" . SubStr(AltrunInputContent, 3 ) else if RegExMatch(AltrunInputContent, "^hs" ) ;360好搜 Run,% "http://so.360.cn/s?q=" . SubStr(AltrunInputContent, 3 ) else Run,www.baidu.com/s?wd=%AltrunInputContent% Sleep, 200 } AltrunListSelected:= AltrunInputContent:= isbreak:= AltrunPinyinVar:= "" Gui, Destroy Return 金山快盘: MsgBox, 金山快盘。示例,功能请自行添加修改。 return 百度云盘: MsgBox, 百度云盘。示例,功能请自行添加修改。 return 360云盘: MsgBox, 360云盘。示例,功能请自行添加修改。 return foobar2000: MsgBox, foobar2000。示例,功能请自行添加修改。 return 回收站: Run ::{645ff040-5081-101b-9f08-00aa002f954e} ; 打开回收站. Return 注册表: run,regedit.exe Return cmd: run,cmd.exe Return AltrunLoad: GuiControl, -Redraw, SysListView321 ; 在加载时禁用重绘来提升性能 isbreak := false LV_Delete() loop, parse, AltrunList , 、 LV_Add("", a_index, A_loopfield) GuiControl, +Redraw, SysListView321 LV_ModifyCol(1, "Integer") ;为了进行排序, 指明第一列为整数 LV_ModifyCol(1, "Sort") ;立即对第一列按升序排列 LV_Modify(1, "Select") ;选择第一行 return AltrunSearch: Critical ;防止当前线程被其他线程中断。 GuiControl, -Redraw,SysListView321 isbreak := true Gui, Submit , NoHide ;将编辑框的内容保存到v变量名中(AltrunInputContent) if not strlen(AltrunInputContent) { gosub,AltrunLoad return } isbreak := false LV_Delete() AltrunPinyinVar := zh2pyRegexList(AltrunList, AltrunInputContent,"、") loop, % AltrunPinyinVar.maxindex() { if isbreak break LV_Add("",a_index, AltrunPinyinVar[a_index].string) } LV_Modify(1, "Select") GuiControl, +Redraw, SysListView321 Critical,off LV_ModifyCol(1, "Integer") ;为了进行排序, 指明第一列为整数 LV_ModifyCol(1, "Sort") ;立即对第一列按升序排列 LV_Modify(1, "Select") ;选择第一行 return AltrunInputGuiLostFocus(wParam){ if(wParam=0) { Gui, Destroy OnMessage(0x86, "") } } zh2pyRegexList(ListString, RegexString,ListStringFenGeFu) { global zh2pyLocation ObjRegexList := {} ObjRegex := {} ObjStringReturn := {} idx := 1 Loop, Parse, RegexString , %A_Space% { ObjRegex := {} Loop, parse, A_Loopfield ObjRegex[a_index] := A_loopfield ObjRegexList[a_index] := ObjRegex } Loop, Parse, ListString, %ListStringFenGeFu% { thisLine := A_loopfield ObjString := zh2py(thisLine) ObjLocateTemp := {} Loop, % ObjRegexList.MaxIndex() { TrueLine := True if zh2pyRegex(ObjString, ObjRegexList[a_index]) { LocationError := False pos := {} pos["start"] := zh2pyLocation + 1 pos["End"] := zh2pyLocation + ObjRegexList[a_index].MaxIndex() /* ;msgbox % "Loop:`n" Json.Stringify(ObjString) "`n" Json.Stringify(ObjRegexList[a_index]) "`n" pos.start "`n" pos.end "`n" rPos.start "`n" rPos.End Loop, % ObjLocateTemp.MaxIndex() { rPos := ObjLocateTemp[a_Index] if (pos.start >= rPos.start) and (pos.start = rPos.start) and (pos.End = Max) break Lchar := Tchar } zh2pyLocation := idx-ObjRegex.MaxIndex() return (Location >= Max) } ; 从 php 转换而来的 (http://www.sjyhome.com/php/201311170606.html) ; http://ahkscript.org/boards/viewtopic.php?f=27&t=1629 ; 作者: tmplinshi , 修改: Array ; 返回一个数组,整数序列,每个元素的内容为拼音首字母,或者对象 zh2py(str) { ; 根据汉字区位表,(http://www.mytju.com/classcode/tools/QuWeiMa_FullList.asp) ; 我们可以看到从16-55区之间是按拼音字母排序的,所以我们只需要判断某个汉字的区位码就可以得知它的拼音首字母. ; 区位表第一部份,按拼音字母排序的. ; 16区-55区 /* 'A'=>0xB0A1, 'B'=>0xB0C5, 'C'=>0xB2C1, 'D'=>0xB4EE, 'E'=>0xB6EA, 'F'=>0xB7A2, 'G'=>0xB8C1,'H'=>0xB9FE, 'J'=>0xBBF7, 'K'=>0xBFA6, 'L'=>0xC0AC, 'M'=>0xC2E8, 'N'=>0xC4C3, 'O'=>0xC5B6, 'P'=>0xC5BE,'Q'=>0xC6DA, 'R'=>0xC8BB, 'S'=>0xC8F6, 'T'=>0xCBFA, 'W'=>0xCDDA, 'X'=>0xCEF4, 'Y'=>0xD1B9, 'Z'=>0xD4D1 */ static FirstTable := [ 0xB0C5, 0xB2C1, 0xB4EE, 0xB6EA, 0xB7A2, 0xB8C1, 0xB9FE, 0xBBF7, 0xBFA6, 0xC0AC, 0xC2E8 , 0xC4C3, 0xC5B6, 0xC5BE, 0xC6DA, 0xC8BB, 0xC8F6, 0xCBFA, 0xCDDA, 0xCEF4, 0xD1B9, 0xD4D1, 0xD7FA ] static FirstLetter := StrSplit("ABCDEFGHJKLMNOPQRSTWXYZ") Static pym if not IsObject(pym) pym := LoadPyMulti() ; 区位表第二部份,不规则的,下面的字母是每个区里面对应字的拼音首字母.从网上查询整理出来的,可能会有部份错误. ; 56区-87区 static SecondTable := [ StrSplit("CJWGNSPGCGNEGYPBTYYZDXYKYGTZJNMJQMBSGZSCYJSYYFPGKBZGYDYWJKGKLJSWKPJQHYJWRDZLSYMRYPYWWCCKZNKYYG") , StrSplit("TTNGJEYKKZYTCJNMCYLQLYPYSFQRPZSLWBTGKJFYXJWZLTBNCXJJJJTXDTTSQZYCDXXHGCKBPHFFSSTYBGMXLPBYLLBHLX") , StrSplit("SMZMYJHSOJNGHDZQYKLGJHSGQZHXQGKXZZWYSCSCJXYEYXADZPMDSSMZJZQJYZCJJFWQJBDZBXGZNZCPWHWXHQKMWFBPBY") , StrSplit("DTJZZKXHYLYGXFPTYJYYZPSZLFCHMQSHGMXXSXJYQDCSBBQBEFSJYHWWGZKPYLQBGLDLCDTNMAYDDKSSNGYCSGXLYZAYPN") , StrSplit("PTSDKDYLHGYMYLCXPYCJNDQJWXQXFYYFJLEJPZRXCCQWQQSBZKYMGPLBMJRQCFLNYMYQMSQYRBCJTHZTQFRXQHXMQJCJLY") , StrSplit("QGJMSHZKBSWYEMYLTXFSYDXWLYCJQXSJNQBSCTYHBFTDCYZDJWYGHQFRXWCKQKXEBPTLPXJZSRMEBWHJLBJSLYYSMDXLCL") , StrSplit("QKXLHXJRZJMFQHXHWYWSBHTRXXGLHQHFNMGYKLDYXZPYLGGSMTCFBAJJZYLJTYANJGBJPLQGSZYQYAXBKYSECJSZNSLYZH") , StrSplit("ZXLZCGHPXZHZNYTDSBCJKDLZAYFFYDLEBBGQYZKXGLDNDNYSKJSHDLYXBCGHXYPKDJMMZNGMMCLGWZSZXZJFZNMLZZTHCS") , StrSplit("YDBDLLSCDDNLKJYKJSYCJLKWHQASDKNHCSGAGHDAASHTCPLCPQYBSZMPJLPCJOQLCDHJJYSPRCHNWJNLHLYYQYYWZPTCZG") , StrSplit("WWMZFFJQQQQYXACLBHKDJXDGMMYDJXZLLSYGXGKJRYWZWYCLZMSSJZLDBYDCFCXYHLXCHYZJQSQQAGMNYXPFRKSSBJLYXY") , StrSplit("SYGLNSCMHCWWMNZJJLXXHCHSYZSTTXRYCYXBYHCSMXJSZNPWGPXXTAYBGAJCXLYXDCCWZOCWKCCSBNHCPDYZNFCYYTYCKX") , StrSplit("KYBSQKKYTQQXFCMCHCYKELZQBSQYJQCCLMTHSYWHMKTLKJLYCXWHEQQHTQKZPQSQSCFYMMDMGBWHWLGSLLYSDLMLXPTHMJ") , StrSplit("HWLJZYHZJXKTXJLHXRSWLWZJCBXMHZQXSDZPSGFCSGLSXYMJSHXPJXWMYQKSMYPLRTHBXFTPMHYXLCHLHLZYLXGSSSSTCL") , StrSplit("SLDCLRPBHZHXYYFHBMGDMYCNQQWLQHJJCYWJZYEJJDHPBLQXTQKWHLCHQXAGTLXLJXMSLJHTZKZJECXJCJNMFBYCSFYWYB") , StrSplit("JZGNYSDZSQYRSLJPCLPWXSDWEJBJCBCNAYTWGMPAPCLYQPCLZXSBNMSGGFNZJJBZSFZYNTXHPLQKZCZWALSBCZJXSYZGWK") , StrSplit("YPSGXFZFCDKHJGXTLQFSGDSLQWZKXTMHSBGZMJZRGLYJBPMLMSXLZJQQHZYJCZYDJWFMJKLDDPMJEGXYHYLXHLQYQHKYCW") , StrSplit("CJMYYXNATJHYCCXZPCQLBZWWYTWBQCMLPMYRJCCCXFPZNZZLJPLXXYZTZLGDLTCKLYRZZGQTTJHHHJLJAXFGFJZSLCFDQZ") , StrSplit("LCLGJDJZSNZLLJPJQDCCLCJXMYZFTSXGCGSBRZXJQQCTZHGYQTJQQLZXJYLYLBCYAMCSTYLPDJBYREGKLZYZHLYSZQLZNW") , StrSplit("CZCLLWJQJJJKDGJZOLBBZPPGLGHTGZXYGHZMYCNQSYCYHBHGXKAMTXYXNBSKYZZGJZLQJTFCJXDYGJQJJPMGWGJJJPKQSB") , StrSplit("GBMMCJSSCLPQPDXCDYYKYPCJDDYYGYWRHJRTGZNYQLDKLJSZZGZQZJGDYKSHPZMTLCPWNJYFYZDJCNMWESCYGLBTZZGMSS") , StrSplit("LLYXYSXXBSJSBBSGGHFJLYPMZJNLYYWDQSHZXTYYWHMCYHYWDBXBTLMSYYYFSXJCBDXXLHJHFSSXZQHFZMZCZTQCXZXRTT") , StrSplit("DJHNRYZQQMTQDMMGNYDXMJGDXCDYZBFFALLZTDLTFXMXQZDNGWQDBDCZJDXBZGSQQDDJCMBKZFFXMKDMDSYYSZCMLJDSYN") , StrSplit("SPRSKMKMPCKLGTBQTFZSWTFGGLYPLLJZHGJJGYPZLTCSMCNBTJBQFKDHBYZGKPBBYMTDSSXTBNPDKLEYCJNYCDYKZTDHQH") , StrSplit("SYZSCTARLLTKZLGECLLKJLQJAQNBDKKGHPJTZQKSECSHALQFMMGJNLYJBBTMLYZXDXJPLDLPCQDHZYCBZSCZBZMSLJFLKR") , StrSplit("ZJSNFRGJHXPDHYJYBZGDLQCSEZGXLBLGYXTWMABCHECMWYJYZLLJJYHLGNDJLSLYGKDZPZXJYYZLWCXSZFGWYYDLYHCLJS") , StrSplit("CMBJHBLYZLYCBLYDPDQYSXQZBYTDKYXJYYCNRJMPDJGKLCLJBCTBJDDBBLBLCZQRPYXJCJLZCSHLTOLJNMDDDLNGKATHQH") , StrSplit("JHYKHEZNMSHRPHQQJCHGMFPRXHJGDYCHGHLYRZQLCYQJNZSQTKQJYMSZSWLCFQQQXYFGGYPTQWLMCRNFKKFSYYLQBMQAMM") , StrSplit("MYXCTPSHCPTXXZZSMPHPSHMCLMLDQFYQXSZYJDJJZZHQPDSZGLSTJBCKBXYQZJSGPSXQZQZRQTBDKYXZKHHGFLBCSMDLDG") , StrSplit("DZDBLZYYCXNNCSYBZBFGLZZXSWMSCCMQNJQSBDQSJTXXMBLTXZCLZSHZCXRQJGJYLXZFJPHYMZQQYDFQJJLZZNZJCDGZYG") , StrSplit("CTXMZYSCTLKPHTXHTLBJXJLXSCDQXCBBTJFQZFSLTJBTKQBXXJJLJCHCZDBZJDCZJDCPRNPQCJPFCZLCLZXZDMXMPHJSGZ") , StrSplit("GSZZQLYLWTJPFSYASMCJBTZYYCWMYTZSJJLJCQLWZMALBXYFBPNLSFHTGJWEJJXXGLLJSTGSHJQLZFKCGNNNSZFDEQFHBS") , StrSplit("AQTGYLBXMMYGSZLDYDQMJJRGBJTKGDHGKBLQKBDMBYLXWCXYTTYBKMRTJZXQJBHLMHMJJZMQASLDCYXYQDLQCAFYWYXQHZ") ] static nothing := VarSetCapacity(var, 2) ObjStr := {} ; 如果不包含中文字符,则直接返回原字符 if not RegExMatch(str,"[^x00-xff]") { Loop, Parse, Str ObjStr[A_Index] := A_Loopfield return Objstr } ;if ( Asc(str) 0x9FFF ) ; Return str Loop, Parse, str { StrPut(A_LoopField, &var, "CP936") H := NumGet(var, 0, "UChar") L := NumGet(var, 1, "UChar") idx := a_index char := A_loopfield ; 字符集非法 if (H 0xF7 || L = 0xFF) { ;newStr .= A_loopfield ObjStr[idx] := char Continue } ; 多音字 if (mstr := pym[asc(A_Loopfield)]) { ;newStr .= "[" mstr "]" ObjMulti := {} Loop, Parse, mstr ObjMulti[a_index] := A_loopfield ObjStr[idx] := ObjMulti Continue } if (H = 0xB0 && H = 0xD8 && H