##title##

顯示具有 軟體 | Autohotkey 標籤的文章。 顯示所有文章
顯示具有 軟體 | Autohotkey 標籤的文章。 顯示所有文章

2020年5月20日

Autohotkey:依序產生變數,以及依序取出變數

可以透過:=左邊也是變數的方式來組合變數,例如透過loop的方式,把行列的值拿來拼成變數,像是%1_1%,%1_2%,%2_1%,%2_2%。

但要用依序讀取則需要特殊寫法,在最前面加一個%。

範例如下:


F1::
Loop, Read, %A_ScriptDir%\test.txt
{
LineNumber := A_Index ;先令Loop, Read得到的A_Index(此處為行數)為變數LineNumber
Loop, parse, A_LoopReadLine, CSV ;以CVS格式切每行內容(用逗號切)
 {
 if A_Index = 1 ;意思是擷取每行第1個(在此為時間)
 %LineNumber%_%A_Index% := A_LoopField
 if A_Index = 2 ;意思是擷取每行第2個(在此為內容)
 %LineNumber%_%A_Index% := A_LoopField
 }
}
front = 1
loop, 2
{
back = 1
loop, 2
 {
 msgbox, % %front%_%back% ;組合變數的方式在最前面加一個%
 back := back + 1
 }
front := front + 1
}
return


2020年5月13日

Autohotkey:以GUI輸入文字作為變數

嘗試把一個檔案自動化檢查MD5,並加上註記寫入txt檔作為紀錄,但記錄時需要打字,所以研究了一下如何以GUI輸入文字作為變數。


; ==============================GUI全域設定==============================
GuiCloseOK:
GuiControlGet, MyEdit ;輸入內容存為變數MyEdit
Gui, Destroy
return
GuiCloseCancel:
MyEdit:=""
Gui, Destroy
return
; ==============================全域設定結束==============================

::/test::
Gui, Color, White
Gui, Add, Edit, x22 y19 w240 h120 vMyEdit, 異動了甚麼? ;GUI內文,輸入內容寫入MyEdit
Gui, Add, Button, x22 y179 w100 h30 gGuiCloseOk, Ok ;GUI點OK觸發gGuiCloseOk
Gui, Show, w286 h231, log ;GUI標題
WinGetPos,,, Width, Height, log ;取得視窗座標
WinMove, log,, (A_ScreenWidth/2)-(Width/2), (A_ScreenHeight/2)-(Height/2) ;調整視窗座標
WinWaitClose, log
Gui, Destroy ;關閉GUI
StringReplace, MyEdit, MyEdit, `r`n, , All ; 移除MyEdit中所有的 CR+LF
Sleep, 5000 ;卸載後無法馬上解析檔案,停留5秒
; 以HashMyFiles.exe將目標檔案輸出MD5至txt,排除SHA1、CRC32、SHA256、SHA512、SHA384
Run "%A_ScriptDir%\..\Tools\hashmyfiles-x64\HashMyFiles.exe" /SHA1 0 /CRC32 0 /SHA256 0 /SHA512 0 /SHA384 0 /SaveDirect /file %DropboxDIR%\%file% /scomma %DropboxDIR%\temp.txt
SetTimer, fileMD5check, -10000 ;10秒後執行fileMD5check
return

