ショートカットキーが割り当てられていないボタンを、キーボードから操作できるようにする方法

フォーカスを合わせられる場合

ControlSendを用います。

フォーカスを合わせられない場合

ボタンにテキストが表示されている、もしくはボタンの位置が固定されているならば、先にControlClickの利用を検討します。

指定コントロール上の画像のクリック

ClickImageOnControl( image, control )
{
    ControlGetPos, ctrlX, ctrlY, ctrlWidth, ctrlHeight, %control%, A
    ImageSearch, imageX, imageY, ctrlX, ctrlY, ctrlX + ctrlWidth, ctrlY + ctrlHeight, %image%

    if( ErrorLevel = 0 )
    {
        ControlClick, X%imageX% Y%imageY%
    }
    else if( ErrorLevel = 1 )
    {
        MsgBox, Not found.
    }
    else
    {
        MsgBox, Problem occurred.
    }
}

この関数は、

ClickImageOnControl( "image\Image.bmp", "ToolbarWindow321" )

のように呼び出します。このとき画像ファイルのパスは、作業ディレクトリからの相対パスで指定する必要があります。作業ディレクトリは既定ではAutoHotkeyを実行したディレクトリ (たとえば%ProgramFiles%/AutoHotkey) となるため、そのディレクトリ以下に画像ファイルを配置しないならば、フルパスで記述すべきです。もしくは、

SetWorkingDir, %A_ScriptDir%

のようにして、作業ディレクトリをスクリプトのディレクトリに変更します。

画像ファイルにはgif、jeg、bmpなど各種のフォーマットを使用できますが、色の誤差を考慮するとbmpにすべきです。

コントロールの名前については、Window Spyで調べられます。

アクティブウィンドウ上の画像のクリック

コントロールの名前を調べられない場合には、アクティブなウィンドウ全体を対象として画像を検索します。

ClickImage( image )
{
    WinGetPos, winX, winY, winWidth, winHeight, A
    ImageSearch, imageX, imageY, 0, 0, winWidth, winHeight, %image%

    if( ErrorLevel = 0 )
    {
        ControlClick, X%imageX% Y%imageY%
    }
    else if( ErrorLevel = 1 )
    {
        MsgBox, Not found.
    }
    else
    {
        MsgBox, Problem occurred.
    }
}

画像のファイル名だけを指定して呼び出します。

ClickImage( "image\Image.bmp" )

注意事項は前項の関数と同様です。