POSACC関数

本ページには広告が含まれています。

座標位置の文字情報を取得します。

構文
  1. 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関数でカーソル下にあるウィンドウのクライアント領域の座標(赤色の矢印)を使って求めることができます。

.png

まずX成分だけに注目してみると、赤色矢印と緑色矢印の和が紫色矢印に等しいことから以下の式が成り立ちます。

UWSC
STATUS(ID, ST_CLX) + cx = G_MOUSE_X

求めたいのはクライアント座標であるcxなので、この方程式をcxについて解くと以下のようになります。

UWSC
cx = G_MOUSE_X - STATUS(ID, ST_CLX)

次にY成分について見ると、X成分と同じように以下の式が導き出されます。

UWSC
STATUS(ID, ST_CLY) + cy = G_MOUSE_Y

cxのときと同様、cyについて解くと以下のようになります。

UWSC
cy = G_MOUSE_Y - STATUS(ID, ST_CLY)

IDはカーソル下のウィンドウなのでGETID関数で引数にGET_FROMPOINT_WINを指定して取得できます。これらをまとめると以下のプログラムのようになり、これでカーソル位置についてのクライアント領域のX座標、Y座標を求めることができます。このcxcyPOSACC関数の第二引数・第三引数に指定します。

UWSC
DIM ID = GETID(GET_FROMPOINT_WIN)
DIM cx = G_MOUSE_X - STATUS(ID, ST_CLX)
DIM cy = G_MOUSE_Y - STATUS(ID, ST_CLY)

使い方

カーソル下のウィンドウの文字情報を取得します。

UWSC
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

プログラム実行例

マウスカーソル下の文字情報を取得

UWSC
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)
引数で与えられたクラス名を持つ要素のリストを返します。