[活動]《我的包包,裝我的旅行》今年暑假,送你去度假!(8/28 得獎名單公佈)[公告] 豐掌櫃《超級吸金王》活動賽況排行及得獎名單 (8/16第四批名單公佈)[公告] 即日起,MIB也能變購物金囉![公告] 豐掌櫃《最佳銷售王》賽況排行 (6/15 得獎名單公佈)[公告] 痞客邦 PIXNET MIB(MONEY IN BLOG)部落格廣告分潤計劃申請流程調整
好康道相報
加入部落軌道,讓你的部落格有更多人知道 《按此加入》《使用心得
欲轉貼本站文章者,只要註明出處及網址即可,不需我同意了,謝謝您的配合
留悄悄話的網友請注意:如果您非痞客邦會員(包含使用FB/Google+帳號),是看不到回覆的喔

一提到可以設定鍵盤滑鼠動作的軟體,大家一定會想到按鍵精靈
雖然按鍵精靈的確是很好很強大
但是某些場合下就無法使用(比方說某某軟體禁止開啟按鍵精靈)
此外新版開始一段時間就會自動關閉
加上又有廣告,而且軟體有點肥大
如果只是要做簡單又固定的事情就不是很方便了
今天介紹的AutoHotKey這套軟體
就可以靠簡單的步驟達到連發的功能喔

官方下載頁

首先請下載AutoHotKey這套軟體,安裝檔只有1.95MB,比按鍵精靈小
安裝完後執行,右下角就會出現一個小小的H符號
在H符號按下右鍵,選擇 [Edit This Script] 這個選項
就會開啟記事本

ahk_1.png

把記事本的內容全部刪掉,將以下字樣填入進去
然後存檔關閉

~F3::suspend
$x::
        Loop
        {
                If Not GetKeyState("x", "P")
                Break
                Send {x Down}
                Sleep 100
                Send {x Up}
                Sleep 100
        }
Return

ahk_2.png

接下來在圖示按右鍵,選擇 [Reload This Script]
或是重新開啟AutoHotKey
從此以後只要按下x鍵不放,就會一直連打x鍵了
對於某些要狂按鍵盤的遊戲來說
有個連發腳本可以讓你的鍵盤壽命更持久喔

程式方面應該是不需要解說
可以將script中的x改成別的按鍵,例如改成s,就能按住s連發
或是將Sleep 100的數字改小,按鍵的頻率會加快
Sleep的時間單位為毫秒,因此100=0.1秒
F3代表按下時會暫停這個腳本執行,再按一次啟動

如果Caps Lock(大寫鎖定)為On的話,好像有可能發生操作錯亂的情形
發生這種情況的話請將Caps Lock改成Off
或是重開一次AutoHotKey即可解決

如果你是使用Vista,在軟體中按下x卻沒有連打,請不要緊張
可能是因為你執行的軟體是要有系統管理者權限的
但因為AutoHotKey沒有系統管理者權限,才會沒有作用
只要開啟AutoHotKey前按下右鍵,選擇 [以系統管理員身分開啟] 即可

AutoHotKey還有將腳本轉成exe執行檔的功能
能讓按鍵腳本在沒有裝AutoHotKey的電腦上執行喔


AutoHotKey由於全英文,加上編輯腳本必須使用程式自定的Script
不像按鍵精靈可以從指令中直接選擇
比較起來是有點難以上手
但以操作簡單、容量小、無廣告等優點來說
AutoHotKey還是有他的優點存在的
也難怪不少人用了

 

2013/4/22 補充:製作連發可執行檔

不知道為什麼打完後他自己消失了(囧),只好重打一次了

首先請在開始功能表,執行[Convert .ahk to .exe]

ahk_1

Source是你要轉換的AutoHotKey原始檔,預設會在Documents目錄下
Destination是你要儲存執行檔的位置跟檔名,請自行設定
Custom Icon是自訂圖示,一般用不到
Base File是程式的核心,使用(Default)即可

ahk_2

選完之後按下>Convert<,如果轉換成功就會出現以下訊息

ahk_3

之後直接執行檔案,在右下角的通知圖示列就會跑出來了
跟正式的AutoHotKey相比,他只有暫停Script的功能
另外對方的電腦完全不需要安裝AutoHotKey,直接執行即可

如果懶得自己做的話,也可以下載我產生的X鍵按住連發

ahk_4  

 

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
}

Posted by 蕭雲 at 痞客邦 PIXNET Guestbook(92) 引用(0) 人氣()


open trackbacks list Trackbacks (0)

留言列表 (92)

