eightban's memo

残しておきたい記事をまとめてみました。このブログに書いてあるドキュメントやブログで配布しているファイルの使用によって発生するいかなる損害に対してもこのブログの管理者は責任を負いません。使用する場合は自己責任のもとに使用してください。

AutoHotkey アクセシビリティ

ボタンなどの画像を見つけてクリックする AutoHotkey

更新日:

AutoHotkey v2.0

キーボードのホットキーをカスタマイズするソフトです。自動化などいろいろなことができます。AutoHotkey v2.0にバージョンアップしたのでこちらを使います

https://www.autohotkey.com/

私はZIPを使います
https://www.autohotkey.com/download/

SciTE4AutoHotkey 編集から実行までできる環境です
https://www.autohotkey.com/scite4ahk/

解凍したフォルダーのAutoHotkey64.exeをコピーして名前をAutoHotkey.exeに変更します

簡単なスクリプトの例

loop
{
 Clickimage(".\images\a.bmp",10,10,,500)
 sleep 1000
}
Persistent

Clickimage(img,posdx:=0,posdy:=0, noclick:="noclick",waittime:=0, noreturn:="noreturn",ambiguity:=30){
    wd := A_WorkingDir
    SetWorkingDir A_ScriptDir
    ret := False

    if FileExist(img)
    {

	if ImageSearch(&FoundX, &FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, "*" ambiguity " " img)
        {
	    MouseGetPos &mouseX, &mouseY, &id, &control
            MouseMove FoundX+posdx, FoundY+posdy, 100
            ToolTip "X:" FoundX " Y:" FoundY,FoundX,FoundY
            if not (noclick = "noclick")
                MouseClick noclick,,,,
			ret := True
			sleep waittime
            ToolTip
;            if !noreturn
            if not (noreturn = "noreturn")
				MouseMove mouseX, mouseY, 0
        }
		else
		    ret := False
    }
    SetWorkingDir wd
    sleep 500

    return ret
}

スクリプト

imagesホルダーに決まった形式のファイル名でイメージファイルを置くとパラメーターを指定して動かすことができます。画像の見つかった場所から右にDX 下ににDYずらします。左クリックするかクリックしないかを指定できます。クリックした後の待ち時間を1000ミリ秒で指定します。元の場所にカーソルを戻すか戻さないかを指定します。色の曖昧さを指定します。調べる場所を指定します。キーを押します。

img_posdx_posdy_ noclick_waittime_noreturn_ambiguity_gravity_key.bmp

g.bmp

gx_10_10_noclick_100_return_30_southeast.bmp

t_10_10_left_100_noreturn_30 #north_{End}.bmp

Pauseキーで一時停止再開をします 見つかったらビープ音を鳴らします。

global eflg := false
global eflg := true
ecnt := 0
ecnt2 := 0
imagesfld := "images"
Arr := ["img",10,10, "left",100, "return",30,"fullscreen",""]

;
Itemnull :=
Item := Array()


loop
{
    if eflg
     {
		MouseGetPos &mouseXa, &mouseYa
        mouseXb := mouseXa
        mouseYb := mouseYa
        sleep 3000
		MouseGetPos &mouseXa, &mouseYa
        if mouseXb = mouseXa and mouseYb = mouseYa
        {
            if ecnt = 0
            {
;                ecnt++
;                Clickimage(".\images\a.bmp",10,10,,500)
                Loop Files, A_ScriptDir "\" imagesfld "\*.*"
                {
                    fileItem := StrSplit(A_LoopFileName, ".")
                    Item := StrSplit(fileItem[1], "_")
                    Loop 9- Item.Length
                        Item.Push Itemnull
                        ; a_10_10_left_500_return_30_southwest_{End}.bmp
                    Loop  9
                    {
                        if Item[A_Index] = Itemnull
                            Item[A_Index] := Arr[A_Index]
;MsgBox A_LoopFileFullPath Item[2] Item[3] Item[4] Item[5] Item[6] Item[7] , ,"T57"

                    }

;                    if Clickimage(A_LoopFileFullPath,10,10,"left",500,"return") = true
                    if Clickimage(A_LoopFileFullPath ,Item[2]*1,Item[3]*1,Item[4],Abs(Item[5]),Item[6],Abs(Item[7]),Item[8]) = true
                    {
                        ecnt2++
                        if not (Item[9] = "" or Item[9] =Itemnull)
                        {
  ;                          MsgBox Item[9] , ,"T5"

                            send Item[9]
                        }
                    }
                }
            }
            ecnt++

        }
        else
        {
            ecnt := 0
        }
     }
sleep 1000
}
Persistent
Pause::
{
     global eflg
    if eflg
          MsgBox "clickimage is not active.", ,"T5"
     else
          MsgBox "clickimage is active.", ,"T5"
     eflg := !eflg

}

Clickimage(img,posdx:=0,posdy:=0, noclick:="noclick",waittime:=0, noreturn:="noreturn",ambiguity:=30,gravity:="fullscreen"){
    wd := A_WorkingDir
    SetWorkingDir A_ScriptDir
    ret := False
    b1x := 1
    b1y := 1
    If InStr(gravity, "north")
        b1y--
    If InStr(gravity, "south")
        b1y++
    If InStr(gravity, "west")
        b1x--
    If InStr(gravity, "east")
        b1x++
    If InStr(gravity, "#north")
        b1y+=0.5
    If InStr(gravity, "#south")
        b1y-=0.5
    If InStr(gravity, "#west")
        b1x+=0.5
    If InStr(gravity, "#east")
        b1x-=0.5


    if  (gravity = "fullscreen")
    {
        bx := 0
        by := 0
        bw := A_ScreenWidth
        bh := A_ScreenHeight
    }
    else
    {
        bx := Round(A_ScreenWidth*b1x/3)
        by := Round(A_ScreenHeight*b1y/3)
        bw := Round(A_ScreenWidth/3)+bx
        bh := Round(A_ScreenHeight/3)+by
    }

  ;
; MsgBox bx " " by " "  bw " " bh gravity, ,"T55"

    if FileExist(img)
    {

		if ImageSearch(&FoundX, &FoundY, bx, by, bw, bh, "*" ambiguity " " img)
        {
            SoundBeep
			MouseGetPos &mouseX, &mouseY, &id, &control
            MouseMove FoundX+posdx, FoundY+posdy, 100
            ToolTip "X:" FoundX " Y:" FoundY,FoundX,FoundY
            if not (noclick = "noclick")
                MouseClick noclick,,,,
			ret := True
			sleep waittime
            ToolTip
;            if !noreturn
            if not (noreturn = "noreturn")
				MouseMove mouseX, mouseY, 0
        }
		else
		    ret := False
    }
    SetWorkingDir wd
    sleep 200

    return ret
}

スクリーンショットの方法

例えばscreenpresso

https://www.screenpresso.com/ja/

-AutoHotkey, アクセシビリティ

Copyright© eightban's memo , 2024 All Rights Reserved Powered by STINGER.