AutoHotkey v2のGUI、ランチャーソフトとしていかが?

IT

AutoHotkeyは、Windows環境でスクリプトを使ってタスクを自動化したり、カスタムツールを作成するための非常に便利なツールです。前回はAutoHotkey v2の基本的な使い方をご説明しましたが、今回はAutoHotkey v2のGUIの作成方法について、サンプルスクリプトを見ながら説明していきます。アイディア次第でオリジナルランチャーとしても使用できますよ。

①このページでは、AutoHotkey v2のGUIの作成方法がわかります。
②AutoHotkey v2のGUIを扱うサンプルスクリプトを用意しています。


先にAutohotkeyの基本を知りたい場合は、次の記事をご参照ください。


AutoHotkeyのGUI作成の基本的な流れ

 出典:AutoHotkey.com

AutoHotkeyのGUI作成の流れは次の通りです。

  1. GUIオブジェクトの作成:
    Gui()関数を使用して、GUIオブジェクトを作成します。
    例:GuiObj := Gui()
  2. GUI要素(コントロール)の追加:
    GUI内に表示する要素(ボタン、テキストボックス、リストなど)をGUIオブジェクトのAddメソッドを使用して追加します。
    例:Button := GuiObj.Add(“Button”, “Default”, “OK”)
  3. イベントハンドラーの設定:
    ボタンのクリックやテキストボックスへの入力などのイベントに対応するアクションを設定します。
    例:Button.OnEvent(“Click”, ButtonAction)
  4. GUIの表示:
    Show()メソッドを使ってGUIオブジェクトを表示します。
    例:GuiObj.Show(“w400 h300 Center”)
  5. 閉じるイベントの設定:
    ウィンドウが閉じられたときの処理を設定します。閉じる際にリソース解放や終了処理を実行できます。
    例:GuiObj.OnEvent(“Close”, GuiClose)

AutoHotkeyでよく使うGUIコントロールとオプション

1. コントロールの種類

主なGUIコントロールを示します。どのコントロールも事前にMyObj := Gui() で作成したGUIオブジェクトにAddメソッドで追加して使用します。

種類説明使用例
Textラベル用のテキストMyGui.Add(“Text”,, “Please enter your name:”)
Editテキスト入力用のボックスMyGui.Add(“Edit”, “r9 vMyEdit w135”, “Text Test.”)
ButtonボタンMyBtn := MyGui.Add(“Button”, “Default w80”, “OK”) MyBtn.OnEvent(“Click”, MyBtn_Click) ; クリックされたときにMyBtn_Clickをコールします。
CheckboxチェックボックスMyGui.Add(“CheckBox”, “vShipToBillingAddress”, “Ship to billing address?”)
RadioラジオボタンMyGui.Add(“Radio”, “vMyRadioGroup”, “Wait for all items to be in stock before shipping.”)
ListBoxリストボックスMyGui.Add(“ListBox”, “r5 vColorChoice”, [“Red”,”Green”,”Blue”])
DropDownListドロップダウンリストMyGui.Add(“DropDownList”, “vColorChoice”, [“Black”,”White”,”Red”])

詳しくは、AutoHotkey 公式サイトのGUIコントロールページをご覧ください。

2. サイズと配置のオプション

上記のいくつかのコントロールの使用例でも出てきていますが、コントロールはサイズや配置を指定する事ができます。主なオプションを説明します。

