一提到可以設定鍵盤滑鼠動作的軟體,大家一定會想到按鍵精靈
雖然按鍵精靈的確是很好很強大
但是某些場合下就無法使用(比方說某某軟體禁止開啟按鍵精靈)
此外新版開始一段時間就會自動關閉
加上又有廣告,而且軟體有點肥大
如果只是要做簡單又固定的事情就不是很方便了
今天介紹的AutoHotKey這套軟體
就可以靠簡單的步驟達到連發的功能喔
官方下載頁
首先請下載AutoHotKey這套軟體,安裝檔只有1.95MB,比按鍵精靈小
安裝完後執行,右下角就會出現一個小小的H符號
在H符號按下右鍵,選擇 [Edit This Script] 這個選項
就會開啟記事本
把記事本的內容全部刪掉,將以下字樣填入進去
然後存檔關閉
~F3::suspend
$x::
Loop
{
If Not GetKeyState("x", "P")
Break
Send {x Down}
Sleep 100
Send {x Up}
Sleep 100
}
Return
接下來在圖示按右鍵,選擇 [Reload This Script]
或是重新開啟AutoHotKey
從此以後只要按下x鍵不放,就會一直連打x鍵了
對於某些要狂按鍵盤的遊戲來說
有個連發腳本可以讓你的鍵盤壽命更持久喔
程式方面應該是不需要解說
可以將script中的x改成別的按鍵,例如改成s,就能按住s連發
或是將Sleep 100的數字改小,按鍵的頻率會加快
Sleep的時間單位為毫秒,因此100=0.1秒
F3代表按下時會停用(suspend)快速鍵執行,但執行中的會繼續
例如我寫一個按x後會不斷送指令的迴圈,即使我用了suspend仍會不停執行
如果要讓整個執行緒都停止,就要把suspend改成pause
如果Caps Lock(大寫鎖定)為On的話,好像有可能發生操作錯亂的情形
發生這種情況的話請將Caps Lock改成Off
或是重開一次AutoHotKey即可解決
如果你是使用Vista,在軟體中按下x卻沒有連打,請不要緊張
可能是因為你執行的軟體是要有系統管理者權限的
但因為AutoHotKey沒有系統管理者權限,才會沒有作用
只要開啟AutoHotKey前按下右鍵,選擇 [以系統管理員身分開啟] 即可
AutoHotKey還有將腳本轉成exe執行檔的功能
能讓按鍵腳本在沒有裝AutoHotKey的電腦上執行喔
AutoHotKey由於全英文,加上編輯腳本必須使用程式自定的Script
不像按鍵精靈可以從指令中直接選擇
比較起來是有點難以上手
但以操作簡單、容量小、無廣告等優點來說
AutoHotKey還是有他的優點存在的
也難怪不少人用了
2013/4/22 補充:製作連發可執行檔
不知道為什麼打完後他自己消失了(囧),只好重打一次了
首先請在開始功能表,執行[Convert .ahk to .exe]
Source是你要轉換的AutoHotKey原始檔,預設會在Documents目錄下
Destination是你要儲存執行檔的位置跟檔名,請自行設定
Custom Icon是自訂圖示,一般用不到
Base File是程式的核心,使用(Default)即可
選完之後按下>Convert<,如果轉換成功就會出現以下訊息
之後直接執行檔案,在右下角的通知圖示列就會跑出來了
跟正式的AutoHotKey相比,他只有暫停Script的功能
另外對方的電腦完全不需要安裝AutoHotKey,直接執行即可
如果懶得自己做的話,也可以下載我產生的X鍵按住連發囉
2013/4/22 補充:如何按下特定鍵開始連打特定按鍵,再按一次結束?
以下code有參考網路範例,功能是按下F9後開始連打x,再按一次F9結束
#MaxThreadsPerHotkey 2
$F9::
PressKey := ! PressKey
Loop
{
If ! PressKey
Break
Send {x Down}
Sleep 20
Send {x Up}
Sleep 20
}
Return
#MaxThreadsPerHotkey 1
2015/7/17 補充:
提供另一種範例,增加按F2暫停所有操作
#MaxThreadsPerHotkey 2
$F2::pause
$F6::Reload
$F9::
PressKey := ! PressKey
Loop
{
ClickMe("x", 200)
ClickMe("y", 200)
ClickMe("z", 200)
}
Return
ClickMe(key, time)
{
Send, %key%
Sleep, %time%
}
#MaxThreadsPerHotkey 1
2014/4/1 補充:
小修改腳本原文,增加F3暫停功能,將原本延遲0.02秒改成0.1秒
輸入再快,遊戲接收不到也沒用
2014/6/22 補充:如何按特定按鍵後在固定時間執行重複動作?
以下code有參考網路範例,功能是按下F2時開啟兩個計時器,每200秒按一次a鍵跟s鍵
按下F3時停止計時器
請自行修改成你需要的按鍵跟時間,例如要改成10秒就把200000改成10000(單位毫秒)
~F2::
{
settimer, skill_1, 200000
settimer, skill_2, 200000
return
}
~F3::
{
settimer, skill_1, off
settimer, skill_2, off
return
}
skill_1:
{
Send {a Down}{a Up}
return
}
skill_2:
{
Send {s Down}{s Up}
return
}
2015/11/3 補充:如何使用GUI
AutoHotKey可以產生GUI,方法有二
其一是直接用記事本打,其二是用SmartGUI這個工具,拖拉完後會產生AutoHotKey的語法但老實說我覺得那個工具很難用,排版對不齊,操作不直覺
(例如不能直接調整大小,必須先移動位置才能調整大小)
所以以下是參考SmartGUI後自己硬做出來的
----
Gui, Add, Button, x12 y120 w230 h30 gSetting, Setting
Gui, Add, Text, x12 y30 w40 h20 , Hotkey
Gui, Add, Hotkey, x52 y28 w40 h20 vUserInput1,
Gui, Add, Text, x100 y30 w60 h20 , Click
Gui, Add, Edit, x160 y28 w30 h20 vCount1,
Gui, Add, Text, x200 y30 w40 h20 , Time(s)
Gui, Add, Text, x12 y60 w40 h20 , Hotkey
Gui, Add, Hotkey, x52 y58 w40 h20 vUserInput2,
Gui, Add, Text, x100 y60 w30 h20 , Click
Gui, Add, Hotkey, x100 y58 w60 h20 vUserSend2,
Gui, Add, Edit, x160 y58 w30 h20 vCount2,
Gui, Add, Text, x200 y60 w40 h20 , Time(s)
Gui, Show, x127 y87 h170 w250, New GUI Window
Return
GuiClose:
ExitApp
Setting:
GuiControlGet, UserInput1
if %UserInput1%
{
Hotkey,%UserInput1%,SendMe1
}
GuiControlGet, UserInput2
if %UserInput2%
{
Hotkey,%UserInput2%,SendMe2
}
MsgBox Setting change
Return
SendMe1:
GuiControlGet, Count1
Loop %Count1%
{
Click, %UserSend1%
}
Return
SendMe2:
GuiControlGet, UserSend2
GuiControlGet, Count2
Loop %Count2%
{
SendInput, %UserSend2%
}
Return
----
Gui開頭的是產生視窗元件,第一格是觸發條件,按下某按鍵(可為組合鍵)後做後面的動作
第一行是按滑鼠左鍵Y下,第二行是按按鍵X Y下
要擴充的話請自行複製第二行的元件跟方法,然後修改即可