fileMD5check:
Loop, Read,  %DropboxDIR%\temp.txt
{
LineNumber := A_Index ;先令Loop, Read得到的A_Index(此處為行數)為變數LineNumber
Loop, parse, A_LoopReadLine, CSV ;以CVS格式切每行內容(用逗號切)
 {
 if A_Index = 1 ;意思是擷取每行第1個(在此為檔名)
 FileAppend, %A_YYYY%/%A_MM%/%A_DD% %A_Hour%:%A_Min%:%A_Sec%@%A_ComputerName%`,%A_LoopField%`,,  %DropboxDIR%\md5.txt ;時間、電腦名稱、檔名寫入文字文件
 if A_Index = 2 ;意思是擷取每行第2個(在此為MD5)
 FileAppend, %A_LoopField%`,%MyEdit%`n, %DropboxDIR%\md5.txt ;MD5、輸入的文字寫入文字文件
 }
FileDelete,  %DropboxDIR%\temp.txt
Gui, +AlwaysOnTop +Disabled -SysMenu +Owner  ; +Owner 避免顯示任務欄按鈕.
Gui, Color, White
Gui, Add, Text,, file MD5 hash value checksum done!`r`nMD5 is %A_LoopField%`r`n(2秒後自動關閉)
Gui, Show, NoActivate, MD5 Hash  ; NoActivate 讓當前活動窗口繼續保持活動狀態.
Sleep, 2000
Gui, Destroy ;關閉GUI
Return

參考資料:

2018年12月7日

Autohotkey:日期轉換加上星期,例如將11/23→11/23(五)

因為常常需要key日期然後加上星期,所以寫了這個很懶惰的東西。

感謝PTT的LPH66大大協助優化腳本。



F1:: ;win+shift+w,將所選日期轉換添加星期,以當年計算 ex:11/23→11/23(五)
OldClip = %Clipboard% ;把目前的剪貼簿內容先存起來
sleep, 200
Send, ^c
sleep, 200
Loop, Parse, Clipboard, /,
{
 if A_Index <= 1 ;第1個循環存入v_month
 v_month = %A_LoopField%
 if A_Index <= 2 ;第2個循環存入v_day
 v_day = %A_LoopField%
}
if v_month < 10 ;小於10加0
v_month = 0%v_month%
if v_day < 10 ;小於10加0
v_day = 0%v_day%
if A_MM > 11 ;如果當前月份大於11(也就是12月)
 {
 if v_month < 6 ;如果要輸入的月份小於6(也就是1~5月)
  {
  v_year := A_YYYY+1
  }
 else ;如果要輸入的月份大於等於6(也就是6~12月)
  {
  v_year := A_YYYY
  }
 }
else ;當前月份小於等於11(也就是1~12月)
 {
 v_year := A_YYYY
 }
FormatTime, TimeString,%v_year%%v_month%%v_day%, WDay
TimeString := TimeString-1
V_CWday := SubStr("日一二三四五六", TimeString+1, 1) ;從字串開始向右複製不超過長度1的子字符串至V_CWday
sleep, 200
Clipboard = %Clipboard%(%V_CWday%)
sleep, 200
Send, ^v
Clipboard = %OldClip% ;恢復先前剪貼簿內容
return



其實還可以再優化一下,例如判斷是年底的最後一個月的時候如果輸入的月份小於6月以前,就用明年搜尋星期。有時間再調整吧。


2018/12/26補充:已調整為月底會改為隔年。邏輯是如果當前月份大於11(也就是12月),且要輸入的月份小於6(也就是1~5月),則用隔年來計算。

2018年3月22日

Autohotkey:有UI介面的自動化外掛

寫了一個公司系統的自動化外掛,突破了幾個功能。


  1. 實現用Chrome讀取條顏色判斷時間
  2. 用Chrome搜尋文字功能來定位座標
  3. UI介面,文字顯示進度與花費時間
  4. 計算預期完成時間
  5. 圖像化進度條顯示進度
  6. 自動輸出可節省的動作和時間純文字日誌


雖然有些功能是該工具介面限定,但有些概念還是共通,在此紀錄一下。
F12::
V_PluginName = 權限管理外掛
V_Version = v6.3
V_Game = AAA, BBB ;遊戲
V_Name = Aaron, Claire, Jacky ; 名字
V_Function = 功能1, 功能2 ; 功能名稱
V_StartTime = %A_Now% ;紀錄開始時間
CoordMode ,Pixel, Screen ;設置座標模式相對於桌面 (整個屏幕)
CoordMode ,Mouse, Screen ;設置滑鼠座標模式相對於桌面 (整個屏幕)
BlockInput ,Mouse
WinWait, 9sPlay - Google Chrome, 
IfWinNotActive, 9sPlay - Google Chrome, , WinActivate, 9sPlay - Google Chrome, 
WinWaitActive, 9sPlay - Google Chrome, 
Loop, Parse, V_Game, `, ;用 "," 解析 V_Game 字串並計算切割後的字串數量
 {
 V_GameNum =%A_Index%
 }
Loop, Parse, V_Name, `, ;用 "," 解析 V_Name 字串並計算切割後的字串數量
 {
 V_NameNum =%A_Index%
 }
Loop, Parse, V_Function, `, ;用 "," 解析 V_Function 字串並計算切割後的字串數量
 {
 V_FunctionNum =%A_Index%
 }
V_ActionNum := V_GameNum*(V_NameNum+V_FunctionNum) ;計算動作數量
Gui, Color, White ;GUI顏色設定為白色
Gui, Add, Text, W600, 新增項目:%V_Game%`r`n`r`n人員:%V_Name%`r`n`r`n功能:%V_Function%`r`n ;新增本次工作內容文字
Gui, Add, Progress, vV_MyProgress w600 ;新增進度條至變量 V_MyProgress (在字母 V 後指定一個變量名, 此變量將為全局變量)
Gui, Add, Text, vV_MyText W600 Right  ;新增文字至變量 V_MyText (在字母 V 後指定一個變量名, 此變量將為全局變量)
Gui +Resize +MaxSize640x480 +AlwaysOnTop -SysMenu ;GUI設定尺寸、保持最上層、去掉系統選單
Gui, Show, X-900 Y300 NoActivate, %V_PluginName% %V_Version% ;NoActivate 讓當前活動窗口繼續保持活動狀態
Loop, Parse, V_Game, `, ;用 "," 解析 V_Game 字串並執行本次工作內容
 {
 V_CurrentTime = %A_Now% ;紀錄當前時間
 EnvSub, V_CurrentTime, %V_StartTime%, S ;以秒計算總共花了多少時間,並更新至 V_CurrentTime
 V_EstimateTime := (V_CurrentTime//(A_Index)-1)*V_GameNum ;預測時間公式:(當前時間 V_CurrentTime//第 A_Index 個項目-1)*V_GameNum. (//)表示為向下捨除
 V_ProgressPercentage := (A_Index/V_GameNum)*100 ;進度百分比公式:(A_Index 當前進度數/V_GameNum 總遊戲數)*100
 GuiControl,, V_MyProgress, %V_ProgressPercentage% ;更新進度條
  if A_Index <= 1
  {
  GuiControl,, V_MyText, 目前執行到第%A_Index%/%V_GameNum%個項目"%A_LoopField%",已使用時間計算中,預期時間計算中 ;更新進度文字至變量 V_MyText
  Gosub, L_AutoAction ;開權限主要動作
  }
 else
  {
  GuiControl,, V_MyText, 目前執行到第%A_Index%/%V_GameNum%個項目"%A_LoopField%",已使用%V_CurrentTime%秒,預期使用%V_EstimateTime%秒 ;更新進度文字
  Gosub, L_AutoAction ;開權限主要動作
  }
 }
V_CurrentTime = %A_Now% ;紀錄結束時間
EnvSub, V_CurrentTime, %V_StartTime%, S ;計算總共花了多少時間
MsgBox, 262144, %V_PluginName% %V_Version%, 新增項目:%V_Game%`r`n`r`n人員:%V_Name%`r`n`r`n功能:%V_Function%`r`n`r`n太棒了!你又節省了%V_CurrentTime%秒!
Gui,Destroy
FileAppend, %A_YYYY%/%A_MM%/%A_DD% %A_Hour%:%A_Min%:%A_Sec%`, %V_Version% save action`,%V_ActionNum% `, and time(second)`, %V_CurrentTime%`n, %A_ScriptDir%\9SplayBackgroundPluginLog.txt ;輸出日誌
Run, %A_ScriptDir%\9SplayBackgroundPluginLog.txt ;開啟日誌
Return

L_SaveFind1: ;搜尋字串後尋找搜尋色塊
OldClip = %Clipboard% ;把目前的剪貼簿內容先存起來
Clipboard = %A_LoopField% ;將字串替換至剪貼簿
Sleep, 300
send, ^f ;搜尋字串
Sleep, 300
send, ^v ;貼上複製內容
Sleep, 700
PixelSearch, V_ColorCoordinateX, V_ColorCoordinateY, -746, -897, -36, 300, 0x3296FF, 3, Fast ;尋找搜尋色塊
Return

L_SaveFind2: ;點擊座標修正後的勾選框
Sleep, 300
mousemove,  %V_NewColorCoordinateX%, %V_NewColorCoordinateY%
Mouseclick, Left, %V_NewColorCoordinateX%, %V_NewColorCoordinateY% ;點擊座標修正後的勾選框
Sleep, 300
Clipboard = %OldClip% ;恢復先前剪貼簿內容
Return

L_AutoAction: ;開權限主要動作
Mouseclick, Left,  -924,  -871, , 1 ;點項目選單
Sleep, 300
Send, %A_LoopField%{ENTER}
Sleep, 700
Loop ;判斷讀取條是否還在
 {
 PixelSearch, V_ColorCoordinateX, V_ColorCoordinateY, -999, 710, -989, 715, 0xFFFFFF, 3, Fast ;搜尋白色底色
 if ErrorLevel ;如果讀取條還在
  {
  Sleep, 300
  }
 else
  {
  Loop, Parse, V_Name, `, ;用 "," 解析 V_Name 字串後搜尋,並點擊座標修正後的勾選框
   {
   Gosub L_SaveFind1
   V_NewColorCoordinateX := V_ColorCoordinateX-62 ;名字座標修正
   V_NewColorCoordinateY := V_ColorCoordinateY+5 ;名字座標修正
   Gosub L_SaveFind2
   }
  Loop, Parse, V_Function, `, ;用 "," 解析 V_Function 字字串後搜尋,並點擊座標修正後的勾選框
   {
   Gosub L_SaveFind1
   V_NewColorCoordinateX := V_ColorCoordinateX-42 ;功能座標修正
   V_NewColorCoordinateY := V_ColorCoordinateY+5 ;功能座標修正
   Gosub L_SaveFind2
   }
  PixelSearch, V_ColorCoordinateX, V_ColorCoordinateY, -746, -897, -36, 300, 0xDEC05B, 3, Fast ;搜尋確定更改
  V_NewColorCoordinateX := V_ColorCoordinateX+25 ;確定更改座標修正
  V_NewColorCoordinateY := V_ColorCoordinateY+10 ;確定更改座標修正
  Sleep, 300
  Mouseclick, Left, %V_NewColorCoordinateX%,%V_NewColorCoordinateY% ;點確定更改
  Break
  }
 }
Loop ;判斷修正完成蓋台還沒出現
 {
 PixelSearch, V_ColorCoordinateX, V_ColorCoordinateY, -999, 710, -989, 715, 0x7F7F7F, 3, Fast ;搜尋灰色蓋台色
 if ErrorLevel ;如果修正完成蓋台還沒出現
  {
  Sleep, 300
  }
 else
  {
  Mouseclick, Left, -924,  -855, , 3 ;把蓋台按掉
  Sleep, 1000
  Break
  }
 }
Return

2016年3月1日

Autohotkey:CoordMode,延伸螢幕座標控制

用AU3_spy看Mouse Position的On Screen座標,發現如果座標是在延伸螢幕的座標,例如:

mousemove, -100, -500

游標控制都會失敗,例如滑鼠游標會跑到延伸螢幕的左上角。

但如果是在主要螢幕就不會有這個問題了,PTT問了下,mkz6大大提供了解法。

設置:
CoordMode, Mouse, Screen


CoordMode說明
为多个命令设置坐标模式, 相对于活动窗口还是屏幕.
CoordMode, ToolTip|Pixel|Mouse|Caret|Menu [, Screen|Window|Client]
参数

Param1
ToolTip: 作用于 ToolTip.
Pixel: 作用于 PixelGetColor, PixelSearchImageSearch.
Mouse: 作用于 MouseGetPos, Click 以及 MouseMove/Click/Drag.
Caret: 作用于内置变量 A_CaretXA_CaretY.
Menu: 作用于为 "Menu Show" 命令指定坐标的时候.

Param2
如果省略 Param2, 则默认为 Screen.
Screen: 坐标相对于桌面 (整个屏幕).
Relative: 坐标相对于活动窗口.
Window [v1.1.05+]: 与 Relative 效果相同, 但由于含义清晰, 因此建议使用.
Client [v1.1.05+]: 坐标相对于活动窗口的工作区, 其中不包括标题栏, 菜单栏 (如果它含有标准菜单栏的话) 和边框. Client 坐标模式较少依赖于操作系统版本和主题.

备注
如果没有使用此命令, 除了另外注明的那些外的所有命令 (例如 WinMoveInputBox) 都使用相对于活动窗口的坐标模式.
每个新运行的 线程 (例如 热键, 自定义菜单项定时 子程序) 都会以此命令的默认设置开始. 通过在脚本的自动执行段 (脚本的顶部) 使用此命令可以改变这个默认设置.
相关
Click, MouseMove, MouseClick, MouseClickDrag, MouseGetPos, PixelGetColor, PixelSearch, ToolTip, Menu

示例
CoordMode, ToolTip, Screen ; 把 ToolTips 放置在相对于屏幕坐标的位置: CoordMode, ToolTip ; 和上面效果相同, 因为 "screen" 是默认的坐标模式.

2016年2月28日

Autohotkey:大量BT種子批量下載並改檔名腳本

這個腳本主要是為了用來解決我常有大量種子下載需求。

因為在下載種子的時候,通常我就會把我想要存成的檔名或資料夾名稱直接改為種子名稱。但是當有幾十個種子要下載的時候,我必須重複這樣的動作:
  1. 按F2。
  2. Ctrl+C複製種子檔名。
  3. Enter開啟種子。
  4. 檢視這是單一檔案或是一個資料夾。如果是資料夾的話直接貼上名稱,但如果是單一檔案就只貼上名稱到副檔名前,所以如果是手動的話這時候會比較麻煩。因為只有單一檔案這樣的種子它的路徑可能會是「C:\Download\XXXX123.avi」,就算你的設定是隱藏副檔名,你直接貼上,它下載下來的檔案會變成沒有副檔名「XXXX123」這樣的檔案。
  5. 選擇想要保留的檔案(因為有時候種子裡會有很多垃圾檔)按Enter。
  6. 回到放種子的資料夾選下一個檔案,繼續上述動作。
其他地方的自動化都還蠻好處理的,但其中最麻煩的部分是第4點,這裡用到了判斷字串、計算字串長度以及修改字串的技巧。

另外一個比較麻煩的是第6點,這裡需注意到SetTitleMatchMode的值,因為需要用到包和或用更多條件精準判斷視窗名稱的技巧。另一個是Gosub所在位置,因為很假掰的用了else,結果一開始一直不知道為什麼「Gosub, avmove」沒有辦法被啟用,結果是因為放的位置錯了。(我原本放到avcopy最後的return之前)

所以前前後後可能研究了好幾個小時吧,現在只剩不知道怎麼寫如何選擇想要保留的檔案。(如果大概知道怎麼做得大大也可以分享一下大概可以怎麼做)

但目前的做法已經解決大部分問題,還是蠻有成就感的,來分享一下作法,大家以後如果碰到類似問題可參考。

F8:: ;種子自動貼檔名:啟動
Gosub, avcopy
return

avcopy: ;種子自動貼檔名(查字串中是否有副檔名判斷為單獨檔案或是資料夾)
Send, {F2} ;編輯檔名
sleep, 500
Send, ^{C} ;複製檔名
filename = %clipboard%
Send, {Enter}{Enter} ;開啟種子
sleep, 888
Send, ^{A} ;全選路徑
sleep, 300
Send, ^{C} ;複製路徑
sleep, 300
if clipboard contains .wmv,.mp4,.avi,.mkv,.rmvb,.rm ;如果完整路徑中包含所列副檔名,則判定為只有單一檔案
{
 StringGetPos, pos, clipboard, ., R ;從最右邊開始搜尋點的位置
 StringLen, length, clipboard ;計算字串長度
 npos := length-pos ;長度減掉位置
 StringRight, fileextension, clipboard, npos  ; 把clipboard中名稱去掉檔名丟到變數fileextension
 clipboard = %filename%%fileextension% ;把檔名加上副檔名後丟到剪貼簿
 sleep, 300
 Send, ^{V} ;貼上種子檔名&副檔名內容
 Gosub, avmove
 return
}
else
{
 clipboard = %filename%
 sleep, 300
 Send, ^{V} ;貼上種子名稱
 Gosub, avmove
    return
}
Gosub, avmove
return

avmove: ;種子自動化:確認並移動到下一個種子
SetTitleMatchMode, 2 ;SetTitleMatchMode包含模式
WinWait, 增加新的Torrent ahk_class #32770
sleep, 100
WinWaitClose, 增加新的Torrent ahk_class #32770
sleep, 100
SetTitleMatchMode, 3 ;SetTitleMatchMode準確匹配模式
WinWait, Torrent ahk_class CabinetWClass, 
IfWinNotActive, Torrent ahk_class CabinetWClass, , WinActivate, Torrent ahk_class CabinetWClass, 
WinWaitActive, Torrent ahk_class CabinetWClass, 
Sleep, 100
Send, {Down}
Gosub, avcopy
return

2015年7月24日

Autohotkey:熱鍵

熱鍵


符號 說明
# Win (Windows 徽標鍵). 在 v1.0.48.01+, 對於 Windows Vista 及以上版本, 包含 Windows 鍵的熱鍵 (例如 #a) 會等待 Windows 鍵被釋放後才發送任何包含 "L" 鍵擊的文本. 這樣避免了這種熱鍵中的 Send 鎖定 PC. 這種行為適用於除 SendPlay (這裡不需要) 和 盲從模式 外的所有發送模式.
! Alt
^ Control
+ Shift
& 和符號可以用來組合任意兩個按鍵或鼠標按鈕, 讓它們成為自定義熱鍵. 請參閱 後面 瞭解詳情. 在 Windows 95/98/Me 中這樣的熱鍵會被忽略 (無法激活).
< 使用成對按鍵中左邊的那個. 例如
> 使用成對按鍵中右邊的那個. 此符號在 Windows 95/98/ME 中會被忽略.
<^>! AltGr (alternate graving). 如果您鍵盤佈局中含 AltGr 鍵而非右 Alt 鍵, 那麼這一系列符號一般可以用來表示 AltGr (需要 Windows NT/2k/XP 或更高版本). 例如:
   
  <^>!m::MsgBox You pressed AltGr+m.
  <^
   
  或者, 讓 AltGr 自己成為熱鍵, 請使用下面的熱鍵 (不像上面出現的任何熱鍵):
   
  LControl & RAlt::MsgBox You pressed AltGr itself.
   
* 通配符: 即使附加的修飾鍵被按住也能激發熱鍵. 這常與 重映射 按鍵或按鈕組合使用. 例如:
   
  *#c::Run Calc.exe  ; Win+C, Shift+Win+C, Ctrl+Win+C 等都會觸發此熱鍵.
  *ScrollLock::Run Notepad  ; 即使在按住其他鍵時按下 ScrollLock 也會觸發此熱鍵.
   
  此符號在 Windows 95/98/ME 中會被忽略.
~ 激發熱鍵時,不會屏蔽(被操作系統隱藏)熱鍵中按鍵原有的功能。在下面的兩個例子中, 用戶的鼠標按鈕點擊會被發送到活動窗口:
   
  ~RButton::MsgBox You clicked the right mouse button.
  ~RButton & C::MsgBox You pressed C while holding down the right mouse button.
   
  注意: 1) 與其他前綴符號不同, 可以在某些熱鍵的 變體 中使用顎化符前綴但其他的不使用; 2) 代替 alt-tab 的特殊熱鍵總是忽略顎化符前綴; 3) 顎化符前綴在 Windows 95/98/ME 上被忽略
$ 通常只在腳本使用 Send 命令發送包含了熱鍵自身的按鍵時才需要使用此符號, 此時可以避免觸發它自己. $ 前綴強制使用 鍵盤鉤子 來實現此熱鍵, 作為一個副作用這樣避免了 Send 命令觸發它自己. $ 前綴相當於在此熱鍵定義之前的某個位置指定了 #UseHook.
   
  [v1.1.06+]: #InputLevel 和 SendLevel 對 Send 命令是否觸發熱鍵和熱字串提供了額外的控制功能.
UP 單詞 UP 可以跟在熱鍵名後面使得在釋放按鍵時觸發熱鍵, 而不是按下時. 下面的例子把 LWin 重映射 為 LControl:
   
  *LWin::Send {LControl Down}
  *LWin Up::Send {LControl Up}
   
  "Up" 也可以用於普通熱鍵中, 例如: ^!r Up::MsgBox You pressed and released Ctrl+Alt+R. 它還可以用在 組合鍵 (例如 F1 & e Up::)
   
  限制: 1) "Up" 不能和 有些桿按鈕 一起使用; 2) "Up" 需要 Windows NT4/2000/XP 或更高版本; 且 3) 沒有普通/按下熱鍵副本的 "Up" 熱鍵會完全接管那個熱鍵以防止它的按鍵卡住. 避免這種情況的一種方法是添加 顎化符前綴 (例如 ~LControl up::)
   
  相關提示, 類似於上面的一種技術是讓熱鍵成為前綴鍵. 好處是儘管熱鍵會在按鍵鬆開時激發, 但僅在您之前按住此前綴鍵時沒有按其他任何鍵的情況下才會如此. 例如:
   
  LControl & F1::return  ; 通過把左 control 鍵放在 "&" 前面至少一次來讓它成為前綴鍵.
  LControl::MsgBox You released LControl without having used it to modify any other key.
   

2015年4月3日

Autohotkey:Key Names&轉義序列

Key Names



按鍵名稱
生成的鍵擊
{F1} - {F24}
功能鍵. 例如: {F12} 表示 F12 .
{!}
!
{#}
#
{+}
+
{^}
^
{{}
{
{}}
}
{Enter}
主鍵盤上的 ENTER
{Escape} {Esc}
ESCAPE
{Space}
SPACE (僅對於要發送的按鍵序列開始或末尾的空格才需要這樣表示, 而序列中間的空格是原義的)
{Tab}
TAB
{Backspace} {BS}
Backspace
{Delete} {Del}
Delete
{Insert} {Ins}
Insert
{Up}
主鍵盤上的向上鍵
{Down}
主鍵盤上的向下鍵
{Left}
主鍵盤上的向左鍵
{Right}
主鍵盤上的向右鍵
{Home}
主鍵盤上的 Home
{End}
主鍵盤上的 End
{PgUp}
主鍵盤上的向上翻頁鍵
{PgDn}
主鍵盤上的向下翻頁鍵


{CapsLock}
CapsLock ( NT/2k/XP 中使用 SetCapsLockState 更可靠). 發送 {CapsLock} 之前可能要求 SetStoreCapslockMode Off.
{ScrollLock}
ScrollLock (另請參閱: SetScrollLockState)
{NumLock}
NumLock (另請參閱: SetNumLockState)


{Control} {Ctrl}
CONTROL (技術信息: 發送中性的虛擬按鍵代碼和左邊的掃瞄碼, 即在 vkXXscYYY , XX 為中性的而 YYY 為左邊的掃瞄碼)
{LControl} {LCtrl}
CONTROL (技術信息: Win9x 中等同於 CONTROL, 但在 NT/2k/XP 中它發送左邊的虛擬按鍵而不是中性的)
{RControl} {RCtrl}
CONTROL
{Control Down} {Ctrl Down}
按住 CONTROL 鍵直到發送 {Ctrl Up}. XP/2000/NT: 要按住左邊或右邊的鍵, 請使用 {RCtrl Down} {RCtrl Up}.


{Alt}
ALT (技術信息: 發送中性的虛擬按鍵和左邊的掃瞄碼)
{LAlt}
ALT (技術信息: Win9x 中等同於 ALT, 但在 NT/2k/XP 中它發送左邊的虛擬按鍵而不是中性的)
{RAlt}
ALT ( AltGr, 取決於鍵盤佈局)
{Alt Down}
按住 ALT 鍵直到發送 {Alt Up}. XP/2000/NT: 要按住左邊或右邊的鍵, 請使用 {RAlt Down} {RAlt Up}.


{Shift}
SHIFT (技術信息: 發送中性的虛擬按鍵和左邊的掃瞄碼)
{LShift}
SHIFT (技術信息: Win9x 中等同於 SHIFT, 但在 NT/2k/XP 中它發送左邊的虛擬按鍵而不是中性的)
{RShift}
SHIFT
{Shift Down}
按住 SHIFT 鍵直到發送 {Shift Up}. XP/2000/NT: 要按住左邊或右邊的鍵, 請使用 {RShift Down} {RShift Up}.


{LWin}
Windows
{RWin}
Windows
{LWin Down}
按住左 Windows 鍵直到發送 {LWin Up}
{RWin Down}
按住右 Windows 鍵直到發送 {RWin Up}


{AppsKey}
Windows Appskey (調用右鍵點擊或上下文菜單)
{Sleep}
電腦 SLEEP .
{ASC nnnnn}
發送 ALT+nnnnn 小鍵盤上的按鍵組合, 可以用來生成鍵盤上不存在的特殊字符. 要生成 ASCII 字符, 請指定一個介於 1 255 之間的數字. 要生成 ANSI 字符 (在大多數語言中的標準), 請指定一個介於 128 255 之間的數字, 但需要在數字前加上一個前導零, 例如 {Asc 0133}.
要生成 Unicode 字符, 請指定一個介於 256 65535 之間的數字 (不帶前導零). 但是, 有些應用程序不支持這種方法. 對於替代方法, 請參閱下面的部分.
{U+nnnn}
[AHK_L 24+]: 發送 Unicode 字符, 其中 nnnn 為不包括 0x 前綴的字符的十六進制值. AutoHotkey Unicode 版本中通常不需要這麼做, 因為它包含的 Send ControlSend 自動支持 Unicode 文本.
如果這個字符沒有映射為一個虛擬按鍵代碼, 則使用 SendInput() WM_CHAR 發送這個字符而當前的發送模式無效.
{vkXX}
{scYYY}
{vkXXscYYY}
發送一個虛擬按鍵為 XX 且掃瞄碼為 YYY 的鍵擊. 例如: Send {vkFFsc159}. 如果省略了 sc vk 部分, 則會發送最適當的值.
XX YYY 是十六進制值, 通常可以在主窗口的 View->Key history 菜單項找到. 另請參閱: 特殊按鍵


{Numpad0} - {Numpad9}
小鍵盤上的數字鍵 ( Numlock 打開時輸入的一樣). 例如: {Numpad5} 為數字 5.
{NumpadDot}
小鍵盤上的點 ( Numlock 打開時輸入的一樣).
{NumpadEnter}
小鍵盤上的 Enter
{NumpadMult}
小鍵盤上的乘
{NumpadDiv}
小鍵盤上的除
{NumpadAdd}
小鍵盤上的加
{NumpadSub}
小鍵盤上的減


{NumpadDel}
小鍵盤上的 Delete (此鍵和後面的小鍵盤按鍵是在 Numlock 關閉時輸入的)
{NumpadIns}
小鍵盤上的 Insert
{NumpadClear}
小鍵盤上的 Clear (通常在 Numlock 關閉時輸入 '5' 的鍵).
{NumpadUp}
小鍵盤上的向上鍵
{NumpadDown}
小鍵盤上的向下鍵
{NumpadLeft}
小鍵盤上的向左鍵
{NumpadRight}
小鍵盤上的向右鍵
{NumpadHome}
小鍵盤上的 Home
{NumpadEnd}
小鍵盤上的 End
{NumpadPgUp}
小鍵盤上的向上翻頁鍵
{NumpadPgDn}
小鍵盤上的向下翻頁鍵


{Browser_Back}
2000/XP/Vista+: 按下瀏覽器的 "後退" 按鈕
{Browser_Forward}
2000/XP/Vista+: 按下瀏覽器的 "前進" 按鈕
{Browser_Refresh}
2000/XP/Vista+: 按下瀏覽器的 "刷新" 按鈕
{Browser_Stop}
2000/XP/Vista+: 按下瀏覽器的 "停止" 按鈕
{Browser_Search}
2000/XP/Vista+: 按下瀏覽器的 "搜索" 按鈕
{Browser_Favorites}
2000/XP/Vista+: 按下瀏覽器的 "收藏" 按鈕
{Browser_Home}
2000/XP/Vista+: 啟動瀏覽器並打開主頁
{Volume_Mute}
2000/XP/Vista+: 主音量靜音/取消靜音. 通常相當於 SoundSet, +1, , mute
{Volume_Down}
2000/XP/Vista+: 減小主音量. 通常相當於 SoundSet -5
{Volume_Up}
2000/XP/Vista+: 增加主音量. 通常相當於 SoundSet +5
{Media_Next}
2000/XP/Vista+: 在媒體播放器中播放下一曲目
{Media_Prev}
2000/XP/Vista+: 在媒體播放器中播放前一曲目
{Media_Stop}
2000/XP/Vista+: 停止媒體播放器
{Media_Play_Pause}
2000/XP/Vista+: 播放/暫停媒體播放器
{Launch_Mail}
2000/XP/Vista+: 啟動電子郵件程序
{Launch_Media}
2000/XP/Vista+: 啟動媒體播放器
{Launch_App1}
2000/XP/Vista+: 啟動用戶程序 1
{Launch_App2}
2000/XP/Vista+: 啟動用戶程序 2


{PrintScreen}
Print Screen
{CtrlBreak}
Ctrl+break
{Pause}
Pause


{Click [选项]}
[v1.0.43+]
使用與 Click 命令 中相同的可用選項發送鼠標點擊. 例如, {Click} 會在鼠標光標當前位置點擊一次鼠標左鍵, {Click 100, 200} 則在坐標 100, 200 處點擊 (這裡的坐標模式取決於 CoordMode). 要移動鼠標而不點擊, 請在坐標後指定 0; 例如: {Click 100, 200, 0}. 在鼠標點擊之間的延遲由 SetMouseDelay 決定 (而不是 SetKeyDelay).
{WheelDown}, {WheelUp}, {WheelLeft}, {WheelRight}, {LButton}, {RButton}, {MButton}, {XButton1}, {XButton2}
向指針當前位置發送鼠標按鈕事件 (要指定位置和其他選項, 請使用上面的 {Click}). 在鼠標點擊之間的延遲由 SetMouseDelay 決定. WheelLeft/Right 需要 v1.0.48+, 並且在 Windows Vista 之前的操作系統中沒有效果.
{Blind}
當按鍵序列中首個項目為 {Blind} , 如果 Alt/Control/Shift/Win 在發送開始時為按下的狀態則不鬆開. 例如, 熱鍵 +s::Send {Blind}abc 將發送 ABC 而不是 abc, 因為用戶按住了 Shift .
{Blind} 還會忽略 SetStoreCapslockMode; 即不會改變 Capslock 的狀態. 最後, {Blind} 會忽略發送的鍵擊中的額外控制功能; 這樣的鍵擊中可以避免後面的情況: 1) 發送 LWin/RWin 鍵擊時出現開始菜單; 2) 發送 Alt 鍵擊時激活菜單欄.
按鍵的重映射 內部使用了 Blind 模式. 例如, 重映射 a::b 會發生這樣的情況: 1) 輸入 "a" 時會映射為 "b"; 2) 輸入大寫字母 A 時映射為大寫字母 B; 並且 3) 按下 Control-A 時映射為按了 Control-B.
SendRaw ControlSendRaw 不支持 {Blind}. 此外, SendPlay 也不完全支持這種模式, 尤其是在處理修飾鍵 (Control, Alt, Shift Win) .
{Raw}
[v1.0.43+]
準確按照原樣發送鍵擊, 而不把 {Enter} 轉換成 ENTER 鍵擊, ^c 轉換成 Control-C, 等等. {Raw} 可以不放在按鍵序列的開始處, 在按鍵序列中出現時, 它會影響它後面的剩餘部分.



轉義序列



輸入這些字符
得到這些字符
`,
, (原義的逗號). 注意: 在命令最後一個參數中的逗號不需要轉義, 因為程序知道把它們作為原義處理. 對於 MsgBox 所有參數同樣如此, 因為它會智能的處理逗號.
`%
% (原義的百分號)
``
` (原義的重音符; 即兩個連續的轉義符產生單個原義字符)
`;
 ; (原義的分號). 注意: 在分號的左邊有空格或 tab 才需要. 如果沒有, 那麼它可以被正常識別而不需要轉義.
`::
:: (原義的雙冒號). v1.0.40+, 不再需要對它們進行轉義.
`n
新行 (換行/LF)
`r
回車 (CR)
`b
退格
`t
tab (最典型的水平移位)
`v
垂直 tab -- 對應的 Ascii 值為 11. 在一些應用程序中可以通過鍵入 Control+K 讓它顯示出來.
`a
警告 () -- 對應的 Ascii 值為 7. 在一些應用程序中可以通過鍵入 Control+G 讓它顯示出來.
`f
進紙 -- 對應的 Ascii 值為 12. 在一些應用程序中可以通過鍵入 Control+L 讓它顯示出來.
Send
以默認 (非原始) 模式使用 Send 命令 熱字串 , {}^!+# 這些字符具有特殊含義. 因此, 要使用它們的原義字符, 必須把它們包圍在大括號中. 例如: Send {^}{!}{{}
""
表達式 , 原義字符串內的兩個連續的引號被解析為單個原義的引號. 例如: Var := "The color ""red"" was found."