オプション説明
wNNN幅を指定(例: w300
hNNN高さを指定(例: h200
xNNNX座標を指定
yNNNY座標を指定
Centerウィンドウを画面中央に配置

Autohotkey v2のGUIのサンプルスクリプト

(基本編)ホットキーで起動する簡単なGUIのサンプルスクリプト

早速簡単なGUI作成を行います。後でこのGUIの応用編もご覧いただきますので、ここでしっかり基礎を抑えましょう。
以下のスクリプトでは、Ctrl+Shift+Gを押すと入力ボックスとボタンを備えたシンプルなGUIが起動します。

サンプルスクリプトのGUIの仕様
  • Ctrl+Shift+Gを押すと入力ボックスとボタンを備えたGUIが起動します。
  • 検索用GUIの入力ボックスは、編集可能です。
  • Enterキーでボタンを押下できます。
  • このGUI画面内のボタンを押下すると、入力されたテキストを読み取り、メッセージボックスを表示します。
作成したGUIイメージ

次のソースを.ahkファイルに張り付けてください。

; グローバル変数としてGUIオブジェクトを宣言
global MyGui := ""

; ホットキーを設定(例:Ctrl + Shift + G)
^+g::
{
    global
    ; GUIがまだ作成されていない場合のみ作成
    if !IsObject(MyGui)
    {
        ; 新しいGUIを作成
        MyGui := Gui()  
        MyGui.OnEvent("Close", GuiClose) ; GUIが閉じられた時の処理
        MyGui.SetFont("s10") ; フォントサイズを設定

        ; コントロールを追加
        MyGui.Add("Edit", "vs_Word w400", "AutoHotkey v2のGUIです。")
        gcMyGuiButton := MyGui.Add("Button", "Default Section", "ボタン")
        gcMyGuiButton.OnEvent("Click", ButtonAction) ;Default Selectionは、Enterで実行されるボタンであり、ボタンが選択状態になるわけではない。
        
    }

    ; GUIを表示またはアクティブ化
    MyGui.Show("w500 h100")
}

; ボタンがクリックされた時のアクション
ButtonAction(*)
{
    oSaved := MyGui.Submit()
    MsgBox(oSaved.s_Word)
}

; GUIが閉じられた時の処理
GuiClose(GuiObj)
{
    GuiObj.Destroy() ; GUIオブジェクトを破棄
    MyGui := "" ; グローバル変数を空文字列に設定(または削除)
}

スクリプトの解説

  • global MyGui := "": グローバル変数MyGuiを宣言し、空文字列で初期化します。グローバル変数はスクリプト全体でアクセス可能です。重要なのは、ここでは宣言のみ行っていることです。オブジェクトの代入はGUI作成時まで遅延させます。これが以前のエラーを解消する鍵となります。
  • ^+g::: Ctrl + Shift + Gの組み合わせをホットキーとして定義します。このキーを押すと、続くブロックのコードが実行されます。
  • ホットキーサブルーチンのglobal: ホットキーサブルーチン(^+g::で始まるブロック)の先頭にglobalキーワードを記述することで、サブルーチン内でMyGuiをグローバル変数として使用することを明示的に宣言しています。これにより、サブルーチン内でMyGuiがローカル変数として扱われるのを防ぎます。
  • if !IsObject(MyGui): MyGuiがオブジェクトでない(つまり、GUIがまだ作成されていない)場合にのみ、GUIの作成処理を行います。これにより、GUIが重複して作成されるのを防ぎます。
  • MyGui := Gui(): 新しいGUIウィンドウを作成し、そのオブジェクトをMyGuiに代入します。ここで初めてMyGuiがオブジェクトになります。
  • MyGui.OnEvent("Close", GuiClose): GUIウィンドウが閉じられたときに実行する関数としてGuiCloseを指定します。
  • MyGui.SetFont("s10"): GUIのフォントサイズを10に設定します。
  • MyGui.Add("Edit", "vs_Word w400", "AutoHotkey v2のGUIです。"): GUIにEditコントロール(テキスト入力欄)を追加します。vs_Wordは変数の関連付けを指定し、後でMyGui.Submit()でこのコントロールの内容を取得するために使用します。w400は幅を400ピクセルに設定します。
  • gcMyGuiButton := MyGui.Add("Button", "Default Section", "ボタン"): GUIにボタンを追加します。Default Sectionを指定することで、Enterキーを押したときにこのボタンが押されたのと同じ動作になります。戻り値を変数gcMyGuiButtonに格納しています。
  • gcMyGuiButton.OnEvent("Click", ButtonAction): ボタンがクリックされたときに実行する関数としてButtonActionを指定します。
  • MyGui.Show("w500 h100"): GUIウィンドウを表示します。w500 h100で幅500ピクセル、高さ100ピクセルに設定します。
  • ButtonAction(*): ボタンがクリックされたときに実行される関数です。MyGui.Submit()でGUIコントロールの内容を取得し、oSaved.s_WordでEditコントロールの内容を取得してメッセージボックスに表示します。(*)はパラメータを受け取ることを示していますが、ここでは使用していません。
  • GuiClose(GuiObj): GUIウィンドウが閉じられたときに実行される関数です。GuiObj.Destroy()でGUIオブジェクトを破棄し、MyGui := ""でグローバル変数を空文字列に設定します。これにより、メモリリークを防ぎます。

スクリプトの実行

スクリプトを保存後、Ctrl + Shift + Gを押すとGUIが表示されます。テキストボックスに文字を入力し、「ボタン」をクリックすると、入力した文字列がメッセージボックスに表示されます。

ポイント:

  • globalキーワードの適切な使用: ホットキーサブルーチン内でグローバル変数を使用する場合は、サブルーチンの先頭でglobalキーワードを使って明示的に宣言する必要があります。
  • GUIオブジェクトの遅延生成: GUIオブジェクトの生成は、実際にGUIを表示する必要があるまで遅延させることで、不要なオブジェクトの生成を防ぎ、スクリプトの効率を高めます。
  • OnEventによるイベントハンドリング: OnEventメソッドを使用することで、GUIコントロールのイベント(クリック、クローズなど)に対する処理を簡単に記述できます。

(応用編)Ctrl+Fの検索機能を拡張するGUIのサンプルスクリプト

Windowsの多くのアプリケーションはCtrl + Fのショートカットキーで検索機能が有効になります(「F」はFindの頭文字ですね)。このショートカット機能を拡張して、Ctrlを押下しながらFキーを2連続押下するとGoogle検索に遷移できるGUIを立ち上げるホットキーを作ってみましょう。
またGUI画面のサイズやボタン数は自由に設定できますので、ランチャーの役割も担う事が出来ます。ランチャーソフトを使用している方は、今後はAutoHotkeyに一本化してはいかがでしょうか。

サンプルスクリプトのGUIの仕様
  • Ctrlを押しながらFキーを2連続で押下すると検索用GUIが起動します。
  • Ctrlを押しながらFキーを1回押下し、0.2秒立っても2回目のFが押下されなかれば、通常の検索ショートカットキーとして機能します。
  • 検索用GUIの入力ボックスには、ホットキー押下前に反転させていた文字が入ります。
  • ただし反転させていた文字が無い場合は、カーソルが存在した行の文字列が入ります。(文字を編集可能なアプリケーション上でのみ有効な機能)
  • 検索用GUIの入力ボックスは、編集可能です。
  • Enterまたはスペースキーで、ボタンを押下できます。
    • Searchボタンを押下すると、ブラウザが起動しGoogleの検索結果を表示します。
      • ただし入力ボックス内にhttpの文字列が存在すれば、直接そのサイトに遷移します。
      • ただし検索文字列内に\\かc:\が存在すれば、explorerでそのパスを表示します。
    • SearchEngボタンを押下すると、ブラウザが起動しWeblio 翻訳サイトに遷移します。
画面イメージ

次のソースを.ahkファイルに張り付けてください。


; 例えばa::Send "a" はループになるが、このようなHotKeyのループを防ぐディレクティブ
#UseHook true 

; グローバル変数
global SearchWord := ""
global SearchGui := ""
global clip :=""



;;;;;;;;;;; Hotkey 検索用Gui表示 ;;;;;;;;;;;;;;
^f::
{
  KeyWait("f") ; キー押し上げを待つ
  if (KeyWait("f", "D T0.2")=0) {   ; キー押し下げをT秒待ちTimeOutは0(偽)を、そうでないなら 1(真)を返す
    Send("^f")
  }      ;2回目押下無しは、通常通り Send "^f"
  else { ;2回目押下有りは、検索用Gui立ち上げ
    SearchInput() ;Guiの入力画面立ち上げ
  }
}


;;;;;;;;;;; Function 検索用Gui表示 ;;;;;;;;;;;;;;
SearchInput()
{
global
  ; GUIは多重起動防止 
  If (WinActive("AHK_SearchBox") ) {
    return
  }

  SearchWord := ""
  ClipSaved := ClipboardAll()
  A_Clipboard := ""
  Send("^c")
    ClipWait(0.2) ;ClipWaitがなく反転がない状態でGUIを開くと処理が止まる。
  if (StrLen(A_Clipboard) = 0) {
    ;IMEが変更できない領域では、反転していない単語を自動で取得する処理は行わない。例:YouTubeなどで左右の移動が影響する為。
    IMEtmp := IME_GET()
    if (IMEtmp = 1) {
      IME_SET(0) ;英語入力
    }
    else if (IMEtmp = 0) {
      IME_SET(1) ;日本語入力
    }
    else {
      MsgBox("SearchIME Error!")
    }
    Sleep(50)
    if (IMEtmp = IME_GET()) { 
      ; msgbox "This area is not available for automatic word selection. Please invert the search text."
    }
    else {
      Send("^{Right}")
      Sleep(10) ;Sleepがないと、次の選択がスキップする事がある。
      Send("^+{Left}")
      Sleep(20) ;選択後にSleepないと、クリップボードへのコピーが失敗する事がある。
      Send("^c")
      Errorlevel := !ClipWait(1.0) ;0.5だとメモ帳でコピーができない事がある。
    }
    IME_SET(IMEtmp)
  }
  
  clip := A_Clipboard
  
  clip := rm_crlf(clip)
  clip := RegExReplace(clip, ">|`"", "") ; "パスやURL全体を()や'でくくっている事もあるので変換したいが、ファイル名に含まれている事もあるのでやめる。'
  clip := RegExReplace(clip, "[.']$", "")  ;
  tmp  := InStr(clip, "http")
  if (tmp > 0) {
    clip := SubStr(clip, (tmp)<1 ? (tmp)-1 : (tmp))
  }
  tmp := InStr(clip, "\\")
  if (tmp > 0) {
    clip := SubStr(clip, (tmp)<1 ? (tmp)-1 : (tmp))
  }
  tmp := InStr(clip, "c:\")
  if (tmp > 0) {
    clip := SubStr(clip, (tmp)<1 ? (tmp)-1 : (tmp))
  }
  tmp := InStr(clip, "z:\")
  if (tmp > 0) {
    clip := SubStr(clip, (tmp)<1 ? (tmp)-1 : (tmp))
  }
  clip := Trim(clip)

  If (Strlen(clip) = 0) { ;選択文字がない状態で、ペーストしたい場合を考慮
    A_Clipboard := ClipSaved
  }
  ClipSaved := ""

  
  if IsObject(SearchGui)
  {
    SearchGui.Destroy() ;途中でエラーになるとGUI情報がメモリに残り次の検索でもエラーになるためDestoryを記載。
  }

  SearchGui := Gui()
  SearchGui.OnEvent("Close", GuiEscape)
  SearchGui.OnEvent("Escape", GuiEscape)

  ; GuiのAddメソッドの様々なオブションについては、以下のリンクを参照
  ; https://ahkscript.github.io/ja/docs/v2/lib/Gui.htm#Add
  gcEditSearchWord := SearchGui.Add("Edit", "vSearchWord w880 R2 -WantReturn", clip)
  gcSearchButtonGoogle := SearchGui.Add("Button", "Default Section", "Search") ;第1引数:コントロールタイプ ("Button") 第2引数: オプション(変数名を設定する"v"オプションなど)第3引数: ボタンのテキスト
  gcSearchButtonGoogle.OnEvent("Click", SearchButtonGoogle) ;Default Selectionは、Enterで実行されるボタンであり、ボタンが選択状態になるわけではない。
  gcSearchButtonEng := SearchGui.Add("Button", "ys vSearchEng", "SearchEng") ;ysは、ボタンの位置を調整するための指定 
  gcSearchButtonEng.OnEvent("Click", SearchButtonEng)

  SearchGui.Title := "AHK_SearchBox " 
  SearchGui.Show("Center w900")
  
  If (Strlen(clip) != 0 and WinActive("AHK_SearchBox") ) { ;WinActiveは、GUIが消えた後に、次のsend が入らないように。
    Send("{tab}")
  }
}


;;;;;;;;;;; Function Google検索 and Explorer表示 ;;;;;;;;;;;;;;
SearchButtonGoogle(*)
{
global
  try {
    oSaved := SearchGui.Submit()
    SearchWord := oSaved.SearchWord
    if ( SubStr(SearchWord, 1, 1) = "\" or SubStr(SearchWord, 1, 3) = "c:\" or SubStr(SearchWord, 1, 3) = "z:\") {
      if (FileExist(SearchWord) or (SubStr(SearchWord, -2) != "\" && FileExist(SearchWord . "\"))) { ; ディレクトリチェックを追加
        Run(SearchWord)
      } else {
        MsgBox("No Exist: " SearchWord)
      }
    }
    else if SubStr(SearchWord, 1, 4) = "http" {
      Run(SearchWord)
    }
    else {
      Run("http://www.google.co.jp/search?hl=ja&lr=lang_ja&ie=UTF-8&q=" SearchWord)
    }
  }
  catch as e  {
    MsgBox(e.message, "", 16)
  }
  GuiEscape()
  A_Clipboard := SearchWord
}


;;;;;;;;;;; Function Web英語サイト検索 ;;;;;;;;;;;;;;
SearchButtonEng(*)
{
global
  try {
    oSaved := SearchGui.Submit()
    SearchWord := oSaved.SearchWord
    ;検索 英単語
    clipLength := StrLen(SearchWord)
    If (clipLength <= 1) {
      MsgBox("Too short serch word:  " SearchWord " length:" clipLength)
    } else {
      Run("`"https://ejje.weblio.jp/content/" SearchWord "`"")
    }
  }
  catch as e {
    MsgBox(e.message, "", 16)
  }

  GuiEscape()
  A_Clipboard := SearchWord
}

;;;;;;;;;;; Function Guiエスケープ ;;;;;;;;;;;;;;
GuiEscape(*) { ; 引数はアスタリスクで定義
global
  SearchGui.Destroy()
}


;;;;;;;;;;; Function 改行コード・全角スペース除去 ;;;;;;;;;;;;;;
rm_crlf(str) {
  str := RegExReplace(str, "\n", "")
  str := RegExReplace(str, "\r", "")
  str := RegExReplace(str, " ", "")
  str := Trim(str)
  Return str
}


;;;;;;;;;;; Function IME ;;;;;;;;;;;;;;
; IME_GETとIME_SETは、eamat様のIME制御ライブラリIME.ahkから抜粋
; https://w.atwiki.jp/eamat/pages/17.html
;-----------------------------------------------------------
; IMEの状態の取得
;   WinTitle="A"    対象Window
;   戻り値          1:ON / 0:OFF
;-----------------------------------------------------------
IME_GET(WinTitle:="A")  {
    hwnd := WinExist(WinTitle)
    if  (WinActive(WinTitle))   {
        ptrSize := !A_PtrSize ? 4 : A_PtrSize
        cbSize := 4+4+(PtrSize*6)+16
        stGTI := Buffer(cbSize,0)
        NumPut("DWORD", cbSize, stGTI.Ptr,0)   ;   DWORD   cbSize;
        hwnd := DllCall("GetGUIThreadInfo", "Uint",0, "Uint", stGTI.Ptr)
                 ? NumGet(stGTI.Ptr,8+PtrSize,"Uint") : hwnd
    }
    return DllCall("SendMessage"
          , "UInt", DllCall("imm32\ImmGetDefaultIMEWnd", "Uint",hwnd)
          , "UInt", 0x0283  ;Message : WM_IME_CONTROL
          ,  "Int", 0x0005  ;wParam  : IMC_GETOPENSTATUS
          ,  "Int", 0)      ;lParam  : 0
}

;-----------------------------------------------------------
; IMEの状態をセット
;   SetSts          1:ON / 0:OFF
;   WinTitle="A"    対象Window
;   戻り値          0:成功 / 0以外:失敗
;-----------------------------------------------------------
IME_SET(SetSts, WinTitle:="A")    {
    hwnd := WinExist(WinTitle)
    if  (WinActive(WinTitle))   {
        ptrSize := !A_PtrSize ? 4 : A_PtrSize
        cbSize := 4+4+(PtrSize*6)+16
        stGTI := Buffer(cbSize,0)
        NumPut("Uint", cbSize, stGTI.Ptr,0)   ;   DWORD   cbSize;
        hwnd := DllCall("GetGUIThreadInfo", "Uint",0, "Uint",stGTI.Ptr)
                 ? NumGet(stGTI.Ptr,8+PtrSize,"Uint") : hwnd
    }
    return DllCall("SendMessage"
          , "UInt", DllCall("imm32\ImmGetDefaultIMEWnd", "Uint",hwnd)
          , "UInt", 0x0283  ;Message : WM_IME_CONTROL
          ,  "Int", 0x006   ;wParam  : IMC_SETOPENSTATUS
          ,  "Int", SetSts) ;lParam  : 0 or 1
}

このスクリプトは、eamat様のIME制御ライブラリ IME.ahk 内のIME_GET関数とIME_SET関数を使用しています。(下記リンク参照)
https://w.atwiki.jp/eamat/pages/17.html
本スクリプトでは、編集可能な領域にカーソルを置いて文字反転をさせずにホットキーを押下すると、カーソル位置のテキスト1行分をコピーできるようにしています。しかしブラウザの文字上など編集できない場所では1行コピーができません。そこで編集可能な場所にカーソルがあるかどうかを、IMEを変換可能かどうかで判断しています。

スクリプトの実行

Ctrl+Fキーを1回押下すると通常の検索ショートカットとして機能しますが、Ctrl+Fキーの2連打でGUIを起動します。
ホットキー2連打の手法は様々な場面で使えるテクニックですので、是非覚えてください。

スクリプトの解説

  1. グローバル変数
    • SearchWord: 検索文字列を格納します。
    • SearchGui: 検索GUIオブジェクトを格納します。
    • clip: クリップボードの内容を一時的に格納します。
  2. ホットキー (^f)
    • KeyWait("f"): fキーが離されるまで待ちます。
    • if (KeyWait("f", "D T0.2")=0): fキーが0.2秒以内に再度押されたかどうかをチェックします。Dはキーダウン、T0.2はタイムアウト0.2秒を意味します。
    • 2回押されていない場合 (=0) は、通常のCtrl + f (Send "^f") を実行します。
    • 2回押された場合 (else) は、SearchInput()関数を呼び出して検索GUIを起動します。
  3. SearchInput()関数 (検索GUI表示)
    • GUIの多重起動を防ぎます (If (WinActive("AHK_SearchBox") ) { return })。
    • SearchWordを空にします。
    • クリップボードの内容を一時保存し (ClipSaved := ClipboardAll())、クリップボードを空にします (A_Clipboard := "")。
    • Send("^c")で選択テキストをクリップボードにコピーします。
    • ClipWait(0.2)でクリップボードへのコピーが完了するのを待ちます。これは、GUIを開く前にクリップボードの内容が確実に取得できるようにするためです。
    • クリップボードが空の場合(IMEが影響している場合などを考慮)、IMEの状態を取得し、必要に応じて変更して再度テキストの取得を試みます。これは、IMEがオンになっていると、選択テキストがクリップボードにコピーされない場合があるためです。
    • 取得したテキストをclipに格納し、不要な文字(改行、全角スペース、>"など)を削除します。また、http\\c:\z:\で始まる文字列の場合は、それ以降の文字列を抽出します。
    • クリップボードに何もコピーされていない場合は、保存しておいた元のクリップボードの内容を復元します。
    • GUIオブジェクトを作成し、イベントハンドラを設定します。
      • OnEvent("Close", GuiEscape): GUIが閉じられたときの処理。
      • OnEvent("Escape", GuiEscape): Escapeキーが押されたときの処理。
    • Editコントロールに取得したテキストを初期値として設定します。
    • Buttonコントロールを作成し、クリックイベントにSearchButtonGoogle関数を割り当てます。
    • GUIを表示します。
    • テキストが入力されている場合は、Tabキーを送信してEditコントロールにフォーカスを当てます。
  4. SearchButtonGoogle()関数 (Google検索実行)
    • GUI入力ボックスの検索文字列を取得します。
    • 検索文字列が\c:\z:\で始まる場合は、ファイルパスとみなし、ファイルまたはディレクトリを開きます。
    • 検索文字列がhttpで始まる場合は、URLにアクセスします。
    • 上記以外の場合は、Google検索を実行します。
    • エラーが発生した場合は、メッセージボックスを表示します。
    • GuiEscape()関数を呼び出してGUIを閉じます。
    • 検索文字列をクリップボードにコピーします。
  5. SearchButtonEng()関数 (英語サイト検索実行)
    • GUIから入力された検索文字列を取得します。
    • 英単語サイトWeblio 翻訳を検索します。
  6. GuiEscape()関数 (GUIクローズ)
    • GUIオブジェクトを破棄します。
  7. rm_crlf()関数 (改行コード・全角スペース除去)
    • 文字列から改行コード (\n, \r) と全角スペース () を削除します。
  8. IME_GET()IME_SET()関数 (IME制御)
    • IMEの状態を取得 (IME_GET()) および設定 (IME_SET()) します。これは、eamat氏のIME制御ライブラリから抜粋されたものです。


まとめ

AutoHotkeyを使えば、ホットキーで呼び出せる実用的なGUIを簡単に作成できます。上記例を見るだけでも、日常の作業を効率化するアイディアが浮かんできたのではないでしょうか。
AutoHotkeyは単なるキーマッピングツールではなく、外部プログラムもコールできる強力なプログラム実行環境です。この機会にAutoHotkeyであなたのルーチンワークを自動化してみてはいかがでしょうか。

Amazon | PFU キーボード HHKB Studio 日本語配列/雪(ポインティングスティック メカニカルキーボード) | HHKB | パソコン用キーボード 通販
PFU キーボード HHKB Studio 日本語配列/雪(ポインティングスティック メカニカルキーボード)がパソコン用キーボードストアでいつでもお買い得。当日お急ぎ便対象商品は、当日お届け可能です。アマゾン配送商品は、通常配送無料(一部除...

タイトルとURLをコピーしました