H的圖標不見了.我不能設置連發.我把記事本的內容改成空白后.圖標就不見了.爲什麽呢>我用的是Windows 7 但我沒有隱藏圖標。重新下載也沒有用
確定完全找不到嗎? 工作管理員的"處理程序"裡面有autohotkey在執行嗎?
完全找不到.處理程序那裡看不到有.我系統還原都用了.還是不行.謝謝你回覆我
建議重新安裝一次AutoHotKey吧 或是執行AutoHotKey時選用"系統管理員執行" 我雖然沒有用過Win 7但有用Vista 沒道理Win 7不行
選用了.也重新安裝了.[Edit This Script]這個記事本的內容我刪除了.變了空白之後.才這樣
重裝之後Script不會重新產生嗎?
我玩神諭之戰 設定好之後開啟著個程適 但是不能進入遊戲 先進入遊戲在開啟程式 遊戲馬上斷線 我是使用Vista 用系統管理員身分開啟
或許是遊戲也有擋掉AutoHotKey吧 這樣就沒法了
安安經過多次ㄉ測試 以經可以用了 不過 要改成其他的按鍵 連射不能改 不是說把X改成我要更換的按鍵 就可以了嗎 3個X多改了可是不行 是哪錯了嗎
要改連射的按鍵,要改四個部分... 第一行、第四行、第六行、第八行 我猜你忘了改啟動條件吧
請問全民打棒球能用嗎
沒玩過這個遊戲呢,請自行測試吧
想問要是 鍵盤右手面的 數字鍵 要怎樣set??? set完都變成左手面的數字鍵了
試試看Numpad0~Numpad9 不是0~9喔 比方說Numpad0就是右邊小鍵盤的數字0
請問怎麼讓Ctrl連按呢? 我改成Ctrl或是^都不行
請改成LCtrl或RCtrl
請問一下我要連發的按鍵是空白鍵那我應該怎麼改呢
就改成Space啊
我能設定成 我要讓C連發 啟動條件是 LCTRL+C嗎?
啟動條件要LCtrl+C的話 把第一行的$x::改成^c::即可 不過結束條件就得另外設定了
如果要讓C連發 啟動條件要改 Pagedown+c 那要如何設定呢 = =?
通常組合鍵只有Ctrl Alt Shift 要Pagedown+C的話 我想應該是要自己寫條件判斷式吧 比方說裡面寫入這樣 If Not GetKeyState("c", "P") and Not GetKeyState("PgDn", "P") Break (註:我沒測試過,請自行修改)
如果我想把它改成F9 $x:: Loop { If Not GetKeyState("F9", "P") Break Send {F9 Down} Sleep 20 Send {F9 Up} Sleep 20 } Return 請問這樣對嗎? 如果是方向鍵的→又應該怎樣?
不太對喔,第一行的$x::代表說按下x就會觸發以下的動作 所以必須改成$F9:: 右方向鍵直接寫Right即可 請參考以下網頁,有介紹大部分鍵盤按鍵在AutoHotKey的表示法 http://xahlee.org/mswin/autohotkey_key_notations.html
如果要讓G連發 啟動條件是"按N一下" 要怎麼改呢? 我想要讓N變成切換連發的開關 就是按N一下 G連發;再按N一下 G取消連發 不是N代替G連發 我想過很多方法可是都不行ˊˋ 請問這要怎麼解決呢??
欸...我現在沒辦法測試,等我查到再來回答你,不好意思...
為什麼我設的按鍵進入遊戲後反而連案件原本的功能都沒了?
這情況我沒遇過 有可能是遊戲本身會禁止按鍵精靈等軟體侵入? 建議試試看其他的按鍵軟體是不是有一樣情形
*****
请问可否用hotkey来不断点击某一个网页的一个按钮? 如果可以的话又是如何? 可以帮帮忙教学一下是如何办到的吗?
我對AutoHotKey的用法只有用在連發,所以我不確定能不能用AutoHotKey作 不過如果只是要點擊固定的地方 直接用按鍵精靈或隨便找一個連發軟體即可
請問簡大:你寫的連發. $Y:: Loop { If Not GetKeyState("Y", "P") Break Send {Y Down} Sleep 20 Send {Y Up} Sleep 20 } Return 此設定開始按鑑為Y. 請問結束也是Y按一下鑑嗎? 盼簡大能幫我解惑.先說聲謝囉!
不是耶,只要把Y鍵放掉連發就結束了 在第四行寫的 If Not GetKeyState("Y", "P") Break 意思就是如果沒有壓下Y鍵就中斷(break)這個迴圈(loop)
關於蕭大所提:AutoHotKey還有將腳本轉成exe執行檔的功能. 能否請蕭大敎一下以目前1.1.09.04版本為例.大約講解最好附圖. 先說聲謝囉~
已經增加說明在原文囉
$F9:: Loop { If Not GetKeyState("F9", "P") Break Send {x Down} Sleep 20 Send {x Up} Sleep 20 } Return 蕭大:上面您寫的數據如我改成F9是觸發.要按著F9才能連發. 請問如要改成只要按F9是開啟(再按一下也是關閉)x連發.不 用手一直按著.可否指導修改哪. 先向您說聲謝謝! 哪.
已經增加補充在原文囉
請問怎麼讓AutoHotkey全部復原 因為數具有打錯 所以開不起來 右下方都沒有圖是出現 從安裝一樣不行
你的意思是重安裝後仍然無法開啟AutoHotKey? 沒有出現任何錯誤訊息嗎?
我想要讓鍵盤右邊的數字鍵2變成發連發該如何使用?謝謝~
前面的留言其實有提到了 把指定的按鍵改成Numpad2就可以了
我想按s連發 是按著才會觸發 這樣寫對嗎 $s:: Loop { If Not GetKeyState("s", "P") Break Send {s Down} Sleep 20 Send {s Up} Sleep 20 } Return
是的
請問蕭大:底下Sleep 20(這單位是ms.還是啥單位).可否告知? 先說聲謝囉. $x:: Loop { If Not GetKeyState("x", "P") Break Send {x Down} Sleep 20 Send {x Up} Sleep 20 } Return
沒錯,就是毫秒(ms),所以設定1000=1秒 範例的20其實我設定的太小了,設定大一點對電腦比較沒負擔
請問蕭大,我用轉.exe的程式,轉出來的卻不是執行檔,是哪邊出問題呢?
不好意思,這個問題太過籠統很難回答 會不會是你的Destination副檔名沒有加上.exe? 可以麻煩你對照一下截圖嗎?
請問可以設定案某個鍵後讓左邊的ctrl連發直到再按ㄧ次某鍵?? 很需要^^ ...
你可以看我4/22的補充 然後把x改成LCtrl就可以了
我裝完之後開不到了...就是有個視窗彈出來有一推英文 完全看不懂- -||| 小視窗內容: Error at line 12. Line Text: $a Error: Duplicate hotkey The program will exit
訊息是說你在12行的地方重覆設定了執行熱鍵a 能否把整個文件貼上來? 應是你指令沒有貼完整導致程式邏輯出錯
但是我不會把整個文件貼上來-.-|| 大大可以教我解決方法嗎
右下角的AitoHotKey圖示按右鍵選擇Edit This Script 然後把記事本上的所有文字都貼上來
$x:: Loop { If Not GetKeyState("x", "P") Break Send {x Down} Sleep 20 Send {x Up} Sleep 20 } Return ; $z:: Loop { If Not GetKeyState("z", "P") Break Send {z Down} Sleep 20 Send {z Up} Sleep 20 } Return 這是我的腳本你看有錯嗎
我測試的結果可以正常執行
大大 我想問一下 啟動熱鍵的問題,假設我熱鍵設成e,我原先遊戲裡的e是一招技能,但是設成熱鍵後,e就會放不出技能,這有把辦法解決?? 簡單說 就是我想把e同時是熱鍵又同時可以發動原先遊戲的技能。
放不出技能的原因是這個按鍵會被AutoHotKey給佔用 只要在啟動熱鍵的下方加上 Send {e Down} Send {e Up} 就可以了 範例 #MaxThreadsPerHotkey 2 $e:: Send {e Down} Send {e Up} PressKey := ! PressKey (下面完全相同)
感謝大大 之前在當兵沒回 ,感謝解決我的問題 BY #29 訪客
不客氣
*****
*****
請問如果想要使用方向鍵 按住不放呢?? 不需要連擊 就像卡鍵那樣~
原文Send {x Down}之後把Send {x Up}拿掉即可 就變成會一直按住x了 可以把x改成你想要的方向鍵
沒用 Script lines most recently executed (oldest first). Press [F5] to refresh. The seconds elapsed between a line and the one after it is in parentheses to the right (if not 0). The bottommost line's elapsed time is the number of seconds since it executed. 001: Return (2.06) Press [F5] to refresh.
可能是腳本有問題,請檢查看看有沒有語法錯誤
請問如果不要連點,而是按下F1開始長按A鍵,再按一次F1結束,這樣要怎麼改?
長按的意思是按住不放嗎? 因為你的需求太特殊了,目前想不到要怎麼寫 請自己嘗試看看吧,不好意思
請問蕭大:這篇放技能的說明 放不出技能的原因是這個按鍵會被AutoHotKey給佔用 只要在啟動熱鍵的下方加上 Send {e Down} Send {e Up} 就可以了 範例 #MaxThreadsPerHotkey 2 $e:: Send {e Down} Send {e Up} PressKey := ! PressKey (下面完全相同) 底下是我的問題: 那假如技能要每200秒放一次的話.要加入啥語法. 可否請蕭大教導一下.感恩~
底下是我的問題: 那假如技能要每200秒放一次的話.要加入啥語法. 可否請蕭大教導一下.感恩~ 補充:假如有2個技能.每200秒要放一次.要加入啥語法. 謝謝!請蕭大指教指教~
補充在原文最下面了,請自行修改囉
以下code有參考網路範例,功能是按下F2時開啟兩個計時器,每200秒按一次a鍵跟s鍵 按下F3時停止計時器 請自行修改成你需要的按鍵跟時間,例如要改成10秒就把200000改成10000(單位毫秒) ~F2:: { settimer, skill_1, 200000 settimer, skill_2, 200000 return } ~F3:: { settimer, skill_1, off settimer, skill_2, off return } skill_1: { Send {a Down}{a Up} return } skill_2: { Send {s Down}{s Up} return } 再一次請問蕭大:如果我只要用AutoHotKey在遊戲裡放技能而已.請問上面語法 已有開啟與停止. 那我要再添加啥語法.才可使上面整個語法循環使用呢? 再次麻煩你賜教.謝囉~
其實這個按下F2就已經是循環使用了啊 在你按下F3停止計時器之前他應該會持續執行才對 你可以把時間改短,用在記事本測試看看
~F2:: { settimer, skill_1, 200000 settimer, skill_2, 200000 return } ~F3:: { settimer, skill_1, off settimer, skill_2, off return } skill_1: { Send {a Down}{a Up} return } skill_2: { Send {s Down}{s Up} return } 請教蕭大:上面那個腳本.我研究了3天.也試了3天.還是不懂要怎 加開頭與尾語法.是否可請蕭大教導一下呢? 我只是要寫一個在遊戲中.能自動幫放技能的AutoHotKey語法. 是否可請蕭大幫忙?如可則感激不盡.
首先,請先看一下我上方公告寫的 "留悄悄話的網友請注意:如果您非痞客邦會員(包含使用FB/Google+帳號),是看不到回覆的喔 " 你用google帳號,又用悄悄話,等再久也看不到我的回覆喔 另外,我不是每天都會上blog回留言 所以如果你很急的話,不妨去google找答案 (順便一提,其實我當初只是要介紹AutoHotKey 不知道為什麼會有人來求語法) 開頭結尾語法,你可以加在F2 大括號裡面的前後 也就是settimer, skill_1, 200000之前 跟return之前
蕭大:不好意思可能你這幾天忙.沒空回.我再重申我的問題.如你有空請幫我看看. 我想寫一AutoHotKey語法.是單純一開$F9::(例如)後.3個技能(例如分別放:a.s.d鑑).會循環每200秒重複一直放.沒有再使用其他按鍵的語法.因我試你寫的那F2開啟與F3暫停的語法.無反應.. 所以是否可以請你再幫忙寫一個單純:【一開$F9::(例如)後.3個技能(例如分放:a.s.d鑑).會循環每200秒重複一直放】的語法.沒要再使用其他按鍵.也無須暫停功能. 先說聲謝你~
不好意思,其實我不太能理解你的需求 你說200秒重複一直放的意思,是放了一次之後要等200秒再放? 還是200秒內狂按指定按鍵? 如果是後者,200秒完後要做什麼呢? 前面寫的指令我測試過是可以正常執行的 如果你是要用在遊戲中的話 請先確認遊戲有沒有需要用系統管理員執行 如果有的話,AutoHotKey也需要用系統管理員執行(原文有提醒) 以下是按了F9之後每200秒按一次a s d鍵 ======= $F9:: { settimer, skill_1, 200000 return } skill_1: { Send {a Down}{a Up}{s Down}{s Up}{d Down}{d Up} return }
蕭大 首先謝謝你的回覆與教導! 我意思是有3種技能.且3種技能時間各不相同(例:a是200秒.s是180秒.d是120秒.然後在程式一開後.各別技能在時間到時.可以自已重複一直施放.而不是200秒內連續3種技能一直施放. $F9:: { settimer, skill_1, 200000 return } skill_1: { Send {a Down}{a Up}{s Down}{s Up}{d Down}{d Up} return } 還有再請教您上面語法.$F9::下面為何沒有Loop(循環).且最底下是 } 符號. 為何沒有return(重來)呢?這樣上面語法一開時.時間到它會自已循環重複一 直施放技能嗎?怎跟之前您教過我的不一樣. 如有時間.煩請幫解惑. 感恩~ 再一請求:怎把上面語法.改成3個各別施放技能的語法.因3個技能時間各不相同.
我猜你應該沒有寫過程式,所以可能看不太懂AutoHotKey的script 沒有Loop是因為你現在的需求不是要按住按鍵 而是要持續在固定時間執行特定動作,因此我才改成使用timer (計時器) 大括號指的是程式區段,也就是 { 程式..... } return的意思是當它執行到這行時就return(返回) 也就是不要繼續往下執行 不然它可能會繼續一行行執行 timer的作用就是持續在固定時間內執行特定動作 你可以想像成它內部就有一個loop機制,當等了x秒之後就執行動作 也就是說當我設定settimer, skill_1, 200000 就是代表我設定了計時器,每200秒去執行skill_1 而更久之前寫的settimer, skill_1, off 代表的是關閉計時器 因此你需要的功能其實就是增加不同的計時器 去執行按下特定按鍵的動作 $F9:: { settimer, skill_1, 200000 settimer, skill_2, 180000 settimer, skill_3, 120000 return } skill_1: { Send {a Down}{a Up} return } skill_2: { Send {s Down}{s Up} return } skill_3: { Send {d Down}{d Up} return }
對了蕭大: $F9:: { settimer, skill_1, 200000 return } skill_1: { Send {a Down}{a Up}{s Down}{s Up}{d Down}{d Up} return } 上面語法我也試了.可是按F9後卻是毫無反應.為何? 我照此模式一直修改.卻都是F9按下後都無反應. 是少了Loop呢.還是最底下不應是 } 這符號? 還望有空時可以多教導..謝謝~
請問你修改完script之後,有沒有存檔呢? 存檔了之後有沒有選擇 [Reload This Script]讓它重新載入? 如果沒有的話它還是會跑舊的script喔 我給你的script我都有測試能正常執行,所以script應該沒錯 你可以先在記事本上按F9測試看看 看會不會在特定時間上按下a s d鍵 如果在記事本上正常,但是遊戲不正常 可能是沒有用管理者模式開啟AutoHotKey 或是遊戲本身有防止這種按鍵精靈型的程式 PS: 你前面的留言,我幫你取消悄悄話了 這樣你才可以看到我的回覆
謝謝蕭大詳細的解說與教導.我本來以為一按下F9就馬上開起程式按鍵. 剛試的結果是按F9後要等計時器時間到才會開始啟動循環.難怪之前怎 麼試都以為沒反應.現已懂了.也更了解此程式語法的奧妙. 再次謝謝您耐心的詳細教導語解說. 感恩~感恩~
不客氣,有幫助到你就好
請問大大 滑鼠 的按鍵應該是怎麼寫?
點選左鍵 MouseClick, left 移動滑鼠 MouseMove, x, y (x y請填入數字) 其餘的可以參考官方教學 http://www.autohotkey.com/docs/commands/MouseClick.htm
請問假如我喝水 擺在 QWE 假如我要設定虛擬的..在啟動之後 有什麼辦法 能別讓他跑出q w e.. 我的意思是 我開啟之後 能正常喝水正常聊天 有辦法嘛
不好意思我真的看不懂你在說什麼 不過原文我有設定暫停熱鍵F3 也就是平常按X會連打,但按下F3後這個腳本就會暫停不使用 等到再度按下F3才會繼續作用 這樣就可以解決腳本占用平常操作鍵的問題
我想要讓鍵盤右邊的+鍵變成發連發該如何使用?謝謝~
請參考下面網站 http://www.autohotkey.com/docs/KeyList.htm 請用 NumpadAdd
蕭大您好歐~ 請問一下,我想要按住1執行,放開1停止我的技能迴圈, 我在中間加入了這行... If Not GetKeyState("1", "P") Break 但是好像不能,出現錯誤訊息...以下是我的迴圈... 拜託蕭大指點,我該如何修改呢?謝謝~ ================================= ~1:: { If Not GetKeyState("1", "P") Break settimer, skill_1, 200000 settimer, skill_2, 200000 return } skill_1: { Send {1 Down}{1 Up} return } skill_2: { Send {2 Down}{2 Up} return }
錯誤訊息其實蠻明顯的 Break必須放在Loop中,不然會出錯 我覺得你的需求不應該用If Not GetKeyState("1", "P")來處理 而且settimer只須執行一次即可 建議你參考我文章最後的作法 把F2 F3改成你指定的開始跟結束按鈕
不好意思 這是只能一種鍵 連按嗎? 可以^X^X 或 ^Z^Z 或^^Z 或 ^^X 就是方向鍵加上一種鍵 無限循環這樣有辦法嗎? 感謝您。
你的需求建議是使用我6/22補充的啟動跟關閉計時器的方式來做 function中改成下方語法即可(可自行修改內容,如要改成按下z就把x改成z即可) Send {Up Down}{Up Up} Send {x Down}{x Up} return
蕭大您好,我想按@或#後 接著可以按出R跟F的腳本...查了很久大多都是分享同一鍵連發的..有這種按一鍵可以接著放出不同鍵的嗎?
可以改成這樣 以@起頭,R F每0.1秒連發,如果中途按下z自動停止(可自行修改) $@:: Loop { If GetKeyState("z", "P") Break Send, R Send, F Sleep 100 } Return
請問判斷顏色要怎麼寫 血顏色是紅色 當紅色不等於紅色時即按Q 妳會寫嗎 我有看到一個指令 PixelGetColor 可以交一下嗎
http://www.autohotkey.com/docs/commands/PixelGetColor.htm PixelGetColor, OutputVar, X, Y [, Alt|Slow|RGB] 第一個參數是變數名稱 第二第三是座標 比方說寫 PixelGetColor, color, 100, 23 就會抓取(100, 23)的顏色存到color這個變數中
我再說明白一點好了 例如按鍵精靈裡有一個是 如果103/23等於00FF00 則不動 反之則按Q 我要遊戲自動補血用 但總不能一直按Q吧 會破產 但按的慢或少又會一直躺 可以用這個指令來判斷嗎 PixelGetColor 我舉個例 直接偵測一個點 然後偵測她的顏色 一改變就按Q 偵測點可以用座標嗎 但不能用滑鼠鼠標吧 我滑鼠還要打怪用 還是可以抓圖抓色之類的嗎 然後大概就這樣 我是看不太懂 可以幫忙研究看看嗎 這個是我唯一可以用在遊戲上的 其他的軟體 不是被封鎖 就是在遊戲上不支援(就是沒反應)有跟沒有一樣 所以我求求妳了
其實我不知道為什麼有這麼多人留言要我寫腳本給他... 我當時寫這篇就是希望大家自己研究啊... 你要求的語法如下 座標、執行頻率、顏色判斷等可自行修改 ==== ; 座標 HPX := 103 HPY := 23 ; 計時器多久執行一次(單位毫秒) Frequency := 1000 SetTimer, CheckHP, %Frequency% CheckHP: PixelGetColor, color, %HPX%, %HPY% if (color = 0x00FF00) { Send, Q Sleep 1000 } ^ESC:: ExitApp ; Ctrl+ESC 強制關閉
這段程式碼 不是沒反應就是一直按 我這樣寫對嗎 然後正確的抓座標跟顏色你會用ALT抓嗎 ALT是什麼 還是怎麼抓的 我是用按鍵精靈的抓圖 然後抓座標 再抓顏色 但都沒反應 ; 座標 X := 187 Y := 48 ; 計時器多久執行一次(單位毫秒) Frequency := 1000 SetTimer, CheckHP, %Frequency% CheckHP: PixelGetColor, color, %HPX%, %HPY% if (color = 0x404040) { Send, Q Sleep 1000 } ^ESC:: ExitApp ; Ctrl+ESC 強制關閉
算了 我放棄了 遊戲無法取色 都是0X000000 我無言了阿 蒼天助遊戲不助我阿 天理何在 美女何在
我用windows測試時是可以正常取色的 遊戲是怎麼處理我就不清楚了 沒幫上忙不好意思
請問關於抓色自動判斷有 我抓取顏色0x1F1E2D 當不是這個顏色時才自動按鍵嗎 上面的腳本好像是抓取顏色直接觸發 有抓取顏色當不是這顏色時才觸發的指令嗎
不是的話就把=改成!=就可以了啊...
請大大幫忙,我一直出錯Break這個部分 以下為腳本有2個視窗,一個是遊戲視窗一個是計算讀取速度的視窗 我的用意是速度沒有超過9的,就繼續執行刷地圖腳本 可是真的寫不出來,希望大大能幫忙指導一下,謝謝。 ;---------------------重刷地圖------------------- ~F9:: { settimer, skill_1, 4000 return } ~F10:: { settimer, skill_1, off return } skill_1: IfWinActive, Path of Exile { WinActivate BlockInput On Click 978, 454, 0 Sleep, 100 MouseClick, left, 978, 454 ;傳送點 Sleep, 100 Click 257, 422, 0 Sleep, 100 Send, {CTRLDOWN} MouseClick, left, 257, 422 ;選擇傳送地點 Sleep, 100 Send, {CTRLUP} Click 1222, 654, 0 ;移動到副本選單 Sleep, 100 Loop 60 Click WheelDown Sleep, 200 Click 473, 863, 0 ;移動到新副本按鈕上 Sleep, 500 MouseClick, left, 473, 863 Sleep, 100 Sleep, 1300 settimer, skill_2, 2000 BlockInput Off return } skill_2: Click 130, 100, 1 Sleep, 500 ControlGetText, OutputVar Click 938, 16, 1 Sleep, 500 if (OutputVar <= 8) break return
其實錯誤訊息已經寫得很清楚啦 Break/Continue must be enclosed by a Loop 意思就是Break或Continue必須放在迴圈中 我不懂你寫的 if (OutputVar <= 8) break 這段的目的,你是想把計時器停下來還是? 如果只是要跳離函式的話直接return即可
請問要移動滑鼠的時候能控制他的速度嗎 讓她慢慢移動到這個位置 然後慢慢的點擊左鍵 MouseMove, 520, 520 MouseClick, Left 我找到一個..能用嗎...具體應該怎麼加進去...我都腳本錯誤 SetDefaultMouseSpeed,0 ; 速度0~100
你找到的方法我測試是不會有問題的 不過你輸入的那一行,逗號是全形,這樣子當然是不行的 提供我測試的範例給你參考 ~F9:: { SetDefaultMouseSpeed, 50 MouseMove, 50, 50 return }
不好意思請問一下 我只是把AutoHotKey.ahk的文字清空關閉時不小心存檔 之後就完全打不開AutoHotKey.ahk了 重新安裝之後還是一樣 所以就用記事本把他開起輸入我要的Script 但是無論怎麼改AutoHotKey.ahk的內容都無效 重裝也不會產生新的Script 請問這種情形該怎麼辦?
不太了解你的意思... 打不開指的是有出現什麼錯誤訊息嗎? 我嘗試把內容清空也不會有錯誤訊息 此外我測試過如果把AutoHotKey.ahk刪掉 打開AutoHotKey時他就會詢問是否要產生一個範本檔 請試著刪除看看
我設置了Space::F2 因為空白鍵對我來說比較好按! 但是打字時需要空白鍵的功能, 縮小視窗關掉Hotkey實在太麻煩! 想問你有沒有按下F1後啟動Space::F2的功能, 再按一次F1關閉該功能的腳本? 謝謝你!
你可以像我的範例一樣在最前面加上 ~F1::suspend 這樣按下F1後這個腳本就會被暫停執行了
謝謝你的教學^_^ 感謝~
謝謝你的回覆喔
請問一下喔 按住ALT再按鍵盤左邊的2要怎麼寫 我怎麼寫他都只按!2而已 但!不是ALT嗎 他只會按!不是按ALT 然後記得放開 我要循環腳本的 F5開始 F6暫停或結束 謝謝
http://www.autohotkey.com/docs/commands/Send.htm 要按Alt+2請使用 Send !{fNumpad2} 其餘循環腳本請參考本文˙
妳真是個好人 再請問一下 MouseMove, 451, 391, 50,R 要怎麼只移動上面一點點就好 R移動太多了 R要怎麼設 我只要他單純往上一點點
http://www.autohotkey.com/docs/commands/MouseMove.htm R指的是從目前的座標移動 所以你如果只是要往上一點,改成 MouseMove, 0, 10, 50, R 即可
要如何在腳本內執行腳本呢? 例如我有一個腳本F11::................ 又有另一個腳本F12::.............send {F11 down}{F11 up} 可是這樣無效, F11不會自動執行 請問是哪裡出錯了? 謝謝你
你好,我測試一個簡單範例是可以的,你要不要再試試看呢? $x:: { Send {y Down} Send {y Up} } $y:: { Send {z Down} Send {z Up} } 以上範例按下x後會出現"yz"
版大的用心真的令人欽佩 推薦Sikuli這套軟體供版大介紹 可以用截圖的方式編寫腳本 非常好用
謝謝你的推薦! 我有機會的話會試試看的
大大 你F9那個腳本 按F9是可以開始 但再按F9 可不能結束喔 是什麼回事?
我這邊測試確定是可以正常執行的 (by記事本)
大大,我想問,我該如何寫以下我想要的,能否指教? 我想作的是. . . 1. 先緊按 shift 2. 然後按 ↓ (方向鍵. . . 下) 3. 然後 shift 放開 4. 按 crtl + x 5. 按 alt + tab 6. 按 ctrl + v 7. 按 ↓ (方向鍵 . . .下) 8. alt + tab 一共八個步驟. . . . ><"
請參考 https://www.autohotkey.com/docs/commands/Send.htm 以下只幫你寫到第四步,其餘作法就請依樣畫葫蘆囉 Send {Shift Down} Send {Down} Send {Shift Up} Send {Ctrl Down} Send x Send {Ctrl Up}
請問大大,我安裝以後,沒有出現H圖示,到程式集點開H圖示,好像是跳使用手冊出來,不知道該怎麼使用阿...
看看你有沒有找到這個檔案 (64-bit版本) C:\Program Files\AutoHotkey\AutoHotkey.exe 如果沒有的話建議重裝吧
請問一下 這是只能連按,不能按住的嗎?
如果你只要按住的話,直接按住就好啦,不用寫腳本 如果你真的需要腳本按住的話的話 傳送Down指令即可 Send {Shift Down} 以上就是按住Shift的意思
你好~我是奶頭 因為遊戲被改透明化 所以測不到色 (不是網頁遊戲) 請問AHK能不能遊戲截圖再從圖中判斷顏色呢 類似按鍵精靈這樣 先抓圖在固定判斷點的顏色呢 如何實現呢
AHK主要只有抓圖功能,你想抓圖後判斷我就不清楚要怎麼實作了 http://www.autohotkey.com/board/topic/91585-screen-capture-using-only-ahk-no-3rd-party-software-required/ 我覺得應該想辦法直接取得顏色比較好 如果遊戲透明化抓不到色。為什麼截圖下來就不˙透明了呢?
可以幫我做一個按c的檔嗎?速度80 感謝!
請問是我說明寫得不好讓你不知道怎麼改嗎? 我覺得自己改快多了 ~F3::suspend $c:: Loop { If Not GetKeyState("c", "P") Break Send {c Down} Sleep 80 Send {c Up} Sleep 80 } Return
大大 請問我想單純按左編鍵盤1~9 非數字鍵那排 想要放技能可是設定全部都打又編鍵盤的數字 有辦法解決嗎
如果是想輸出左邊的數字鍵,直接用1~9 如果是右邊按下NumLock後的數字鍵,用Numpad1~Numpad9 改法請參考本文,把輸出鍵換掉即可
蕭大問哦 按鍵精靈這樣設定的 鍵盤 按1鍵 1次 延時700毫秒 鍵盤 按2鍵 1次 延時700毫秒 鍵盤 按住3鍵 延時3000毫秒 鍵盤 放開3鍵 在AHK 怎麼寫 不是像6/22補充那樣 設定700毫秒按1 又設定1400毫秒按2 這樣會同時按到 在此先謝謝蕭大
那就直接把我本文寫的方式拿來用就好啦 只要把Loop的部分給拿掉 以下按下F1後執行你說的動作 $F1:: Send 1 Sleep 700 Send 2 Sleep 700 Send {3 Down} Sleep 3000 Send {3 Up} Return
大大不好意思請問一下 ~F3::suspend 按d 執行 按住d持續500毫秒 按c 執行 按住c持續600毫秒 按d+方向鍵下 執行 按住d+方向鍵下持續300毫秒 按c+方向鍵下 執行 按住c+方向鍵下持續400毫秒 要怎麼寫
我覺得這種需求根本不用寫腳本 直接按住X毫秒不就好了嗎? 如果你真的很需要的話,請參考上面一個留言自行嘗試囉
大大請問, 該如何設定兩組連射 在不同情況下可能需要不同按鍵的連射 請問有辦法做設定嗎
你可以把$x::到return這一段複製 貼到下方後改按鍵,即可設定多組囉
請問大大 我從最上面你的本文 一路看留言下來 也謝謝蕭大讓我學了很多 真的覺得這很有趣 然後是我的問題 我有辦法在一串腳本中 使用另一個腳本嗎? 例如上面說的 $x:: { Send {a Down} Send {a Up} } $a:: { Send {1 Down} Sleep 60 Send {1 up} Send {2 Down} Sleep 60 Send {2 up} Send {3 Down} Sleep 60 Send {3 up} Send {4 Down} Sleep 60 Send {4 up} } 但這個我試過了 一旦把所謂 想在腳本理執行的腳本($a) 放在$x:上面 或者另一個不同的記事本裡面 就沒辦法做用 這是為甚麼呢? 請問有辦法做出 跑主線 A->B->C->戰鬥->回任務 以上我跑主線已經使用Mouseclick,right, X, Y , send [RButton]之類的東西去處理了 請問有辦法在這些腳本後 接到戰鬥任務 然後做一個 循環幾秒結束 或者循環幾次 的腳本嗎? Loop 壓住或者循環幾次 或者 ~F3::suspend #MaxThreadsPerHotkey 2 $Numpad2:: PressKey := ! PressKey Loop { If ! PressKey Break Send {1 Down} Sleep 60 Send {1 up} Send {2 Down} Sleep 60 Send {2 up} Send {3 Down} Sleep 60 Send {3 up} } Return #MaxThreadsPerHotkey 1 之類的東西 現在主要的問題是不知道怎麼在腳本中插入這些 然後設定秒數到之後 腳本在繼續往下 請大大指教 謝謝 還有可以的話 小人很多不懂的 也是看大大上面留言一整排看下來的 真的學了很多 請問一下像#MaxThreadsPerHotkey 1、 If ! PressKey Break #MaxThreadsPerHotkey 2、PressKey := ! PressKey 這些指令是甚麼作用的 甚麼意思 可以請教您一下嗎 謝謝哦!!
謝謝你的回覆,依序回答你的問題 1. 可不可以在一串腳本使用另一個腳本? 答案是可以的,AHK有個#Include關鍵字,後面可以接上其他腳本執行 http://www.autohotkey.com/docs/commands/_Include.htm 語法是#Include (Path) 以下建立兩個ahk檔,內容如下 AutoHotkey.ahk $F1:: Send a #Include %A_ScriptDir%\AutoHotkey2.ahk Return AutoHotkey2.ahk Send b 按下F1時,就會打出ab 另外,AutoHotKey是支援function的,也支援參數 https://www.autohotkey.com/docs/Functions.htm 所以你下面的需求可以簡化成 $F1:: { Loop, 3 { MainStory(0, 1) ;可傳參數進入 A() B() Battle() Mission() Sleep 1000 } } MainStory(x, y) { Send a } A() { Send b } B() { Send c } Battle() { Send d } Mission() { Send e } 以上腳本的意思就是按下F1後,印出abcde 然後等1秒後再印,做3次 2. #MaxThreadsPerHotkey (Count) http://ooopscc.com/autohotkey/AutoHotkey-zh_CN/docs/commands/_MaxThreadsPerHotkey.htm 簡單來說他是避免使用者多次按下按鍵導致執行出錯 MaxThreadsPerHotkey 2代表這個按鍵觸發只能同時執行兩次 這是因為這個腳本是On Off型,所以若同時執行多個可能會出錯 If ! PressKey Break 這是基本的程式語言語法了,如果PressKey是false就跳離方法 (如果你沒有學過C語言或你不知道boolean是什麼,可能會看得很吃力) PressKey := ! PressKey 這也是C語言基本語法,就是把boolean值true/false狀態切換 就像boolean = !boolean這樣
大大您好 一整串看下來真的收益良多 很感謝大大這樣的無私分享 也成功的做出想用的腳本了 現在想要請問大大 就是說希望做出 類似偵測字母應對輸入這樣 因為以前用按鍵精靈有寫過首抽腳本 跳出非特定圖案既重頭迴圈 所以想請問如何偵測圖案 做下一步指令
你可以使用ImageSearch的搜尋圖片方法 http://ahkscript.org/docs/commands/ImageSearch.htm 因為官網範例寫得很清楚了,所以我就不多作解釋了 請試著看英文囉
謝謝蕭大的回覆 也謝謝你解釋的這麼清楚 不過我本身沒學過那些 是真的看得很吃力哈哈 我會再自己透過研究測試去了解 有問題再來請教您囉 然後蕭大本身就是學這一科的嗎 如果像我這種很有興趣的外行人 有甚麼方法可以去學呢?
我是學這一科的沒錯 這種script其實跟一般程式語言差不多 只差在語法有些不同(例如宣告變數方式、方法名稱) 所以有程式底子的話觀念是通用的 其實程式設計的進入門檻非常低 許多程式設計師都不是專業背景(多的是數學系甚至醫學系寫程式) 我其實對AHK的script也不是很熟 但只要查詢AHK提供的文件跟範例,並沒有那麼難寫 所以建議你是先有程式邏輯的概念(例如學習一種入門語言) 加上不逃避閱讀文件 寫script也就沒那麼困難了
請問大大:腳本寫好後,在筆記本上測試有執行成功,但為何進遊戲後卻無法執行功能,是否和XP系統有關 。。
可能原因是遊戲有擋這種按鍵精靈式的程式發送鍵盤事件 (可嘗試用同類型軟體測試) 或是AutoHotKey需要系統管理者權限執行 不過你是XP一般來說應不需要...
版大你好!試問如果我要按A~B循環3次後按4~5後全部一直無限循環 該如何處裡呢? 我目前是A->B->A->B->A->B->4->5一直循環 但內容太多,圖個日後修改簡易希望版大教學一下。
用迴圈跑就可以了吧 請參考http://ahkscript.org/docs/commands/Loop.htm Loop, 3 { A() B() } Loop { 4() 5() if some_condition break }
板大你好! 我最近在學習用這個軟體寫腳本! 想請問~ 開頭的 #MaxThreadsPerHotkey 2 尾巴的 #MaxThreadsPerHotkey 1 尾巴那的值設 1 是什麼意思?! 頭跟尾是有相呼應才這樣設的嗎?! 謝謝喔=ˇ=
我直接貼以下網址的說明給你看 其實你直接查官網的說明文件,會比來這詢問等回覆更快 http://ooopscc.com/autohotkey/AutoHotkey-zh_CN/docs/commands/_MaxThreadsPerHotkey.htm --- 如果一個熱鍵的此限制為1, 那麼當它的子程序在運行時再次按下這個熱鍵, 那麼鍵擊會被忽略. 這有助於防止意外的重複按鍵 ---
想在請教板大! 我現在是讓我的遊戲角色,在地圖的某個點打怪~ 我想新增~讓角色去找NPC說話,可是打怪的地方跟NPC的位置有很遠的距離! 請問有尋找遊戲地圖裡的座標指令嗎?! 我試著用mouseclick,但他只能click目前視窗的座標,而非遊戲本身裡的座標. NPC的位置在遊戲地圖座標的(0,0),使用mouseclick,0,0,游標會跑到遊戲視窗的左上角原點,而非游戲座標! 請問這問題有指令可以解決嗎?!=口= 謝謝! 我翻了說明書,這問題還是卡了很久!
請問遊戲本身有沒有全螢幕的設定? 如果有的話(0,0)應該會變成遊戲座標 如果沒有的話,直接把座標x,y加上視窗原點應該可以吧? 例如把視窗移到畫面左上角然後click (6,30)這樣?
版大您好 我寫了一個程序 要刷 右鍵1~0右鍵 經過1200秒後按F4 在右鍵9~0右鍵 F5 啟動 在一次關閉 但是我寫出來的 按F5能開不能關 可以幫我看一下嗎 #MaxThreadsPerHotkey 2 $F5:: PressKey := ! PressKey Loop { If ! PressKey Break Settimer, skill_1, 10000 Click down right Sleep 50 Send {1 Down} Sleep 850 Send {1 Up} Sleep 850 Send {2 Down} Sleep 850 Send {2 Up} Sleep 850 Send {3 Down} Sleep 850 Send {3 Up} Sleep 850 Send {4 Down} Sleep 850 Send {4 Up} Sleep 850 Send {5 Down} Sleep 850 Send {5 Up} Sleep 850 Send {6 Down} Sleep 850 Send {6 Up} Sleep 850 Send {7 Down} Sleep 850 Send {7 Up} Sleep 850 Send {8 Down} Sleep 850 Send {8 Up} Sleep 850 Send {9 Down} Sleep 850 Send {9 Up} Sleep 850 Send {0 Down} Sleep 850 Send {0 Up} Sleep 850 Click up right } Return skill_1: { Send {F4 Down}{F4 Up} Sleep 500 MouseGetPos, x, y MouseMove,x + 200,y + 200 sleep 850 Click down right Send {9 Down} Sleep 850 Send {9 Up} Sleep 850 Send {0 Down} Sleep 850 Send {0 Up} Sleep 850 Click up right Send {F1 Down}{F1 Up} mouseMove,x,y sleep 100000 return } #MaxThreadsPerHotkey 1
原因很簡單,他關閉的原理是靠修改PressKey這個全域變數 做到原先的執行緒跳離、新的執行緒不執行的情形 但你的 If ! PressKey Break 只有放在一開始,這樣除非他跑過一輪不然不會執行到上面那兩行 簡單一點的改法就是在上方增加中斷整個執行緒的指令,如 $F2::pause 按下F2暫停,再按一次繼續 $F6::Reload 按下F6重新載入script,同時讓之前所有執行緒停止 建議增加Reload解決
版大 在此感謝你撥空回復幫助我。我的問題依然存在 我a~z循環3次0~9循環1再返回a~z循環這樣 執行第一個循環3次,在執行第2個循環1次,再回第一個循環在第二這樣
我不太懂你的問題在哪 Loop是可以寫成巢狀結構的啊 包兩層Loop不是就行了嗎? $F9:: Loop { Loop, 3 { ;Do something } Loop, 1 { ;Do something } } Return
感謝 版大的協助 另外我想要做圖形掃描 當偵測到某個圖片時 可以開啟 CMD 並且輸入關機指令 shutdown 不知道這樣的功能有沒有辦法做到
我沒試過但應是可以 請參考ImageSearch的範例 http://ahkscript.org/docs/commands/ImageSearch.htm 在最後擺上Shutdown的指令即可 https://www.autohotkey.com/docs/commands/Shutdown.htm 如果堅持要把CMD開起來並且輸入指令,也是有方法做到 http://www.autohotkey.com/board/topic/121831-send-text-to-cmdexe-window-and-execute/ 這邊就不提供程式碼了,加油
獲取顏色 代碼要搭配 MouseGetPos 因為螢幕上的顏色跟滑鼠上的顏色判定好像不同 我也是弄很久才搞懂得
謝謝你的分享
CoordMode, Mouse, Screen Delete::reload Home::pause End:: mousemove ,x,y Tooltip, % " Pos[Index].X "," Pos[Index].Y "`n顏色: " color, 0,0,3 MouseGetPos, x,y PixelGetColor, color, x,y return 可以用這個來測試 滑鼠座標顏色
版大你好喔~ 新手請教,我想寫一個巨集~ 按下A(普攻),當出現BUFF時候,自動按S(技能) 執行按鈕就是A(普攻),按住時後執行,放開時後停止 我是用PixelSearch來範圍找BUFF的顏色,顏色對的時候就會幫我按S 這是我寫的巨集,一定很好笑,我已經研究兩天還是無法順利執行>"< 請教我該如何寫呢~萬分感激~ a:: { SetTimer, tagLoop, 200 } ;定时器 tagLoop: { ;判断A键是否按住 if (GetKeyState("a")) { PixelSearch, Px, Py, 390, 605, 595, 630, 0xD47352, 3, Fast if ErrorLevel Send,s } ;取消定时器 else { SetTimer, tagLoop, Off } return }
其實我個人是不樂見大家拿腳本來問啦... 畢竟這串本意只是想推廣AHK而不是幫大家寫script的地方 1. 首先我不建議你用a當開頭,因為你之後會判斷a是否被按下,但a已經被吃掉了 所以我先用b開始 2. 設定好定時器後他會一直執行,不需要你主動關閉他,你關了他就只會執行一次 3. 如果找到指定顏色就執行應該是if !ErrorLevel 找不到的情況執行才是if ErrorLevel 底下是建議寫法 ==== $b:: SetTimer, tagLoop, 200 return ;定时器 tagLoop: { ;判断A键是否按住 if (GetKeyState("a")) { PixelSearch, Px, Py, 390, 605, 595, 630, 0xD47352, 3, Fast if !ErrorLevel Send,s else Send,c } return }
版主大大~ 真的很感謝您的指點, 對於完全沒碰過程式語言的我, 自學沒人可以問真的有點吃力,>"< 好在大大沒有放棄我~ 超級感謝~
不用客氣,謝謝你專程回覆
請問為什麼安裝完後點run右下角都沒出現H的符號,這樣要怎麼打開記事本呢?小弟系統win7 x64
有種情況會發生run後沒有H符號 就是你的AutoHotKey script是空的 他沒有任何可以執行的script就不會啟動 解決法就是在我的文件下產生一個AutoHotkey.ahk 隨便給個執行後會進行等待按鍵的內容,如 $b:: return 再看看會不會沒出現
你好 我想問一下 我在官方論壇 找到個遊戲的 無後座力跟快速射擊的腳本 但是 好像無法正確使用 按照說明點擊start或腳本啟動熱鍵後 滑鼠左鍵點擊就會無效 只有滑鼠會一直往下移 請問有辦法解決嗎???http://www.autohotkey.com/board/topic/115326-generic-recoil-rapid-fire-manager/
不好意思...因為我沒有玩這個遊戲 我下載回來執行也沒有反應,所以沒法幫你測試 請自己加油囉
我的系統是windows 10 10240 不知道是不是跟系統不相容的關係?
loop { If Not Click Break Click down Sleep 20 Click up Sleep 20 } Return 請問這樣可以滑鼠連點嗎? 我試著把If Not GetKeyState 改成 If Not Click 這樣做有用嗎?
1. 不建議用你想的按住滑鼠的方式來連點 因為這樣會發生很多預期外的狀況 2. AHK有不同的function,但不會是用if Not Click這種寫法 3. 我建議還是用文章內的的按住鍵盤某按鍵或是開關式的比較好
辛苦了~板大真的很認真回答大家的問題 想請問一下我設定loop7次在記事本測試時確實打出7個w 遊戲內卻只打3~5個 是怎麼回事呢
雖然我不清楚你是玩哪一款遊戲 但我想應該是遊戲沒辦法這麼快接收按鍵資訊 請試著把按鍵間的等待時間拉大一點試試看
版大我想請問 我是套用以下這個腳本 ~F2:: { settimer, skill_1, 200000 settimer, skill_2, 200000 return } ~F3:: { settimer, skill_1, off settimer, skill_2, off return } skill_1: { Send {a Down}{a Up} return } skill_2: { Send {s Down}{s Up} return } 可是假設我想要他S長按7秒鐘 該怎麼修改語法呢
請參考我第一個範例囉 Send {s Down} Sleep 7000 Send {s Up}
*****
請問蕭大:我想寫個AutoHotkey的程式是.平常AutoHotkey是開著.但每當我按1下按F12後.AutoHotkey就會按1下m鍵後再連按2下z鍵後就停止(程式沒關掉.也沒暫停).當我需要時.再次按1下F12鍵後.AutoHotkey就又會幫我按1下m鍵後在連按2下z鍵. 底下這寫法是對還錯?還是需要修改哪裡.請幫指教.謝謝! $F12:: { Send {m Down} Sleep 1 Send {m Up} Sleep 1 Send {z Down} Sleep 10 Send {z Up} Sleep 10 Send {z Down} Sleep 10 Send {z Up} Sleep 10 }
其實我過去寫得真的有誤導一些人,要傳送指令不一定要Sleep,直接Send就好 你的寫法沒有錯,不過可以更簡潔,照以下寫法就好 $F12:: Send {m} Send {z 2} Return
如果我想用搖桿 控制滑鼠 有可能做到以下嗎? 1.滑鼠由當前點移動到指定點 2.按鈕放開後回到定點 3.滑鼠左鍵按下xx秒之後再移向定點 by 想用搖桿完白貓的人qq
理論上是做得到,但程式上你要知道定點的座標或位置還有你現在的位置才能走回去吧? AutoHotKey可以改的東西蠻多的,我自己其實很不熟,你可以自己試試看囉
對了,突然想到兩個問題 1.搖桿對應的AHK 我網路上都只有看到鍵盤和滑鼠 如果定義成鍵盤的話就又要再開別的程式換到搖桿上有點困擾 2.能否抓到某個視窗(bluestrack) 再從那個視窗重新定座標 因為我沒有全螢幕玩,所以才問看看
1. 搖桿也是可以控制的,請參考 http://www.autohotkey.com/docs/KeyList.htm 2. 可以,請用CoordMode, Screen,請參考以下討論 http://www.autohotkey.com/board/topic/63184-move-mouse-position-from-whole-screen-vs-active-window/
可以幫我寫個自動攻擊嗎 就是F3開關腳本,然後卡著滑鼠左鍵,這要什麼寫,我試過能持續按著left click,但不能停掉,很苦惱
$F3:: Send {LButton Down} return 不用了,爬了一下,你說過的,原來就這麼簡單= =
你是上面那位小智嗎? 你這樣寫應該只會按左鍵一下吧 如果要做到開關式的連續按左鍵,請參考我上面settimer的語法囉
上面的不是我,我才是小智 問一下,我想腳本也能背景作業,我想把遊戲縮小,也不會影響我其他工作,我要在腳本加什麼字元? 以下是我的腳本 ~F2::Pause $F3:: Send {LButton Down} { settimer, skill_1, 1000 settimer, skill_2, 5000 return } $F4:: { settimer, skill_1, off settimer, skill_2, off return } skill_1: { Send {RButton Down}{RButton Up} return } skill_2: { Send {1 Down}{1 Up} return } return
其實我知道四位都是你,不知道你為什麼要一直喚暱稱... 背景作業是可行的 下方範例是將第一個視窗標題包含"記事本"的程式送出指定文字 你可以把"記事本"三個字改成你想要的視窗標題(不須加雙引號) 請恕我就不幫你寫到完了,自己動手,豐衣足食囉 SetTitleMatchMode 2 F6:: WinGet, programid,List, 記事本 Loop { ControlSend,,{A}, ahk_id %programid1% Sleep 2000 ControlSend,,{B}, ahk_id %programid1% Sleep 2000 ControlSend,,{C}, ahk_id %programid1% Sleep 4000 ControlSend,,{D}, ahk_id %programid1% Sleep 4000 ControlSend,,{E}, ahk_id %programid1% Sleep 4000 ControlSend,,{F}, ahk_id %programid1% Sleep 1500 } F2::pause
原來上面那個沒名稱都是我,我忘了加暱稱XD 下面那個腳本也是想背景運作的,然後我想把下面這個跟上面那個腳本合在一起,要合在一起??@@ Toggle := 0 F3:: Toggle := !Toggle If toggle = 0 { SoundBeep sleep 100 SoundBeep SetTimer, TimedCommand, Off } If toggle = 1 { SoundBeep SetTimer, TimedCommand, 30000 ;30000 = 30 seconds. } return TimedCommand: Send {e down} sleep 4000 Send {e up} Return
我還是看不太懂- -''我玩的遊戲是外國一個叫TROVE,像minecraft,在steam也算熱滿的... SetTitleMatchMode 2 WinGet, programid,List,Trove $F3:: ControlSend {LButton Down}ahk_id %programid1% { settimer, skill_1, 1000 settimer, skill_2, 5000 return } $F4:: { settimer, skill_1, off settimer, skill_2, off return } skill_1: { ControlSend {RButton Down}{RButton Up}ahk_id %programid1% return } skill_2: { ControlSend {1 Down}{1 Up}ahk_id %programid1% return } return 我跟著上面的模樣打,然後遊戲聊天框出了些字附號的,壓縮了腳本還在其他地方運作,我是個白癡,不會看的=3=上面那個加入聲音都是一個老外幫我寫的...
抱歉我真的看不懂你的意思 這個腳本請問有什麼問題嗎? 不就是找到Trove這個程式,按F3開啟動作F4關掉這樣?
*****
*****
*****
*****
*****
*****
蕭大您好:前提到朋友丟一個用AutoHotkey寫的(腳本執行器)給我.我有上傳雲端給您看過.您說AutoHotkey是可以寫成一個按鍵程式來使用.是否可請如果蕭大在有空時.寫篇使用AutoHotkey寫成簡易按鍵程式的教學. 內容為.例:按F12(可拉選字式)是啟動程式的按鍵功能.按F9(可拉選字式)是暫停程式按鍵功能.按F12啟動後會自動按哪個鍵盤按鍵(可拉選字式)與點滑鼠(左或右鍵)幾下.衷心期盼 蕭大 閒暇之餘.在您部落格發個製作簡易程式教學.讓想學的人有人可教導.
你好,感覺你好像要我無償幫你寫外掛一樣:( 不過我還是嘗試了,請看本文的補充 範例沒有完全配合你的需求,請自行增添修改囉
補充一點:(可拉選字式)是怎麼寫入.要寫入的鍵盤按鍵字型.是要用大寫或小寫字體才可使用.
我看到你的文章也在摸索這套軟體 請教你一下@@ 如果我按F9一次按X 然後再按第二次的F9按Y 第三次他X 第四次他Y 依此類推 請問這樣有辦法寫出來腳本嗎 請教一下@@
當然可以,你可以參考我以前補充的"按下特定鍵開始連打特定按鍵,再按一次結束" Loop拿掉,把If判斷式改成Send x或Send y即可
感謝簡大的程式製作教學.真的非常謝謝你.雖然不會但我會認真摸索學習. 感恩!!
謝謝你的回應,有幫助到你就好
簡大你好:我想用AutoHotkey寫一個exe檔.來開啟上班時公司要開的程式.但是都無法成功.我沒抓座標.我是用捷徑寫入.底下是抓捷徑方法.請簡大幫看抓法對不對. 我抓捷徑的方法是:我點桌面圖示的內容.打開後裡面有.開啟位置(S)F:\DS.目標(T)F:\DS\RSDS.EXE $F12:: { Send {e Down} E::run F:\Z\EXE\csupdate.exe Sleep 3000 } Return 但是按F12後都顯示錯誤. 請簡大幫解惑與指正.是捷徑抓法錯誤?還是寫法有誤? 感恩~
抱歉上一篇打錯.更正上一篇內容 簡大你好:我想用AutoHotkey寫一個exe檔.來開啟上班時公司要開的程式.但是都無法成功.我沒抓座標.我是用捷徑寫入.底下是抓捷徑方法.有2個要寫入.請簡大幫看抓法對不對.我抓捷徑的方法是:我分別點桌面2個圖示的內容.打開後2個裡面各有. 1.開啟位置(S)F:\Z 目標(T)F:\Z\EXE\csupdate.exe 目標位置EXE 2.開啟位置(S)F:\DS 目標(T)F:\DS\RSDS.EXE 目標位置DS $F12:: { Send {e Down} E::run F:\Z\EXE\csupdate.exe Sleep 3000 Send {c Down} C::run F:\DS\RSDS.EXE Sleep 3000 } Return 但是按F12後都顯示錯誤. 請簡大幫解惑與指正.是捷徑抓法錯誤?還是寫法有誤? 感恩~
抱歉上一篇打錯.再次更正.................. 蕭大你好:我想用AutoHotkey寫一個exe檔.來開啟上班時公司要開的程式.但是都無法成功.我沒抓座標.我是用捷徑寫入.底下是抓捷徑方法.有3個要寫入.請簡大幫看抓法對不對.我抓捷徑的方法是:我分別點桌面3個圖示的內容.打開後3個裡面各有. 1.開啟位置(S)F:\Z 目標(T)F:\Z\EXE\csupdate.exe 目標位置EXE 2.開啟位置(S)F:\DS 目標(T)F:\DS\RSDS.EXE 目標位置DS 3.是免安裝火狐瀏覽器 D:\My Documents\Tool\FirefoxPortable\App\Firefox\Firefox.exe $F12:: { Send {e Down} E::run F:\Z\EXE\csupdate.exe Sleep 3000 Send {c Down} C::run F:\DS\RSDS.EXE Sleep 3000 Send {f Down} F::run "D:\My Documents\Tool\FirefoxPortable\App\Firefox\Firefox.exe } Return 但是按F12後都顯示錯誤.只有火狐瀏覽器打得開.但是此捷徑的命令會連開2個火狐網頁.為什麼? 請蕭大幫解惑與指正.是捷徑抓法錯誤?還是寫法有誤? 感恩~
首先我是蕭大不是簡大,你之前打對了但後來不知就為什麼打錯了... (上一篇我沒有仔細看,所以沒注意到) 我看不太懂你寫的code的意思 看起來你是希望按下F12後執行這三個程式對吧 但你前面說是用捷徑,那就應該執行捷徑才對吧 你程式看起來又是直接執行軟體... 如果你的需求是這樣的話,請直接用Run後面接檔案位置即可 例如 $F9:: Run, "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" Return 這樣就是按F9執行後面的Firefox 你的需求只要這樣寫即可,其他通通不需要 ==== $F12:: Run, "F:\Z\EXE\csupdate.exe" Run, "F:\DS\RSDS.EXE" Run, "D:\My Documents\Tool\FirefoxPortable\App\Firefox\Firefox.exe" Return ====
簡大你好:如果我想要寫出 左右鍵連擊 這麼寫語法正確嗎? ~F2:: { settimer, skill_1, 200000 settimer, skill_2, 200000 return } ~F3:: { settimer, skill_1, off settimer, skill_2, off return } skill_1: { Send {{Left} Down}{{Left} Up} return } skill_2: { Send {{Right} Down}{{Right} Up} return }
再次申明,我是蕭大不是簡大 下次還是叫我簡大的訪客我就無視了 你的寫法其實不正確 首先滑鼠左右鍵要用MouseClick 而且照抄這段會變成每200秒才點一次,應該跟你要的連點不太相符 可以改成以下內容讓他左右鍵瘋狂連點 ==== ~F2:: { settimer, skill_1, 100 return } ~F3:: { settimer, skill_1, off return } skill_1: { MouseClick, left MouseClick, right return }
請問一下 我現在用這個改按住 那我按了停不下來怎麼辦:(? #MaxThreadsPerHotkey 2 $F9:: PressKey := ! PressKey Loop { If ! PressKey Break Send {x Down} } Return #MaxThreadsPerHotkey 1
請問為什麼你要這樣寫呢? 目的是? 雖然一直按著X但滑鼠還是可以動,你可以把AHK的程式關閉即可停下
先向您說聲抱歉.打錯你的姓.實感萬分抱歉.也謝謝蕭大的教導.最近因工作忙.所以到現才回覆您.我有空再用您寫的語法試試. 在次感謝蕭大百忙中.還要教我們這些菜鳥.無限感激~
不用這麼客氣啦 反正我也不是真的姓蕭(爆 若有需要請再留言囉
請問如果我想要製作一個按F9他會自動的連點Z X C都1.2秒 V2秒 空白鍵1.5秒 滑鼠左鍵1.2秒的腳本該如何寫呢? 還有想請問為什麼我安裝完右下角都沒有H的小圖示,去點開啟軟體也都毫無反應@@都沒辦法使用
請參考我2014/6/22的程式碼 增加多個計時器事件,每個function裡面加上Send Z之類的 然後對每個計時器分別設定等待時間即可 另外他新版好像不會自動產生範例script 開啟軟體無反應是因為他沒有script或是script沒有需要等待輸入按鍵 所以就自行關閉了 解決法就是請寫一個很簡單的script(例如copy本文的),並儲存副檔名為ahk 然後對檔案按右鍵,選Run Script即可
請問我想要不斷創角色來刷遊戲!! 但是遊戲角色的id不能重複!! 想說乾脆用數字來命名!! 刷完一次ID就加1,來當作下一隻腳色的ID x當做角色的ID x:=123 x:=x+1 Send x 我用以上這方式來命名,但實際跑下去都是顯示X,不是數字 請問有什麼方法可以讓x變成數字而不是文字,而且能自動累加完後顯示出來? 謝謝
send %x% 請參考 https://autohotkey.com/board/topic/49290-how-to-send-a-variable/
請問,這樣可以實現 按下F9 跑 (左下)+上+右+下嗎? #MaxThreadsPerHotkey 2 $F9:: PressKey := ! PressKey Loop { If ! PressKey Break Send {Down Down} Send {Left Down} Sleep 100 Send {Down Up} Send {Left Up} Sleep 100 Send {Up Down} Sleep 100 Send {Up Up} Sleep 300 Send {Right Down} Sleep 100 Send {Right Up} Sleep 100 Send {Down Down} Sleep 100 Send {Down Up} Sleep 300 } Return #MaxThreadsPerHotkey 1
雖然我沒測試但是組合鍵寫對了,應該是正確的
我只會安裝 不會執行 我的右下角沒有你說的那個H? 我去資料夾按下AUTOHOTKEY 他會跑出Welcome... Getting Started Before AutoHotkey can do anything, you need to write a script telling it what to do. To learn how, read the tutorial or dive straight in. Basically: create a script file → add some hotkeys → run the script file. You can also get help or find many useful scripts on our friendly discussion forum. Why am I seeing this? You ran AutoHotkey without telling it which script file to run, and it couldn't find a script in either of the usual places. 求解拜託..
其實就是我第116篇回覆的內容 英文已經說明請自行建立一個有等待按鍵的script 副檔名取名為ahk並執行,右下角的H才會出現 (執行空白檔案的話因為會馬上結束,所以也看不到H) 以前程式會自動幫你建立一個預設script所以不用自己處理 不知道為什麼新版本反而更倒退(?)
你好我想請問一下 我是使用SMART GUI 寫介面出來 如果讓按鍵點下去會跳出執行腳本的檔案 是要使用你說的這串語法嗎 Setting: GuiControlGet, UserInput1 if %UserInput1% { Hotkey,%UserInput1%,SendMe1 } GuiControlGet, UserInput2 if %UserInput2% { Hotkey,%UserInput2%,SendMe2 } MsgBox Setting change Return SendMe1: GuiControlGet, Count1 Loop %Count1% { Click, %UserSend1% } Return SendMe2: GuiControlGet, UserSend2 GuiControlGet, Count2 Loop %Count2% { SendInput, %UserSend2% } Return
我這串的意思是抓GUI上指定的按鍵跟次數設定 然後連按某鍵N次 我不太懂你說的"按鍵點下去會跳出執行腳本的檔案"我不懂是什麼意思 你是希望去執行某個檔案還是某個腳本還是? 如果只是想按下去執行特定script 請參考第一行Button的設定,他會去呼叫指定的function
蕭大 前面的我懂了!! 謝謝你的解說 想再問一下 $F9:: PressKey := ! PressKey<<<這段話的意思是??? Loop { If ! PressKey<<<這段話的意思是??? Break<<這個是重複執行
PressKey := ! PressKey 就是toggle boolean,如果true就變false,false就變true If ! PressKey 如果PressKey是false的話 Break 中斷(這個loop)
版大 請教一下我該如何寫 按下F5開始後 執行 (SHIFT按住 +滑鼠左鍵連點) 執行到我按下F5結束。
沒有測試過,請自行試試看 把以下內容複製到上面"按下特定鍵開始連打特定按鍵,再按一次結束"的範例中Loop內的語法 If ! PressKey Break Send {Shift down} Click Send {Shift up}
請問版大:底下語法我如設定用別的按鍵.按F9啟動後再按F12就有暫停作用. 可是如設定底下用(右Ctrl)按鍵.按F9啟動後再按F12暫停鍵時.就無法啟動暫 停功能(即是無法停下來).請版大幫解惑.也請版大能否幫修正或告知那錯了. 先說聲謝謝! $F9:: Loop { Send {RCtrl Down} Sleep 900 Send {RCtrl Down} Sleep 900 Send {RCtrl Down} Sleep 900 } Return F12::Pause
版大你好:我也有參考您教別人這篇: 可以改成這樣以@起頭,R F每0.1秒連發,如果中途按下z自動停止(可自行修改) $@:: Loop { If GetKeyState("z", "P") Break Send, R Send, F Sleep 100 } Return 我把它改成底下這樣後.按F9一啟動後怎都一直只按R鍵.且按F12也是無法暫停. $F9:: Loop { If GetKeyState("F12", "P") Break Send, RCtrl Sleep 900 } Return 能否請版大幫忙看看這篇為何設定是按RCtrl鍵.他卻一直只按R鍵.且按F12也無法暫停? 又上一篇是可按RCtrl鍵.但是按F12鍵時卻是無法暫停.為何?
蕭大我上2篇要向您請教的code.已在您底下這篇找到答案 #MaxThreadsPerHotkey 2 $F9:: PressKey := ! PressKey Loop { If ! PressKey Break Send {x Down} Sleep 20 Send {x Up} Sleep 20 } Return #MaxThreadsPerHotkey 1 不過您底下這一篇code作用是甚麼.是否可幫解說用法. 好讓我有學習的機會. 提供另一種範例,增加按F2暫停所有操作 #MaxThreadsPerHotkey 2 $F2::pause $F6::Reload $F9:: PressKey := ! PressKey Loop { ClickMe("x", 200) ClickMe("y", 200) ClickMe("z", 200) } Return ClickMe(key, time) { Send, %key% Sleep, %time% } #MaxThreadsPerHotkey 1 希望您有空時可以幫解說用法.讓不懂得有學習機會 謝謝您~
嗯...我其實不懂你的問題在哪裡 這篇是按下F9後每0.2秒按x,再0.2秒按y,再0.2秒按z,重複以上動作 直到再次按下F9為止
~F5:: { settimer, skill_1, 1000 settimer, skill_2, 1000 settimer, skill_3, 80000 return } ~F6:: { settimer, skill_1, off settimer, skill_2, off settimer, skill_3, off return } skill_1: { Send {f1 Down}{f1 Up} Sleep 20 Send {1 Down}{1 Up} Sleep 20 Send {2 Down}{2 Up} Sleep 20 Send {3 Down}{3 Up} Sleep 20 Send {4 Down}{4 Up} Sleep 20 Send {5 Down}{5 Up} Sleep 20 Send {6 Down}{6 Up} Sleep 20 Send {7 Down}{7 Up} Sleep 20 Send {8 Down}{8 Up} Sleep 20 Send {9 Down}{9 Up} Sleep 20 Send {0 Down}{0 Up} Sleep 20 Send {Tab Down}{tab Up} Sleep 20 Send {q Down}{q Up} Sleep 20 Send {w Down}{w Up} Sleep 20 Send {e Down}{e Up} Sleep 20 } 大大,我的123是左邊數字的按鍵 我寫完了可是settimer, skill_2, 1000 這行都會錯誤 請問哪裡要更正?
你沒有skill_2這個function啊 把skill_2跟skill_3相關字句刪掉吧
謝謝大大上次的回覆哦。 我想問,我雙開遊戲,那麼腳本可以重複使用兩個而不讓他互相衝突嗎?
如果視窗名稱不一樣可以指定運作的視窗 一樣的話...我就不清楚了 https://autohotkey.com/board/topic/121412-making-script-work-on-multiple-game-windows/
請問大大知道如何按住一個鍵不放? 我想要做個會先按z在按x的 我目前是寫這樣,但是z和x好像會同時運行 #MaxThreadsPerHotkey 2 $F9:: PressKey := ! PressKey Loop { If ! PressKey Break Send {zx Down} Sleep 20 Send {zx Up} Sleep 20 } Return #MaxThreadsPerHotkey 1
改成這樣如何? Send {z Down} Sleep 20 Send {z Up} Sleep 20 Send {x Down} Sleep 20 Send {x Up} Sleep 20
*****
*****
*****
*****
蕭大您好 我寫了一個運用圖片執行動作的腳本 但發現他並不會執行收尋圖片.. 是否能麻煩您幫我檢視一下? #MaxThreadsPerHotkey 2 #NoEnv $F6::pause ;暫 停 $F5:: ;啟動 CoordMode,Pixel,Screen bx = 0 by = 0 bx = 1 ;調試時用 Space by = 1 ;調試時用 bx1 = 1366 by1 = 768 PressKey := ! PressKey Loop { If ! PressKey Break Send {Space Down}{Space Up} Sleep 9000 ImageSearch,bx,by,bx1,by1, C:\Users\windy\Pictures\55.bmp if errorlevel = 0 { Send {Space Down}{Space Up} Sleep 1000 } } Return ClickMe(key, time) { Send, %key% Sleep, %time% } #MaxThreadsPerHotkey 1 執行腳本的結果看來他只會9秒空格一次 不會理會圖片
你好,首先我測試ImageSearch是沒問題的 有問題的應該是您 ImageSearch,bx,by,bx1,by1, C:\Users\windy\Pictures\55.bmp 這一行 依照官網說明https://autohotkey.com/docs/commands/ImageSearch.htm 您還少兩個輸入值,所以照理說應該是連執行都無法執行才對 將其改成ImageSearch,bx,by,0,0,bx1,by1, C:\Users\windy\Pictures\55.bmp 應該就可以了
請問蕭大:套用你上面的程式後改成下面就亂了.想請你幫修正.感恩~ skill_1, 100//這理改成先長按(按住)右方向鍵約8秒後放開.再換長按(按住)左方鍵 約8秒後放開.(後一直重複循環這2個方向鍵按法). skill_2, 100//這裡就改0.1秒自動按一下方向鍵(下). skill_3, 100//這理是每0.1秒按一下Enter skill_4, 100//這裡是每0.1秒按一下Space skill_5, 100//這裡是每0.1秒按一下Enter ~F2:: { settimer, skill_1, 100 settimer, skill_2, 100 settimer, skill_3, 100 settimer, skill_4, 100 settimer, skill_5, 100 return } ~F3:: { settimer, skill_1, off settimer, skill_2, off settimer, skill_3, off settimer, skill_4, off settimer, skill_5, off return } skill_1: { Send {NumpadRight Down}//這裡要長按約8秒要怎修改 Send {NumpadLeft Down}//這裡要長按約8秒要怎修改 return } skill_2: { Send {NumpadDown Down}{NumpadDown Up} return } skill_3: { Send {Enter Down}{Enter Up} return } skill_4: { Send {Space Down}{Space Up} return } skill_5: { Send {Enter Down}{Enter Up} return }
因為一直很忙的緣故,所以沒有時間幫你看程式碼 長按8秒可用以下寫法試試 Send {NumpadRight Down} Sleep 8000 Send {NumpadRight Up}
請問大大 我想詢問的語法就是 我已經有 我技能顏色的色標,但我要怎麼寫出 當這個技能是我要的色標時點擊他施放 請問有這種語法嗎
一種是Pixel抓色判斷 一種是把技能按鈕截圖 用ImageSearch的方法去判斷
所以蕭大 我到底是要用哪一種呢? 我有去看你說的ImageSearch但裡面只有提到說搜索圖片,但沒有辦法點擊他 蕭大是否有辦法示範給我看呢
請參考 https://autohotkey.com/board/topic/100718-imagesearch-to-find-and-click-an-image-that-pops-on-random-times/ ImageSearch會把找到圖片的座標存到變數中 另外有ErrorLevel告訴你有沒有找到 簡單的範例可參考網頁 ImageSearch, foundX, foundY, 0, 0, %A_ScreenWidth%, %A_ScreenHeight%, SrchBtn.bmp If(ErrorLevel == 0){ Click, %foundX%, %foundY% } 如果找到指定圖片(ErrorLevel==0),就在座標foundX, foundY點一下
請教一下,按下W後連續切換 F1 F2 F3 這樣語法該怎麼寫?
按F1 F2 F3不就是Send {F1}這樣 配合Sleep即可
感謝,抱歉再打擾一下,請問若是要將切換熱鍵、及執行某鍵的速度寫成隨時可修改的視窗,語法該怎麼寫?
可以用 Sleep, %sleepnum% 去設定等待時間 其餘請參考之前寫過的GUI範本,謝謝
要在遊戲上 武器1.2.3順序切下去怎麼打程式阿 我的只能在瀏覽器或記事本上順序打1.2.3 可是在遊戲上卻沒有1.2.3切 反而是沒反應。
#MaxThreadsPerHotkey 2 $F1:: PressKey := ! PressKey Loop { If ! PressKey Break Send {1} Sleep 263 Send {2} Sleep 263 Send {3} Sleep 263 } Return #MaxThreadsPerHotkey 1
$F2::pause $F1:: PressKey := ! PressKey { settimer, skill_1, 300 return } ~F3:: { settimer, skill_1, off return } skill_1: { Send {1 Down} Sleep 300 Send {1 Up} Sleep 300 Send {2 Down} Sleep 300 Send {2 Up} Sleep 300 Send {3 Down} Sleep 300 Send {3 Up} Sleep 300 return } 我自己折騰很久終於解決了 這樣反而能在遊戲上和瀏覽器上用了 謝蕭大 看各位的範例 也懂了一些:> 蕭大 辛苦囉:>
恭喜你,自己動手,豐衣足食
上面一堆人要求別人寫 卻自己不好好學 雖然文算久了 但看了真的很討厭
謝謝你說出我的心聲 當初只是介紹沒有想做無償勞工啊
想請教您~ 我想要滑鼠點擊兩下後,來儲存滑鼠點擊的座標,但MouseGetPos~當我程式按開始時就儲存我的滑鼠座標了= =",我想讓他在按滑鼠兩下後才儲存我的滑鼠座標,請問這個判斷式要怎麼寫呢?? 再請教您指導><謝謝喔=ˇ=
LButton:: MouseGetPos, startxpos, startypos ^LButton:: MouseGetPos, endxpos, endypos return
^LButton:: MouseGetPos, endxpos, endypos 請問這排是什麼意思呢?? 這樣儲存下來的座標,我是要用 endxpos還是startxpos??@@ 謝謝唷~~
^LButton:: 當按下Ctrl+滑鼠左鍵時觸發 MouseGetPos 取得目前滑鼠的位置 https://autohotkey.com/docs/commands/MouseGetPos.htm endxpos是x座標 endypos是y座標 當然是兩個都要用啊
我想問AHK的FOR迴圈該如何時使用 像C語言的for (i=5;i<=8;i++){執行動作.....} 那AHK是要怎麼寫呢???
主要要用while loop https://autohotkey.com/docs/commands/While.htm 但如果你只是要迴圈特定次數 直接用 Loop, 3 { } 這種寫法就可以了 或是Loop然後在裡面寫break條件 https://autohotkey.com/docs/commands/Loop.htm
很不好意思.想請問您如何讓滑鼠左鍵連點.或者讓滑鼠左鍵變更成為鍵盤某鍵比方設定為CapsLock鍵.能否煩請大大幫我用一個!感激
把原本特定按鍵改掉就好啦 某些按鍵有特殊文字,比方說你說的CapsLock鍵要用CapsLock Page Up要寫PgUp等 請參考官網說明 https://autohotkey.com/docs/KeyList.htm
蕭大您好,想請教您一下,如果想要腳本執行一開始A和B只Run一次 接著C一直Loop一直下去 但我寫成下面的樣子卻沒辦法如預期所想的一樣 #MaxThreadsPerHotkey 2 $F6:: PressKey := ! PressKey Send A Sleep 10 Send B Sleep 2000 Loop { If ! PressKey Break Send {C Down} Sleep 500 Send {C UP} Sleep 50 } Return #MaxThreadsPerHotkey 1 是要怎麼改?? 目前都在ahkcn.sourceforge.net找例子和函數都一頭霧水(第一次學這東西) 麻煩您高抬貴手了,另外蠻佩服您的精神,在這部落格服務外人高達5年以上!!
你好,我測試你寫的,按下F6他會先輸入AB然後CCCCCC 再按F6則是AB,C的部分就會停止 似乎跟你需求敘述的相同? 如果你是覺得再按F6停止時不要先按AB 簡單的改法是把這兩個指令用if包起來 PressKey := ! PressKey If (PressKey) { Send A Sleep 10 Send B Sleep 2000 } (後面完全相同)
請問能幫我製作一個 QWEASD 5毫秒重複執行的腳本嗎
請參考計時器範例將Loop裡面加上 Send Q Send W Send E Send A Send S Send D 計時器設定5毫秒重複執行即可 請自行組成完整語法吧 (話說間隔時間太短了不好喔)
謝謝大大無私的分享,很棒,很受用,謝謝
謝謝你的稱讚
板大您好 想指定運作的視窗,而不去干擾到其他作業,要如何設定呢? 感謝您~
你可以用ControlSend的方式 https://fjxhkj.github.io/ahk_doc/zh-cn/docs/commands/ControlSend.htm 如果要對特定視窗點擊是ControlClick
板大您好,自己研究後 還是無法設定成功,請問如果是在這下面要加指定運作的視窗<開其他視窗時不影響>,要在哪裡加 ControlSend [, Control, Keys, WinTitle, WinText, ExcludeTitle, ExcludeText] ControlSendRaw: 呢? 視窗的名稱要打在哪裡呢? 載麻煩您 ,感謝 2015/7/17 補充: 提供另一種範例,增加按F2暫停所有操作 #MaxThreadsPerHotkey 2 $F2::pause $F6::Reload $F9:: PressKey := ! PressKey Loop { ClickMe("x", 200) ClickMe("y", 200) ClickMe("z", 200) } Return ClickMe(key, time) { Send, %key% Sleep, %time% } #MaxThreadsPerHotkey 1
真的有這麼難嗎? 說明都是中文的呢 我會建議你去相關的論壇發問比較快獲得解答 ==== #MaxThreadsPerHotkey 2 $F2::pause $F6::Reload $F9:: PressKey := ! PressKey Loop { If ! PressKey Break ClickMe("x", 200) ClickMe("y", 200) ClickMe("z", 200) } Return ClickMe(key, time) { ControlSend, ,%key%, 未命名 - 記事本 Sleep, %time% } #MaxThreadsPerHotkey 1 ==== 以上會去影響視窗標題為"未命名 - 記事本" 每0.2秒依序印出x y z 如有多個視窗名稱相同會取最後一個 如果視窗名稱會變動可以用SetTitleMatchMode改變查詢從"完全符合"變成"包含"
大大請問一下 我想把這兩個結合 $F6::pause $F7::Reload ~F8:: { settimer, skill_1, 7000 return } skill_1: { Send {2 Down} Sleep 10 Send {2 Up} Sleep 10 return } $F6::pause $F7::Reload $F8:: PressKey := ! PressKey Loop { If ! PressKey Break Send {1 Down} Sleep 10 Send {1 Up} Sleep 10 Send {3 Down} Sleep 10 Send {3 Up} Sleep 10 } Return 我試了好久還是不知道計時器跟loop要如何放在一起... 求提示><
為什麼要放在一起呢? 計時器其實就是定時執行指令了 如你上面貼的就是每7秒執行一次 所以你只要把你要執行的指令放到skill_1:裡面即可
我是想要1 3連按 但是2每7秒按一次 2每7秒按一次這部分我有理解出來 但是1 3連按這loop我不知道在計時器如何使用 $F6::pause $F7::Reload ~F8:: { settimer, skill_1, 7000 settimer, skill_2, 10 return } skill_1: { Send {2 Down} Sleep 10 Send {2 Up} Sleep 10 return } skill_2: { Send {1 Down} Sleep 10 Send {1 Up} Sleep 10 Send {3 Down} Sleep 10 Send {3 Up} Sleep 10 return } 我這樣寫去記事本測試變成1111111333333311111113333333.........11211111.... 我是想要變成1313131313131313......131321313131.... 請問大大了
幫訪客解答 re: 請問如果不要連點,而是按下F1開始長按A鍵,再按一次F1結束,這樣要怎麼改? #MaxThreadsPerHotkey 2 $F1:: PressKey := ! PressKey Loop { If ! PressKey Break Send {A Down} } Send {A Up} Return #MaxThreadsPerHotkey 1
謝謝你的熱心解答
樓上上試試把1 3連發分開寫 寫成 skill_2: { 連發1 } skill_3: { 連發3 } 看到版大很熱心,我要來盡微薄之力回饋一下
謝謝你的熱心解答
您好想請問,win7 32bit 是不是不能用啊... 我按了完全沒反應~可是同樣的程式64的就可用
請問你是說什麼程式呢? 是安裝程式、主程式、還是我下面製作的連發檔? 連發檔我是用64bit的程式產生的,32bit的OS應該是無法執行
蕭大您好,預期要進行"按下數字1再按Enter,接著按數字2再按一次enter,結束"這樣的動作 我是透過Send去執行,但最終希望套用到遊戲上使用,因此我改用ControlSend作為指令 目前程式碼如下所示: [:: →按下"["執行下列指令 { ControlSend, , 1, "遊戲視窗名稱(即WinTitle)" {Enter} →在指定視窗輸入1然後Enter Sleep 1000 →間隔1秒時間 ControlSend, , 2, "遊戲視窗名稱(即WinTitle)" {Enter} →在指定視窗輸入1然後Enter Sleep 1000 →間隔1秒時間 } Return →結束單次指令運作 這樣的寫法哪裡有問題嗎? 為什麼我在遊戲中無法順利運作呢? 是不是有其他種指定視窗寫法? 研究了2天還是一頭霧水... 煩請您協助解答了,謝謝!
你的ControlSend的指令似乎不太對 我有一個簡單對記事本送指令1+Enter+2+Enter的例子 SetTitleMatchMode, 2 [:: Loop { ControlSend, Edit1, 1{Enter}, ahk_exe notepad.exe Sleep 1000 ControlSend, Edit1, 2{Enter}, ahk_exe notepad.exe Sleep 1000 } Return 可能你會吐槽Edit1跟ahk_exe notepad.exe怎來的 其實AHK內建附帶了一個WindowsSpy,點選視窗就能知道他的ClassNN跟Class http://imgur.com/a/Ak9OK 如果有其他的問題,建議去PTT的EzHotKey等各大討論區問比較快喔
為什麼我設定F3代表按下時會暫停這個腳本執行,再按一次啟動沒有放映 而且 切畫面之後 腳本也失效 要再重新啟動腳本
不好意思,這地方是我沒有說明清楚 Suspend的暫停是停用/啟用快速鍵 要完全暫時目前執行動作應該要用Pause 這部分我會更新原文 至於切畫面腳本失效 是因為腳本是對目前視窗執行的 所以你切到其他視窗,當然就不會送指令了 如果要針對指定視窗送指令,請使用ControlSend https://autohotkey.com/docs/commands/ControlSend.htm
蕭大您好 小弟看著您這篇文接觸AHK學了不少 內文到留言都是滿滿的範本教學 讓我玩遊戲輕鬆了不少XD 在此非常感謝您持續經營這網站且都有回復! 最近看到前面的留言有ControlSend這指令 很有興趣 但發現是不是有些按鍵不支援這模式? 例如方向鍵的上下左右 ControlSend,Edit1, {Left down}, MapleStory ControlSend,Edit1, {Left up}, MapleStory 在遊戲內沒反應 但End Insert這類鍵或其他鍵都有反應 煩惱了三天來請教蕭大是否真的有一些限制?
首先那個Edit1可以試著拿掉 因為不是每個遊戲都有那個控制項 https://autohotkey.com/board/topic/121612-controlsend-is-not-working-for-right-down-and-right-up/ 我幫忙找了一下討論 如果你是希望按住的話,可以試著連續ControlSend 方向鍵down ControlSend,, {Left down}, MapleStory 或是將down拿掉變成{Left},等同直接按一個按鍵
感謝蕭大的回應 沒注意到這討論區 稍微逛了一下看到更多未來QQ 那篇文似乎也是玩maplestory 人物坐著時 啟動程式人物是會站起來但沒有移動 用一般的Send是可以持續移動 試過幾個方法還是沒用 還是算了 最後再次感謝
可惜沒有幫助到你 :(
請問 開始運行我的指令 但只想運作一個視窗掛機 ,例如: 只想在風之谷 這個程式視窗上去運作,我跳到其他視窗時 不影響操作 , 這時 要如何設指令呢 ? 再麻煩您了 感謝
請參考上方留言的ControlSend 能只針對特定視窗發送指令
謝謝大大的教學! 但是我想要請問一下 有辦法把鍵盤右邊的windows鍵修改成fn鍵嗎?
這應該不是用AHK來解決 可以搜尋一下remap keyboard https://github.com/randyrants/sharpkeys/releases 我沒使用過不清楚能否解決你的問題
蕭大你好,小弟可以向您請教以下條件的寫法嗎? 1.F9快捷鍵啟動或關閉 2.按下F9後,每隔42秒按一次空白鍵 3.請問能在遊戲視窗最小化(背景執行)的狀態下運行嗎? 還請您不吝嗇指導,感謝
請參考"2013/4/22 補充"的內容 #MaxThreadsPerHotkey 2 $F9:: PressKey := ! PressKey Loop { If ! PressKey Break Send {Space} Sleep 42000 } Return #MaxThreadsPerHotkey 1 3. 背景執行是可以的,Send要改成ControlSend的語法 但是不好處理,請自行參考#99的留言
Send要改成ControlSend的語法 實在不懂 有熱心網友能幫忙嗎? 以下我的 #MaxThreadsPerHotkey 2 $F2::pause $F6::Reload $F9:: PressKey := ! PressKey Loop { ClickMe("3", 20) ClickMe("4", 20) ClickMe("5", 20) ClickMe("6", 20) ClickMe("7", 20) ClickMe("8", 20) ClickMe("9", 20) ClickMe("0", 20) ClickMe(" ", 1) ClickMe("z", 200) } Return ClickMe(key, time) { Send, %key% Sleep, %time% } #MaxThreadsPerHotkey 1 } #MaxThreadsPerHotkey 1
更正 我知道ControlSend的用法了 但我搞不清楚 檔案類型 是不是就會無法運行
在更正 ControlSend我想用在遊戲中 再輸入帳密階段 都是可行的 但是在進入畫面後 救無效了 這是為什麼
蕭大您好,最近在學抓色這區域,且知道怎抓色了 現在想試著讓程式去搜索該顏色,並搜索到了之後鼠標移到上面做點擊 參考前面留言發現大多是搜索顏色後按按鍵 像是 if (color = 0x00FF00) { Send, Q Sleep 1000 } 原本想參考這腳本去做上述想法,但實在不清楚該用什麼指令去銜接 希望蕭大能幫忙點一下,感激不盡
搜尋特定顏色可以用PixelSearch的方法 https://autohotkey.com/docs/commands/PixelSearch.htm http://ahkcn.sourceforge.net/docs/commands/PixelSearch.htm (中文翻譯) 不過你的需求我覺得比較偏向ImageSearch的搜尋圖片方法 http://ahkscript.org/docs/commands/ImageSearch.htm http://ahkcn.sourceforge.net/docs/commands/ImageSearch.htm (中文翻譯) 比方說先準備一個按鈕可按的圖片 之後定時偵測,如果找到就點選該位置 (可以看網址說明下面的範例,找到的位置會存在第一二格參數中)
先感謝雲大這麼迅速回覆我QQ 那兩ˋ條指令我先前有研究過,但小弟是門外漢,英文又有點苦手 因為我的需求並不像前面留言是計時的 是想例如: "按下Z之後,程式啟動並搜索畫面內特定顏色,若有搜索到則屬標移至目標做點擊" 原本是嘗試用PixelSearch,因為不理解所以先利用範本體驗看看 但效果似乎只是"抓顏色位子"而已 另外我想問幾個問題 (1)因為顏色(或圖片)是隨機出現在銀幕上,這樣的條件下這兩個指令也適用嗎,感覺似乎都是偵測特定位子 (2)ImageSearch, OutputVarX, OutputVarY, X1, Y1, X2, Y2, ImageFile 這條指令中的X1Y1X2Y2所代表的是什麼?看範本的數字都沒有很大 說明是說座標,但是什麼座標這點不太清楚 感謝雲大的耐心指導
會迅速回覆是因為我今天剛好有發文啦,不然我應該一個月後才會看到 其實網站的說明已經很清楚了,如果只是英文看不懂我會建議你用Google翻譯 如果是不會寫script(或程式)這...我也沒法教你 PixelSearch, OutputVarX, OutputVarY, X1, Y1, X2, Y2, ColorID OutputVarX, OutputVarY是儲存找到的點的X跟Y座標 X1, Y1, X2, Y2則是尋找的座標範圍 要注意的是預設會是當前視窗的範圍而非全螢幕 除非使用CoordMode來改變他 Coordinates are relative to the active window unless CoordMode was used to change that. 沒特別設定的話,座標會是相對於活動視窗的位子 也就是說活動視窗左上角當成(0, 0)來計算找到的座標,而非螢幕絕對位置 無論活動視窗怎麼拖曳都不會改變相對位置 如果找到就執行某些事件,直接修改說明的Example中else底下的內容即可 像是這樣 PixelSearch, Px, Py, 200, 200, 300, 300, 0x9d6346, 3, Fast if ErrorLevel MsgBox, That color was not found in the specified region. else MouseClick, left, 111, 222 這樣就是在(200,200)~(300,300)範圍中如果有#9d6346這個顏色 就在座標(111,222)點左鍵 ImageSearch差不多,只差在第七個參數不是填RGB的值而是檔案位置
抱歉更正一下,經過剛剛的努力稍微搞懂怎麼運作的了,也大略知道怎讓數標移動到目標,但我發現PixelSearch似乎抓不太到目標顏色,用PixelGetColor或WindowSpy都確認過目標色碼是沒有錯,即使調ColorID到50也抓不到,甚至會抓到顏色相似的地板 ImageSearch則是不管怎截圖修改,就是無法成功搜索到 感覺快成功但又卡關了,找不到問題出在哪,難到雙螢幕會影響到搜索範圍嗎?
ColorID是指色碼,你說的50是Variation嗎? 我這邊測試應該是可以正確找到顏色的 我在上上篇更新了有人翻譯的簡中說明,應該會比純英文好理解很多
阿對,是指Variation,看錯位子 剛嘗試了幾次,算是搞懂一點這指令了 一開始是不董搜索範圍,現在是顏色搜不到 也許搜不到顏色是遊戲問題,這我再多研究研究 感謝蕭大這麼晚還抽空教導,辛苦您了
如果用PixelGetColor能正確抓出顏色 PixelSearch卻抓不到的話 有可能是搜尋範圍的問題,再調大點看看
感謝蕭大(簡大),在你的教學下小弟我目前大致有做一個可以使用在遊戲上的指令了 專程上線感謝你的辛苦 感謝你 太感謝你了
不客氣,有幫助到你就好 不過簡大是哪位啊?
蕭大還在ㄇ 我想要問 有後台這種東西嗎 如果有的話 ro能用嗎 想要寫後台 f3 以及 左鍵連點
不好意思,我聽不懂你說的後台是指什麼... AutoHotKey基本上就是模擬鍵盤或滑鼠操作 所以正常鍵盤滑鼠可做到的功能,他都能做到
我是樓上 請問是用controlsend那類嗎
https://wyagd001.github.io/zh-cn/docs/commands/ControlSend.htm ControlSend主要是可以發送到特定的視窗 而一般的Send是發送到目前視窗 所以如果操作得當,是可以做到程式畫面縮小但能送指定的情況 但一般遊戲可能會有相對應的防護,這就請自行測試了
請問可以幫我寫 當按一下右鍵時0.2秒後觸發D鍵嗎 程式語言新手真的看不懂
RButton:: Sleep, 200 Send d Return
蕭大您好,看了您的文章後我成功的使用一小段時間 現在想請教一個方法 目前可以使用F9當作啟動或是停止外掛 然後我希望他執行以下簡單的程序 就是當我按下Q的時候,他幫我按下W 當我按下E的時候,他幫我按下R . 我目前的使用,只能按下F9,然後外掛持續性幫我按W 還沒辦法設定成,當我按下Q外掛幫我按W 只能持續不斷自動按W,但這樣遊戲會偵測到 所以只能改良成按下Q的時候自動觸發W一次 再按下Q也是如上會自動再觸發W一次
可以看我第一個範例,增加判斷條件 當點選q的時候自動按下w $q:: Send {w} Return
感謝蕭大的指導,目前我已經成功的寫出來了 目前只有一個小缺點,就是之前可以再按一次F9取消執行 現在改了之後,取消不了,只能關閉外掛才能停止 但在蕭大的協助下,我在遊戲內可以很正常的觸發我想要的效果 駑鈍的我,萬分感謝大大的回覆與指導 . #MaxThreadsPerHotkey 2 $F9:: PressKey := ! PressKey $q:: Send {q} Sleep 120 Send {d} Sleep 220 Send {d} Sleep 920 Send {d} Sleep 920 Send {d} Return #MaxThreadsPerHotkey 1
不客氣,祝你未來能順利寫出更多腳本
想在1秒完成 左鍵點擊10次 設定速度如何填寫
1秒完成 左點點擊10次 測試後遊戲內點擊速度有點不理想 ~F3::suspend $LButton:: Loop { If Not GetKeyState("LButton", "P") Break Send {LButton Down} Sleep 100 Send {LButton Up} Sleep 10 } Return
不確定你的情形,但輸入通常都會有反應時間 每一毫秒按一次按鍵,也沒法瞬間打出1000個字 所以設太快幫助不大