本ページには広告が含まれています。
座標位置の文字情報を取得します。
- 構文
- UString = POSACC( ID, クライアント座標X, クライアント座標Y, モード )
- 引数
- ID (Integer)必須
- Windowを識別するID (スクリーン全体の場合は 0)
- 座標 (Integer)必須
- クライアント座標 (ID= 0 の場合はスクリーン座標)
- モード (#posacc = 0)省略可
- 0
- (デフォルト) ACC_ACCの実行、取得ができなければACC_API を実行
- ACC_ACC
- 表示文字の取得 (アクセシビリティ経由)
- ACC_API
- DrawText, TextOutなどのAPIをトラップ(64bitアプリNG)
- ACC_NAME
- 名前(アクセシビリティ経由)
- ACC_VALUE
- 値(アクセシビリティ経由)
- ACC_ROLE
- 役割(アクセシビリティ経由)
- ACC_STATE
- 状態(アクセシビリティ経由)
- ACC_DESCRIPTION
- 説明(アクセシビリティ経由)
- ACC_LOCATION
- X,Y,幅,高さ(アクセシビリティ経由)
- ACC_BACK
- ウィンドウをアクティブ化しない (他モードに付加して使用)
- 戻り値
- 取得した文字(情報)
クライアント座標
クライアント座標とはアプリケーションの左上を基準とした座標で、下図の緑色の矢印の始点となる座標のことです。
下図の破線の交点にあるカーソル位置のクライアント座標は、特殊変数であるG_MOUSE_*のスクリーン座標(紫色の矢印)とSTATUS関数でカーソル下にあるウィンドウのクライアント領域の座標(赤色の矢印)を使って求めることができます。
まずX成分だけに注目してみると、赤色矢印と緑色矢印の和が紫色矢印に等しいことから以下の式が成り立ちます。
STATUS(ID, ST_CLX) + cx = G_MOUSE_X
求めたいのはクライアント座標であるcxなので、この方程式をcxについて解くと以下のようになります。
cx = G_MOUSE_X - STATUS(ID, ST_CLX)
次にY成分について見ると、X成分と同じように以下の式が導き出されます。
STATUS(ID, ST_CLY) + cy = G_MOUSE_Y
cxのときと同様、cyについて解くと以下のようになります。
cy = G_MOUSE_Y - STATUS(ID, ST_CLY)
IDはカーソル下のウィンドウなのでGETID関数で引数にGET_FROMPOINT_WINを指定して取得できます。これらをまとめると以下のプログラムのようになり、これでカーソル位置についてのクライアント領域のX座標、Y座標を求めることができます。このcxとcyをPOSACC関数の第二引数・第三引数に指定します。
DIM ID = GETID(GET_FROMPOINT_WIN)
DIM cx = G_MOUSE_X - STATUS(ID, ST_CLX)
DIM cy = G_MOUSE_Y - STATUS(ID, ST_CLY)
使い方
カーソル下のウィンドウの文字情報を取得します。
WHILE TRUE
DIM ID = GETID(GET_FROMPOINT_WIN)
DIM cx = G_MOUSE_X - STATUS(ID, ST_CLX)
DIM cy = G_MOUSE_Y - STATUS(ID, ST_CLY)
DIM str = ""
str = str + "表示文字<#TAB>" + POSACC(ID, cx, cy, ACC_ACC OR ACC_BACK) + "<#CR>"
str = str + "API<#TAB><#TAB>" + POSACC(ID, cx, cy, ACC_API OR ACC_BACK) + "<#CR>"
str = str + "名前<#TAB><#TAB>" + POSACC(ID, cx, cy, ACC_NAME OR ACC_BACK) + "<#CR>"
str = str + "値<#TAB><#TAB>" + POSACC(ID, cx, cy, ACC_VALUE OR ACC_BACK) + "<#CR>"
str = str + "役割<#TAB><#TAB>" + POSACC(ID, cx, cy, ACC_ROLE OR ACC_BACK) + "<#CR>"
str = str + "状態<#TAB><#TAB>" + POSACC(ID, cx, cy, ACC_STATE OR ACC_BACK) + "<#CR>"
str = str + "説明<#TAB><#TAB>" + POSACC(ID, cx, cy, ACC_DESCRIPTION OR ACC_BACK) + "<#CR>"
str = str + "X,Y,幅,高さ<#TAB>" + POSACC(ID, cx, cy, ACC_LOCATION OR ACC_BACK) + "<#CR>"
FUKIDASI(str)
SLEEP(0.001)
WEND
プログラム実行例
マウスカーソル下の文字情報を取得
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
WHILE TRUE
DIM ID = GETID(GET_FROMPOINT_WIN)
FUKIDASI(POSACC(ID, G_MOUSE_X - STATUS(ID, ST_CLX), G_MOUSE_Y - STATUS(ID, ST_CLY), ACC_BACK))
SLEEP(0.001)
WEND
//////////////////////////////////////////////////
// 【引数】
//
// 【戻り値】
//
//////////////////////////////////////////////////
PROCEDURE forceQuit()
EXITEXIT
FEND
使用関数
関連記事
- CPUUSERATE関数 (スクリプト関数)
- GETDIR関数 (スクリプト関数)
- GETFORMDATA関数 (スクリプト関数)
- FSO.GetFolder メソッド
- 指定したパスのFolder オブジェクトを返します。
- File.Type プロパティ (FSO)
- 指定したファイルの種類を返します。
- small関数 (自作関数)
- 配列の中で小さい方から数えた順位の値を求めます。
- Document.getElementsByClassName メソッド (DOM)
- 引数で与えられたクラス名を持つ要素のリストを返します。