Post Comment
  • 環保
  • H的圖標不見了.我不能設置連發.我把記事本的內容改成空白后.圖標就不見了.爲什麽呢>我用的是Windows 7 但我沒有隱藏圖標。重新下載也沒有用
  • 確定完全找不到嗎?
    工作管理員的"處理程序"裡面有autohotkey在執行嗎?

    蕭雲 replied in 2010/11/07 18:35

  • 環保
  • 完全找不到.處理程序那裡看不到有.我系統還原都用了.還是不行.謝謝你回覆我
  • 建議重新安裝一次AutoHotKey吧
    或是執行AutoHotKey時選用"系統管理員執行"
    我雖然沒有用過Win 7但有用Vista
    沒道理Win 7不行

    蕭雲 replied in 2010/11/08 18:26

  • 環保
  • 選用了.也重新安裝了.[Edit This Script]這個記事本的內容我刪除了.變了空白之後.才這樣
  • 重裝之後Script不會重新產生嗎?

    蕭雲 replied in 2010/12/04 01:30

  • 訪客
  • 我玩神諭之戰 設定好之後開啟著個程適 但是不能進入遊戲
    先進入遊戲在開啟程式 遊戲馬上斷線
    我是使用Vista 用系統管理員身分開啟
  • 或許是遊戲也有擋掉AutoHotKey吧
    這樣就沒法了

    蕭雲 replied in 2010/12/04 02:02

  • 訪客
  • 安安經過多次ㄉ測試 以經可以用了
    不過 要改成其他的按鍵 連射不能改
    不是說把X改成我要更換的按鍵 就可以了嗎 3個X多改了可是不行
    是哪錯了嗎
  • 要改連射的按鍵,要改四個部分...
    第一行、第四行、第六行、第八行
    我猜你忘了改啟動條件吧

    蕭雲 replied in 2010/12/04 02:04

  • bb
  • 請問全民打棒球能用嗎
  • 沒玩過這個遊戲呢,請自行測試吧

    蕭雲 replied in 2010/12/04 02:11

  • 訪客
  • 想問要是 鍵盤右手面的 數字鍵 要怎樣set??? set完都變成左手面的數字鍵了
  • 試試看Numpad0~Numpad9
    不是0~9喔
    比方說Numpad0就是右邊小鍵盤的數字0

    蕭雲 replied in 2010/12/10 02:43

  • 訪客
  • 請問怎麼讓Ctrl連按呢?
    我改成Ctrl或是^都不行
  • 請改成LCtrl或RCtrl

    蕭雲 replied in 2011/01/21 01:50

  • 可
  • 請問一下我要連發的按鍵是空白鍵那我應該怎麼改呢
  • 就改成Space啊

    蕭雲 replied in 2011/01/21 01:53

  • 訪客
  • 我能設定成 我要讓C連發 啟動條件是 LCTRL+C嗎?
  • 啟動條件要LCtrl+C的話
    把第一行的$x::改成^c::即可
    不過結束條件就得另外設定了

    蕭雲 replied in 2011/04/24 03:24

  • 訪客
  • 如果要讓C連發 啟動條件要改 Pagedown+c 那要如何設定呢 = =?
  • 通常組合鍵只有Ctrl Alt Shift
    要Pagedown+C的話
    我想應該是要自己寫條件判斷式吧
    比方說裡面寫入這樣
    If Not GetKeyState("c", "P") and Not GetKeyState("PgDn", "P")
    Break
    (註:我沒測試過,請自行修改)

    蕭雲 replied in 2011/05/01 03:52

  • 鬼
  • 如果我想把它改成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

    蕭雲 replied in 2011/07/05 20:06

  • 訪客
  • 如果要讓G連發 啟動條件是"按N一下" 要怎麼改呢?
    我想要讓N變成切換連發的開關
    就是按N一下 G連發;再按N一下 G取消連發
    不是N代替G連發
    我想過很多方法可是都不行ˊˋ
    請問這要怎麼解決呢??
  • 欸...我現在沒辦法測試,等我查到再來回答你,不好意思...

    蕭雲 replied in 2011/07/05 20:07

  • 訪客
  • 為什麼我設的按鍵進入遊戲後反而連案件原本的功能都沒了?
  • 這情況我沒遇過
    有可能是遊戲本身會禁止按鍵精靈等軟體侵入?
    建議試試看其他的按鍵軟體是不是有一樣情形

    蕭雲 replied in 2011/12/18 10:43

  • Private Comment
  • Micheal Scofield
  • 请问可否用hotkey来不断点击某一个网页的一个按钮?
    如果可以的话又是如何?
    可以帮帮忙教学一下是如何办到的吗?
  • 我對AutoHotKey的用法只有用在連發,所以我不確定能不能用AutoHotKey作
    不過如果只是要點擊固定的地方
    直接用按鍵精靈或隨便找一個連發軟體即可

    蕭雲 replied in 2012/07/17 01:44

  • 訪客
  • 請問簡大:你寫的連發.
    $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)

    蕭雲 replied in 2012/10/29 11:10

  • 風
  • 關於蕭大所提:AutoHotKey還有將腳本轉成exe執行檔的功能.
    能否請蕭大敎一下以目前1.1.09.04版本為例.大約講解最好附圖.
    先說聲謝囉~
  • 已經增加說明在原文囉

    蕭雲 replied in 2013/04/23 01:32

  • 洋
  • $F9::
    Loop
    {
    If Not GetKeyState("F9", "P")
    Break
    Send {x Down}
    Sleep 20
    Send {x Up}
    Sleep 20
    }
    Return

    蕭大:上面您寫的數據如我改成F9是觸發.要按著F9才能連發.
    請問如要改成只要按F9是開啟(再按一下也是關閉)x連發.不
    用手一直按著.可否指導修改哪. 先向您說聲謝謝!
    哪.
  • 已經增加補充在原文囉

    蕭雲 replied in 2013/04/23 01:57

  • 估
  • 請問怎麼讓AutoHotkey全部復原 因為數具有打錯 所以開不起來 右下方都沒有圖是出現 從安裝一樣不行
  • 你的意思是重安裝後仍然無法開啟AutoHotKey?
    沒有出現任何錯誤訊息嗎?

    蕭雲 replied in 2013/05/05 00:20

  • Jackwu
  • 我想要讓鍵盤右邊的數字鍵2變成發連發該如何使用?謝謝~
  • 前面的留言其實有提到了
    把指定的按鍵改成Numpad2就可以了

    蕭雲 replied in 2013/05/05 00:50

  • 訪客
  • 我想按s連發 是按著才會觸發 這樣寫對嗎
    $s::
    Loop
    {
    If Not GetKeyState("s", "P")
    Break
    Send {s Down}
    Sleep 20
    Send {s Up}
    Sleep 20
    }
    Return
  • 是的

    蕭雲 replied in 2013/06/08 00:47

  • 洋
  • 請問蕭大:底下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其實我設定的太小了,設定大一點對電腦比較沒負擔

    蕭雲 replied in 2013/07/07 15:57

  • 流浪喵
  • 請問蕭大,我用轉.exe的程式,轉出來的卻不是執行檔,是哪邊出問題呢?
  • 不好意思,這個問題太過籠統很難回答
    會不會是你的Destination副檔名沒有加上.exe?
    可以麻煩你對照一下截圖嗎?

    蕭雲 replied in 2013/08/07 09:39

  • XD
  • 請問可以設定案某個鍵後讓左邊的ctrl連發直到再按ㄧ次某鍵??
    很需要^^
    ...
  • 你可以看我4/22的補充
    然後把x改成LCtrl就可以了

    蕭雲 replied in 2013/08/07 09:56

  • 好吧
  • 我裝完之後開不到了...就是有個視窗彈出來有一推英文 完全看不懂- -|||
    小視窗內容:
    Error at line 12.

    Line Text: $a
    Error: Duplicate hotkey

    The program will exit
  • 訊息是說你在12行的地方重覆設定了執行熱鍵a
    能否把整個文件貼上來? 應是你指令沒有貼完整導致程式邏輯出錯

    蕭雲 replied in 2013/09/03 11:32

  • 好吧
  • 但是我不會把整個文件貼上來-.-||
    大大可以教我解決方法嗎
  • 右下角的AitoHotKey圖示按右鍵選擇Edit This Script
    然後把記事本上的所有文字都貼上來

    蕭雲 replied in 2013/09/05 08:02

  • ken32019 .
  • $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
    這是我的腳本你看有錯嗎
  • 我測試的結果可以正常執行

    蕭雲 replied in 2013/09/05 08:04

  • 訪客
  • 大大 我想問一下 啟動熱鍵的問題,假設我熱鍵設成e,我原先遊戲裡的e是一招技能,但是設成熱鍵後,e就會放不出技能,這有把辦法解決?? 簡單說 就是我想把e同時是熱鍵又同時可以發動原先遊戲的技能。
  • 放不出技能的原因是這個按鍵會被AutoHotKey給佔用
    只要在啟動熱鍵的下方加上
    Send {e Down}
    Send {e Up}
    就可以了

    範例
    #MaxThreadsPerHotkey 2

    $e::
    Send {e Down}
    Send {e Up}
    PressKey := ! PressKey
    (下面完全相同)

    蕭雲 replied in 2013/09/16 13:19

  • 訪客

  • 感謝大大 之前在當兵沒回 ,感謝解決我的問題

    BY #29 訪客
  • 不客氣

    蕭雲 replied in 2013/10/03 01:24

  • Private Comment
  • 訪客
  • 請問如果想要使用方向鍵

    按住不放呢??

    不需要連擊

    就像卡鍵那樣~
  • 原文Send {x Down}之後把Send {x Up}拿掉即可
    就變成會一直按住x了
    可以把x改成你想要的方向鍵

    蕭雲 replied in 2014/04/01 00:37

  • 訪客
  • 沒用

    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.
  • 可能是腳本有問題,請檢查看看有沒有語法錯誤

    蕭雲 replied in 2014/04/01 00:44

  • 訪客
  • 請問如果不要連點,而是按下F1開始長按A鍵,再按一次F1結束,這樣要怎麼改?
  • 長按的意思是按住不放嗎?
    因為你的需求太特殊了,目前想不到要怎麼寫
    請自己嘗試看看吧,不好意思

    蕭雲 replied in 2014/04/28 02:09

  • 洋洋
  • 請問蕭大:這篇放技能的說明
    放不出技能的原因是這個按鍵會被AutoHotKey給佔用
    只要在啟動熱鍵的下方加上
    Send {e Down}
    Send {e Up}
    就可以了

    範例
    #MaxThreadsPerHotkey 2

    $e::
    Send {e Down}
    Send {e Up}
    PressKey := ! PressKey
    (下面完全相同)

    底下是我的問題:
    那假如技能要每200秒放一次的話.要加入啥語法.
    可否請蕭大教導一下.感恩~
  • 洋洋
  • 底下是我的問題:
    那假如技能要每200秒放一次的話.要加入啥語法.
    可否請蕭大教導一下.感恩~

    補充:假如有2個技能.每200秒要放一次.要加入啥語法.
    謝謝!請蕭大指教指教~
  • 補充在原文最下面了,請自行修改囉

    蕭雲 replied in 2014/05/06 23:06

  • 瑋 梁
  • 以下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停止計時器之前他應該會持續執行才對
    你可以把時間改短,用在記事本測試看看

    蕭雲 replied in 2014/05/11 23:44

  • so lo
  • ~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之前

    蕭雲 replied in 2014/05/11 23:42

  • so lo
  • 蕭大:不好意思可能你這幾天忙.沒空回.我再重申我的問題.如你有空請幫我看看.
    我想寫一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
    }

    蕭雲 replied in 2014/05/11 23:36

  • so lo
  • 蕭大 首先謝謝你的回覆與教導!
    我意思是有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
    }

    蕭雲 replied in 2014/05/12 12:50

  • so lo
  • 對了蕭大:
    $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: 你前面的留言,我幫你取消悄悄話了
    這樣你才可以看到我的回覆

    蕭雲 replied in 2014/05/12 12:55

  • so lo
  • 謝謝蕭大詳細的解說與教導.我本來以為一按下F9就馬上開起程式按鍵.
    剛試的結果是按F9後要等計時器時間到才會開始啟動循環.難怪之前怎
    麼試都以為沒反應.現已懂了.也更了解此程式語法的奧妙.
    再次謝謝您耐心的詳細教導語解說. 感恩~感恩~
  • 不客氣,有幫助到你就好

    蕭雲 replied in 2014/05/13 12:27

  • 訪客
  • 請問假如我喝水 擺在 QWE
    假如我要設定虛擬的..在啟動之後 有什麼辦法 能別讓他跑出q w e..
    我的意思是 我開啟之後 能正常喝水正常聊天
    有辦法嘛
  • 不好意思我真的看不懂你在說什麼
    不過原文我有設定暫停熱鍵F3
    也就是平常按X會連打,但按下F3後這個腳本就會暫停不使用
    等到再度按下F3才會繼續作用
    這樣就可以解決腳本占用平常操作鍵的問題

    蕭雲 replied in 2014/08/17 14:14

  • Miko Lin
  • 蕭大您好歐~
    請問一下,我想要按住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改成你指定的開始跟結束按鈕

    蕭雲 replied in 2014/09/01 00:43

  • 訪客
  • 不好意思 這是只能一種鍵 連按嗎? 可以^X^X 或 ^Z^Z 或^^Z 或 ^^X 就是方向鍵加上一種鍵 無限循環這樣有辦法嗎? 感謝您。
  • 你的需求建議是使用我6/22補充的啟動跟關閉計時器的方式來做
    function中改成下方語法即可(可自行修改內容,如要改成按下z就把x改成z即可)
    Send {Up Down}{Up Up}
    Send {x Down}{x Up}
    return

    蕭雲 replied in 2014/10/15 23:12

  • 小祁 蒼
  • 蕭大您好,我想按@或#後 接著可以按出R跟F的腳本...查了很久大多都是分享同一鍵連發的..有這種按一鍵可以接著放出不同鍵的嗎?
  • 可以改成這樣
    以@起頭,R F每0.1秒連發,如果中途按下z自動停止(可自行修改)

    $@::
    Loop
    {
    If GetKeyState("z", "P")
    Break

    Send, R
    Send, F
    Sleep 100
    }
    Return

    蕭雲 replied in 2014/11/12 22:24

  • 洛神
  • 請問判斷顏色要怎麼寫
    血顏色是紅色
    當紅色不等於紅色時即按Q
    妳會寫嗎
    我有看到一個指令
    PixelGetColor
    可以交一下嗎
  • http://www.autohotkey.com/docs/commands/PixelGetColor.htm

    PixelGetColor, OutputVar, X, Y [, Alt|Slow|RGB]
    第一個參數是變數名稱
    第二第三是座標
    比方說寫
    PixelGetColor, color, 100, 23
    就會抓取(100, 23)的顏色存到color這個變數中

    蕭雲 replied in 2014/11/12 22:14

  • 洛神
  • 我再說明白一點好了
    例如按鍵精靈裡有一個是 如果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 強制關閉

    蕭雲 replied in 2014/11/12 22:11

  • 洛神
  • 這段程式碼 不是沒反應就是一直按
    我這樣寫對嗎
    然後正確的抓座標跟顏色你會用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測試時是可以正常取色的
    遊戲是怎麼處理我就不清楚了
    沒幫上忙不好意思

    蕭雲 replied in 2014/12/04 22:56

  • 流亡
  • 請問關於抓色自動判斷有
    我抓取顏色0x1F1E2D 當不是這個顏色時才自動按鍵嗎
    上面的腳本好像是抓取顏色直接觸發
    有抓取顏色當不是這顏色時才觸發的指令嗎
  • 不是的話就把=改成!=就可以了啊...

    蕭雲 replied in 2014/12/04 22:57

  • ghostxi
  • 請大大幫忙,我一直出錯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即可

    蕭雲 replied in 2014/12/04 23:03

  • 花歌
  • 請問要移動滑鼠的時候能控制他的速度嗎
    讓她慢慢移動到這個位置
    然後慢慢的點擊左鍵

    MouseMove, 520, 520
    MouseClick, Left



    我找到一個..能用嗎...具體應該怎麼加進去...我都腳本錯誤
    SetDefaultMouseSpeed,0 ; 速度0~100


  • 你找到的方法我測試是不會有問題的
    不過你輸入的那一行,逗號是全形,這樣子當然是不行的
    提供我測試的範例給你參考

    ~F9::
    {
    SetDefaultMouseSpeed, 50
    MouseMove, 50, 50
    return
    }

    蕭雲 replied in 2015/01/02 23:34

  • 訪客
  • 不好意思請問一下
    我只是把AutoHotKey.ahk的文字清空關閉時不小心存檔
    之後就完全打不開AutoHotKey.ahk了
    重新安裝之後還是一樣
    所以就用記事本把他開起輸入我要的Script
    但是無論怎麼改AutoHotKey.ahk的內容都無效
    重裝也不會產生新的Script
    請問這種情形該怎麼辦?
  • 不太了解你的意思...
    打不開指的是有出現什麼錯誤訊息嗎?
    我嘗試把內容清空也不會有錯誤訊息
    此外我測試過如果把AutoHotKey.ahk刪掉
    打開AutoHotKey時他就會詢問是否要產生一個範本檔
    請試著刪除看看

    蕭雲 replied in 2015/02/05 00:45

  • Hi
  • 我設置了Space::F2
    因為空白鍵對我來說比較好按!
    但是打字時需要空白鍵的功能, 縮小視窗關掉Hotkey實在太麻煩!
    想問你有沒有按下F1後啟動Space::F2的功能, 再按一次F1關閉該功能的腳本?
    謝謝你!
  • 你可以像我的範例一樣在最前面加上

    ~F1::suspend

    這樣按下F1後這個腳本就會被暫停執行了

    蕭雲 replied in 2015/02/05 00:50

  • 吉祥瑞雲
  • 謝謝你的教學^_^ 感謝~
  • 謝謝你的回覆喔

    蕭雲 replied in 2015/03/16 00:08

  • 神
  • 請問一下喔
    按住ALT再按鍵盤左邊的2要怎麼寫
    我怎麼寫他都只按!2而已
    但!不是ALT嗎 他只會按!不是按ALT
    然後記得放開 我要循環腳本的
    F5開始 F6暫停或結束
    謝謝
  • http://www.autohotkey.com/docs/commands/Send.htm
    要按Alt+2請使用
    Send !{fNumpad2}

    其餘循環腳本請參考本文˙

    蕭雲 replied in 2015/03/16 00:03

  • 神
  • 妳真是個好人
    再請問一下
    MouseMove, 451, 391, 50,R
    要怎麼只移動上面一點點就好
    R移動太多了 R要怎麼設 我只要他單純往上一點點
  • http://www.autohotkey.com/docs/commands/MouseMove.htm
    R指的是從目前的座標移動
    所以你如果只是要往上一點,改成
    MouseMove, 0, 10, 50, R
    即可

    蕭雲 replied in 2015/03/16 00:14

  • 訪客
  • 要如何在腳本內執行腳本呢?
    例如我有一個腳本F11::................
    又有另一個腳本F12::.............send {F11 down}{F11 up}

    可是這樣無效, F11不會自動執行
    請問是哪裡出錯了?
    謝謝你
  • 你好,我測試一個簡單範例是可以的,你要不要再試試看呢?

    $x::
    {
    Send {y Down}
    Send {y Up}
    }

    $y::
    {
    Send {z Down}
    Send {z Up}
    }

    以上範例按下x後會出現"yz"

    蕭雲 replied in 2015/03/15 23:55

  • 想翔
  • 版大的用心真的令人欽佩
    推薦Sikuli這套軟體供版大介紹
    可以用截圖的方式編寫腳本
    非常好用
  • 謝謝你的推薦!
    我有機會的話會試試看的

    蕭雲 replied in 2015/04/28 21:43

  • david
  • 大大 你F9那個腳本
    按F9是可以開始
    但再按F9 可不能結束喔
    是什麼回事?
  • 我這邊測試確定是可以正常執行的 (by記事本)

    蕭雲 replied in 2015/05/13 20:13

  • 遙
  • 大大,我想問,我該如何寫以下我想要的,能否指教?

    我想作的是. . .

    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}

    蕭雲 replied in 2015/05/13 20:29

  • 熊
  • 請問大大,我安裝以後,沒有出現H圖示,到程式集點開H圖示,好像是跳使用手冊出來,不知道該怎麼使用阿...
  • 看看你有沒有找到這個檔案 (64-bit版本)
    C:\Program Files\AutoHotkey\AutoHotkey.exe
    如果沒有的話建議重裝吧

    蕭雲 replied in 2015/06/01 21:20

  • 瓜
  • 請問一下 這是只能連按,不能按住的嗎?
  • 如果你只要按住的話,直接按住就好啦,不用寫腳本

    如果你真的需要腳本按住的話的話
    傳送Down指令即可
    Send {Shift Down}
    以上就是按住Shift的意思

    蕭雲 replied in 2015/06/01 21:21

  • 奶頭
  • 你好~我是奶頭
    因為遊戲被改透明化 所以測不到色 (不是網頁遊戲)
    請問AHK能不能遊戲截圖再從圖中判斷顏色呢
    類似按鍵精靈這樣 先抓圖在固定判斷點的顏色呢
    如何實現呢
  • AHK主要只有抓圖功能,你想抓圖後判斷我就不清楚要怎麼實作了
    http://www.autohotkey.com/board/topic/91585-screen-capture-using-only-ahk-no-3rd-party-software-required/
    我覺得應該想辦法直接取得顏色比較好
    如果遊戲透明化抓不到色。為什麼截圖下來就不˙透明了呢?

    蕭雲 replied in 2015/06/09 22:59

  • 麈粒
  • 可以幫我做一個按c的檔嗎?速度80 感謝!
  • 請問是我說明寫得不好讓你不知道怎麼改嗎?
    我覺得自己改快多了

    ~F3::suspend
    $c::
    Loop
    {
    If Not GetKeyState("c", "P")
    Break
    Send {c Down}
    Sleep 80
    Send {c Up}
    Sleep 80
    }
    Return

    蕭雲 replied in 2015/06/14 21:25

  • 訪客
  • 大大 請問我想單純按左編鍵盤1~9 非數字鍵那排 想要放技能可是設定全部都打又編鍵盤的數字 有辦法解決嗎
  • 如果是想輸出左邊的數字鍵,直接用1~9
    如果是右邊按下NumLock後的數字鍵,用Numpad1~Numpad9
    改法請參考本文,把輸出鍵換掉即可

    蕭雲 replied in 2015/06/19 09:24

  • 訪客
  • 蕭大問哦 按鍵精靈這樣設定的
    鍵盤 按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

    蕭雲 replied in 2015/06/19 09:32

  • 飛機
  • 大大不好意思請問一下

    ~F3::suspend
    按d 執行 按住d持續500毫秒
    按c 執行 按住c持續600毫秒
    按d+方向鍵下 執行 按住d+方向鍵下持續300毫秒
    按c+方向鍵下 執行 按住c+方向鍵下持續400毫秒

    要怎麼寫
  • 我覺得這種需求根本不用寫腳本
    直接按住X毫秒不就好了嗎?

    如果你真的很需要的話,請參考上面一個留言自行嘗試囉

    蕭雲 replied in 2015/06/21 23:22

  • 大大請問
  • 大大請問, 該如何設定兩組連射

    在不同情況下可能需要不同按鍵的連射

    請問有辦法做設定嗎
  • 你可以把$x::到return這一段複製
    貼到下方後改按鍵,即可設定多組囉

    蕭雲 replied in 2015/07/01 11:37

  • diary82621
  • 請問大大 我從最上面你的本文 一路看留言下來
    也謝謝蕭大讓我學了很多 真的覺得這很有趣
    然後是我的問題 我有辦法在一串腳本中 使用另一個腳本嗎?
    例如上面說的
    $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這樣

    蕭雲 replied in 2015/07/02 20:56

  • 訪客
  • 大大您好 一整串看下來真的收益良多 很感謝大大這樣的無私分享
    也成功的做出想用的腳本了
    現在想要請問大大
    就是說希望做出 類似偵測字母應對輸入這樣

    因為以前用按鍵精靈有寫過首抽腳本 跳出非特定圖案既重頭迴圈
    所以想請問如何偵測圖案 做下一步指令
  • 你可以使用ImageSearch的搜尋圖片方法
    http://ahkscript.org/docs/commands/ImageSearch.htm
    因為官網範例寫得很清楚了,所以我就不多作解釋了
    請試著看英文囉

    蕭雲 replied in 2015/07/02 20:59

  • diary82621
  • 謝謝蕭大的回覆 也謝謝你解釋的這麼清楚
    不過我本身沒學過那些 是真的看得很吃力哈哈
    我會再自己透過研究測試去了解 有問題再來請教您囉
    然後蕭大本身就是學這一科的嗎
    如果像我這種很有興趣的外行人 有甚麼方法可以去學呢?
  • 我是學這一科的沒錯
    這種script其實跟一般程式語言差不多
    只差在語法有些不同(例如宣告變數方式、方法名稱)
    所以有程式底子的話觀念是通用的

    其實程式設計的進入門檻非常低
    許多程式設計師都不是專業背景(多的是數學系甚至醫學系寫程式)
    我其實對AHK的script也不是很熟
    但只要查詢AHK提供的文件跟範例,並沒有那麼難寫
    所以建議你是先有程式邏輯的概念(例如學習一種入門語言)
    加上不逃避閱讀文件
    寫script也就沒那麼困難了

    蕭雲 replied in 2015/07/07 23:45

  • weishin
  • 請問大大:腳本寫好後,在筆記本上測試有執行成功,但為何進遊戲後卻無法執行功能,是否和XP系統有關 。。
  • 可能原因是遊戲有擋這種按鍵精靈式的程式發送鍵盤事件
    (可嘗試用同類型軟體測試)
    或是AutoHotKey需要系統管理者權限執行
    不過你是XP一般來說應不需要...

    蕭雲 replied in 2015/07/07 23:48

  • Su yi fan
  • 版大你好!試問如果我要按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
    }

    蕭雲 replied in 2015/07/15 21:27

  • 橘子
  • 板大你好!
    我最近在學習用這個軟體寫腳本!
    想請問~
    開頭的 #MaxThreadsPerHotkey 2
    尾巴的 #MaxThreadsPerHotkey 1

    尾巴那的值設 1 是什麼意思?! 頭跟尾是有相呼應才這樣設的嗎?!

    謝謝喔=ˇ=
  • 我直接貼以下網址的說明給你看
    其實你直接查官網的說明文件,會比來這詢問等回覆更快
    http://ooopscc.com/autohotkey/AutoHotkey-zh_CN/docs/commands/_MaxThreadsPerHotkey.htm
    ---
    如果一個熱鍵的此限制為1, 那麼當它的子程序在運行時再次按下這個熱鍵, 那麼鍵擊會被忽略. 這有助於防止意外的重複按鍵
    ---

    蕭雲 replied in 2015/07/15 21:23

  • 橘子
  • 想在請教板大!

    我現在是讓我的遊戲角色,在地圖的某個點打怪~

    我想新增~讓角色去找NPC說話,可是打怪的地方跟NPC的位置有很遠的距離!

    請問有尋找遊戲地圖裡的座標指令嗎?! 我試著用mouseclick,但他只能click目前視窗的座標,而非遊戲本身裡的座標.

    NPC的位置在遊戲地圖座標的(0,0),使用mouseclick,0,0,游標會跑到遊戲視窗的左上角原點,而非游戲座標!

    請問這問題有指令可以解決嗎?!=口= 謝謝! 我翻了說明書,這問題還是卡了很久!
  • 請問遊戲本身有沒有全螢幕的設定?
    如果有的話(0,0)應該會變成遊戲座標
    如果沒有的話,直接把座標x,y加上視窗原點應該可以吧?
    例如把視窗移到畫面左上角然後click (6,30)這樣?

    蕭雲 replied in 2015/07/17 21:40

  • JK
  • 版大您好
    我寫了一個程序
    要刷 右鍵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解決

    蕭雲 replied in 2015/07/17 22:23

  • Su yi fan
  • 版大
    在此感謝你撥空回復幫助我。我的問題依然存在

    我a~z循環3次0~9循環1再返回a~z循環這樣

    執行第一個循環3次,在執行第2個循環1次,再回第一個循環在第二這樣
  • 我不太懂你的問題在哪
    Loop是可以寫成巢狀結構的啊
    包兩層Loop不是就行了嗎?

    $F9::

    Loop
    {
    Loop, 3
    {
    ;Do something
    }
    Loop, 1
    {
    ;Do something
    }
    }
    Return

    蕭雲 replied in 2015/07/21 22:24

  • suck
  • 獲取顏色 代碼要搭配
    MouseGetPos
    因為螢幕上的顏色跟滑鼠上的顏色判定好像不同
    我也是弄很久才搞懂得
  • 謝謝你的分享

    蕭雲 replied in 2015/08/03 22:01

  • suck
  • 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
    可以用這個來測試
    滑鼠座標顏色
  • Miko
  • 版大你好喔~
    新手請教,我想寫一個巨集~
    按下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
    }

    蕭雲 replied in 2015/08/05 22:22

  • Miko
  • 版主大大~
    真的很感謝您的指點,
    對於完全沒碰過程式語言的我,
    自學沒人可以問真的有點吃力,>"<
    好在大大沒有放棄我~
    超級感謝~
  • 不用客氣,謝謝你專程回覆

    蕭雲 replied in 2015/08/09 21:39

  • Damn
  • 請問為什麼安裝完後點run右下角都沒出現H的符號,這樣要怎麼打開記事本呢?小弟系統win7 x64
  • 有種情況會發生run後沒有H符號
    就是你的AutoHotKey script是空的
    他沒有任何可以執行的script就不會啟動

    解決法就是在我的文件下產生一個AutoHotkey.ahk
    隨便給個執行後會進行等待按鍵的內容,如
    $b::
    return
    再看看會不會沒出現

    蕭雲 replied in 2015/08/14 20:54

  • Gxaz Xyyz
  • 你好 我想問一下 我在官方論壇 找到個遊戲的 無後座力跟快速射擊的腳本
    但是 好像無法正確使用 按照說明點擊start或腳本啟動熱鍵後 滑鼠左鍵點擊就會無效
    只有滑鼠會一直往下移 請問有辦法解決嗎???http://www.autohotkey.com/board/topic/115326-generic-recoil-rapid-fire-manager/
  • 不好意思...因為我沒有玩這個遊戲
    我下載回來執行也沒有反應,所以沒法幫你測試
    請自己加油囉

    蕭雲 replied in 2015/08/17 20:26

  • Gxaz Xyyz
  • 我的系統是windows 10 10240 不知道是不是跟系統不相容的關係?
  • 0.0
  • 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. 我建議還是用文章內的的按住鍵盤某按鍵或是開關式的比較好

    蕭雲 replied in 2015/08/24 20:28

  • 訪客
  • 辛苦了~板大真的很認真回答大家的問題
    想請問一下我設定loop7次在記事本測試時確實打出7個w
    遊戲內卻只打3~5個
    是怎麼回事呢
  • 雖然我不清楚你是玩哪一款遊戲
    但我想應該是遊戲沒辦法這麼快接收按鍵資訊
    請試著把按鍵間的等待時間拉大一點試試看

    蕭雲 replied in 2015/08/28 22:21

  • 訪客
  • 版大我想請問 我是套用以下這個腳本
    ~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}

    蕭雲 replied in 2015/08/28 22:34