最新版AutoHotkey的編碼變更

真是糟糕!家裡用的筆記型電腦重新安裝Windows XP後,同時更新Autohotkey_L為2012年8月的 1.1.08.01最新版後,原有的腳本檔就發生異常無法正確讀取並執行了!

今天抽空看了一下文件,原來腳本檔的存檔編碼必須變更為「UTF-8加簽名(BOM)」,我將腳本檔和include的所有腳本檔都另存成上述編碼後才告正常。

Autohotkey UTF-8 with BOM

1.1.08.00版有多項修改,如果另存編碼格式後仍有問題的話,務必先讀一下Autohotkey的Help(AutoHotkey.chm,主題:Changes & New Features)。

##

您可能也會有興趣的類似文章

簡睿

服務於軟體業的資訊老兵。興趣廣泛,學習力佳,樂於分享所知所學。

您可能也會喜歡…

15 個回應

  1. 表示:

    簡大:還有如轉成exe檔成功後.把設定檔傳到沒安裝AutoHotkey的電腦後.以後要怎開啟AutoHotkey的exe檔案.是否可教一下. 謝謝您!

  2. 表示:

    簡大您好:我照您底下指示部奏輸入後.

    進入命令提示字元 (cmd.exe),再輸入下列指令就能產生 你的autohotkey.exe:

    cd “C:\Program Files\AutoHotkey\Compiler”
    ahk2exe /in 你的autohotkey.ahk

    後在命令提示字元出現這視窗:
    Microsoft windows XP [版本 5.1.2600]
    Copyright 1985-2001 Microsoft Corp.

    C:\Documents and Settings\user01>cd “C:\Program Files\AutoHotkey\Compiler”

    C:\Program Files\AutoHotkey\Compiler”
    ahk2exe /in 你的autohotkey.ahk(註:這有一小點一直閃)

    接著要再輸入啥字可再告知嗎?

    還有您說的ahk2exe /? 會顯示參數選項(我不懂要輸入啥).

    實在很抱歉.要您教一個電腦白癡操作與學習.
    再次向您說聲抱歉與謝謝!

  3. 表示:

    關於簡大發過的如何將AutoHotkey腳本轉換成設定檔:

    Ahk2Exe.exe 把腳本檔產生成執行檔的工具,以方便沒有安裝AutoHotkey系統的環境能用執行檔直接執行。
    Ahk2Exe.exe是命令列指令,語法如下:
    ?
    雙擊全選程式碼
    001
    Ahk2exe.exe /in “test1.ahk” /icon “test1.ico”

    以上是您發的.我研究了幾天.還是看不懂又想學.是否可以請您發個轉換成設定檔的教學流程.來讓我們這些剛開始研究AutoHotkey的生手又不是本科來學學.等您有空在做.畢竟已麻煩您多次. 也再次向您說謝謝!

    • 簡睿表示:

      在C:\Program files\Autohotkey\compiler 資料夾裡有Ahk2Exe.exe,透過它可以把寫好的 .ahk 檔案變成 .exe 執行檔,有了這個.exe不用安裝AutoHotkey系統也能執行寫好的操作。如果要使用的電腦和寫Autohotkey的是同一台電腦,那直接執行.ahk檔案就可以,不必用ahk2exe來產生執行檔。

      進入命令提示字元 (cmd.exe),再輸入下列指令就能產生 myfile.exe (假設你的.ahk是 c:\test\myfile.ahk):

      以下每行輸入完畢後按 Enter。

      cd "C:\Program Files\AutoHotkey\Compiler"
      ahk2exe /in c:\test\myfile.ahk
      

      myfile.exe會產生在 C:\Program Files\AutoHotkey\Compiler 資料夾裡,把myfile.exe拷貝到別台電腦(例如放到桌面或c:\windows資料夾等),用檔案總管找到myfile.exe後雙擊執行,若在右下角的系統匣區域能看到Autohotkey的綠色的H,就表示執行成功,則你的F9、F10就能操作了。

      ahk2exe /? 會顯示參數選項。

      另外,請先看看 輕鬆學會彈指神功-揭露AutoHotkey絕技 這篇入門文章。

  4. 表示:

    簡大謝謝你的指導. 感恩!

  5. 表示:

    $x::
    Loop
    {
    If Not GetKeyState(“x”, “P”)
    Break
    Send {x Down}
    Sleep 20
    Send {x Up}
    Sleep 20
    }
    Return

    簡大您好:上面數據是我在某論壇看到的連發函數.這函數要一直用手按著x鑑才可連發.請問您如要修改成按另一個按鍵就可連發.不用手一直按著.然後要停時再按另一個按鍵即可停止.要修改哪個部分.是否可請簡大教導或幫修正. 先向您說聲謝謝!

    • 簡睿表示:

      If那行改成為 If GetKeyState(“F10″, “P”) 就可以按F10停止迴圈了。

      網頁顯示的雙引號不對,請自己修改。

      • 表示:

        謝謝簡大的指導.能否再次請教.您所說的(網頁顯示的雙引號不對).

        我才剛摸索.是否可以明示哪個是(網頁顯示的雙引號).要怎麼修改.

        您如有空是否可大約指教一下. 感恩~

        • 表示:

          還有我剛照您所說修改成:

          $F9::
          Loop
          {
          If Not GetKeyState(“F10”, “P”)
          Break
          Send {x Down}
          Sleep 20
          Send {x Up}
          Sleep 20
          }
          Return

          本來按住F9時X就可連擊.修改後按F9.AutoHotkey的X按鍵卻完全無回應?哪出錯?可否再次向您請益?
          因家裡小朋友有玩小遊戲.連擊時常要按住F9.又要操作鍵盤方向鍵.所以向您請益是否可修改成.按一下F9按鍵就可以一直自動連續射擊.這樣就可只操作方向鍵.等要停時在按F10來停止射擊.
          再次說聲抱歉.望你不吝指教….也再次向你說聲謝謝!

  6. cooltimes表示:

    博主你好 我用autohotkey对 VMware Player虚拟机进行 后台空格操作 我用虚拟机里面的TXT文档测试 但是不好使
    不知问题出在哪里 这是我的代码

    #MaxThreadsPerHotkey 3
    F9::
    #MaxThreadsPerHotkey 1
    if KeepF9Running
    {
    KeepF9Running := false
    return
    }
    KeepF9Running := true
    Loop
    {
    ControlSend, , {Space down} , Windows XP Professional – VMware Player (Non-commercial use only),,,
    sleep 600
    ControlSend, , {Space up} , Windows XP Professional – VMware Player (Non-commercial use only),,,
    sleep 600
    if not KeepF9Running
    break
    }
    KeepF9Running := false
    return
    望指正 谢谢

  7. amnesiac表示:

    博主原来的脚本我想一定是UTF-8 without BOM,所以升到 1.1.08 后出问题(Scite4AutoHotkey的UTF-8编码默认不带BOM)。
    使用UTF-8才能中文输出是另一个误解,实际上使用系统默认编码也可以输出中文(这里也是直接输出,而无需用编码转换等其他方法)。
    有两种情况必须使用UTF-8 带 BOM 才可确保不出编码问题:一为脚本中含有除系统默认代码页中字符外的其他字符,例如简中系统但脚本中含有德文,二为脚本需在非原来默认代码页中的系统中执行,例如某脚本需要在简中系统和日文系统中执行。当然,如果脚本中只含有英文字符(ASCII字符集),那么用什么编码我想都不会出问题。
    AutoHotkey中文论坛中有一篇帖子对于编码问题讲解的比较详细,然而这几天打不开,遗憾。

  8. amnesiac表示:

    博主的看法不全面,实际上脚本可以为ANSI或UTF-8编码或其他编码,但若使用UTF-8编码时则必须加上BOM。所以这样的变更对后面的情况有影响:一是使用Unicode构建且脚本为UTF-8编码但不含BOM的脚本,实际上若不含BOM的文本在大多数程序中都使用系统默认代码页,所以这种变更是合理的。此前由于编码的原因而给新手带来的大量问题也是促使进行这样变化的原因。
    一些程序以UTF-8保存文件时默认不带BOM是这种问题产生的原因。

    • 簡睿表示:

      既然用了Autohotkey_L 當然就是要用UTF-8,不然中文如何輸出?

      我遇到的問題是原本運作得好好的UTF-8 scripts,一升級後就出錯了,最簡單的解決方法就上再存 BOM了。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *