フォーム − GetStringDlg.cpp
BOOL CGetStringDlg::OnInitDialog()
{
CDialog::OnInitDialog();
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
// TODO: 初期化をここに追加します。
//--------------------------------------------------
//変数初期化
got_time=0;
got=false;
//キャプションクリア
SetDlgItemText(IDC_MOUSE_POS,"");
SetDlgItemText(IDC_HWND,"");
SetDlgItemText(IDC_CLASSNAME,"");
SetDlgItemText(IDC_STATUS,"");
//最前面表示
//this->SetWindowPos(&CWnd::wndTopMost, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);
//ライセンスキー登録を登録します
int rc=RegistKey("xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx");
//---------------------------------------------------
return TRUE; // フォーカスをコントロールに設定した場合を除き、TRUE を返します。
}
void CGetStringDlg::OnBnClickedGo()
{
StartGetInfo(true);
}
void CGetStringDlg::StartGetInfo(bool Go)
{
/*
Go:true ボタンキャプションで開始/停止を判定
false 停止:OnTimer からコールされる
*/
CString strCaption;
GetDlgItemText(IDC_GO,strCaption);
if(Go && strCaption.CompareNoCase("開始")==0){
this->SetWindowText("ESCキーで停止");
::GetAsyncKeyState(VK_ESCAPE); //空読み
SetDlgItemText(IDC_GO,"停止");
SetTimer(1,100,NULL);
}else{
KillTimer(1);
this->SetWindowText("GetString");
SetDlgItemText(IDC_GO,"開始");
}
}
void CGetStringDlg::OnTimer(UINT nIDEvent)
{
/* 取得条件
・マウスが移動中では無いこと
・自分のフォーム上では無いこと
・マウスが0.5秒以上停止したら一回だけ取得
*/
//エスケープキーが押された
if(::GetAsyncKeyState(VK_ESCAPE)!=0){
StartGetInfo(false); //停止
}
//-------------------------------------
POINT pos;
CString c,c2;
GetCursorPos(&pos);
if((pos.x != pos_pre.x) || (pos.y != pos_pre.y)){ //移動中
pos_pre=pos;
c.Format("%d,%d",pos.x,pos.y);
SetDlgItemText(IDC_MOUSE_POS,c); //ポインタ位置
got=false; //未取得
return;
}
int t;
t=::GetTickCount();
if(t<(got_time+500)) //0.5秒未満の停止
return;
got_time=t;
HWND hWnd,phWnd,tmp;
hWnd=::WindowFromPoint(pos);
phWnd=hWnd;
tmp=::GetParent(hWnd);
while(tmp!=NULL){ //ポイント位置の最上位親ウィンドウを捜す
phWnd=tmp;
tmp=::GetParent(phWnd);
}
if((got==true) || (this->m_hWnd==phWnd)) //取得済み or 自分ウィンドウは撮らない
return;
//-----------------------------------------------
// 取得処理メイン
//-----------------------------------------------
SetDlgItemText(IDC_STATUS,"取得中・・・");
got_time=::GetTickCount(); //取得した時間
c.Format("%d",hWnd);
SetDlgItemText(IDC_HWND,c); //ウィンドウハンドル
c.Format("%d",phWnd);
SetDlgItemText(IDC_DEBUG,c); //トップウィンドウハンドル
char s[1024];
GetClassName(hWnd,s,sizeof(s));
c.SetString(s);
SetDlgItemText(IDC_CLASSNAME,c); //クラス名
//------------------------------------------
//文字情報取得
//------------------------------------------
GetText(pos.x,pos.y,s,sizeof(s));
c.SetString(s);
SetDlgItemText(IDC_EDIT_POINT,c); //ポイント位置直下
GetFullText(pos.x,pos.y,s,sizeof(s));
c.SetString(s);
SetDlgItemText(IDC_EDIT_FULL,c); //ポイント位置全体
//------------------------------------------
//ACC 情報取得
//------------------------------------------
c.Empty();
GetAccInfo(pos.x,pos.y, s,sizeof(s),GS_ACC_INFO_NAME);
c.Append("Name : "); c.Append(s); c.Append("\r\n");
GetAccInfo(pos.x,pos.y, s,sizeof(s),GS_ACC_INFO_VALUE);
c.Append("Value : "); c.Append(s); c.Append("\r\n");
int accRole,accState,accChildCount,ID;
accRole=GetAccNum(pos.x,pos.y, GS_ACC_NUM_ROLE);
GetAccRoleText(accRole,s,sizeof(s));
c.Append("Role : "); c.Append(s); c.Append("\r\n");
accState=GetAccNum(pos.x,pos.y, GS_ACC_NUM_STATE);
c.Append("State : "); c.AppendFormat("%x",accState); c.Append("\r\n");
RECT lpRect;
GetAccLocation(pos.x,pos.y, &lpRect);
c2.Format(" %d,%d,%d,%d",lpRect.left,lpRect.top,lpRect.right,lpRect.bottom);
c.Append("Location :"); c.Append(c2); c.Append("\r\n");
GetAccInfo(pos.x,pos.y, s,sizeof(s),GS_ACC_INFO_DEFAULTACTION);
c.Append("DefAction : "); c.Append(s); c.Append("\r\n");
accChildCount=GetAccNum(pos.x,pos.y, GS_ACC_NUM_CHILDCOUNT);
c.Append("ChildCount : "); c.AppendFormat("%d",accChildCount); c.Append("\r\n");
GetAccInfo(pos.x,pos.y, s,sizeof(s),GS_ACC_INFO_DESCRIPTION);
c.Append("Description : "); c.Append(s); c.Append("\r\n");
switch(GetObjType(pos.x,pos.y)){
case 1: c2="Simple Element";break;
case 2: c2="Real Object"; break;
case 3: c2="Container"; break;
default: c2=""; break;
}
c.Append("ObjectType : "+c2+"\r\n");
ID=GetAccNum(pos.x,pos.y,GS_ACC_NUM_ID);
c.Append("ID : "); c.AppendFormat("%d",ID); c.Append("\r\n");
SetDlgItemText(IDC_EDIT_ACCINFO,c);
//------------------------------------------
//ウィンドウステータスバー文字取得
//------------------------------------------
GetStatusText(pos.x,pos.y,s,sizeof(s));
c.SetString(s);
SetDlgItemText(IDC_EDIT_STATUS,c); //ステータスバー文字
/////////////////////////////////////////////
got=true; //取得済み
SetDlgItemText(IDC_STATUS,"");
}
BOOL CGetStringDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO : ここに特定なコードを追加するか、もしくは基本クラスを呼び出してください。
switch(pMsg->message){
case WM_KEYDOWN: //エスケープキーを無視
if(pMsg->wParam == VK_ESCAPE){
return TRUE;
}
break;
case WM_LBUTTONDOWN: break;
case WM_LBUTTONUP: break;
case WM_MOUSEMOVE: break;
default: break;
}
return CDialog::PreTranslateMessage(pMsg);
}
ヘッダファイル − GetTextDll.h
//-----------------------------------------------------------
// 関数宣言
//---------------------------------------------------------------
// ポイント直下の文字列取得
//--------------------------------------
// x,y : スクリーン座標(Pixcel)
// lpString : 文字列格納バッファアドレス
// nMaxCount: バッファサイズ
//
// 返却値 : 0:正常 -1:取得失敗 -2:バッファサイズオーバー
long GetText(long x,long y, char * strBuf,long nMaxSize);
//---------------------------------------------------------------
// ポイント直下の全体文字列取得
//--------------------------------------
// x,y : スクリーン座標(Pixcel)
// strBuf : 文字列格納バッファアドレス
// nMaxCount: バッファサイズ
//
// 返却値 : 0:正常 -1:取得失敗 -2:バッファサイズオーバー
long GetFullText(long x,long y, char * strBuf,long nMaxSize);
//---------------------------------------------------------------
// ウィンドウステータスバーテキスト取得
//--------------------------------------
// x,y : スクリーン座標(Pixcel)
// lpString : 文字列格納バッファアドレス
// nMaxCount: バッファサイズ
//
// 返却値 : 0:正常 -1:取得失敗 -2:バッファサイズオーバー
long GetStatusText(long x,long y, char * strBuf,long nMaxSize);
//---------------------------------------------------------------
// MSAA(Microsoft Active Accessibility)文字情報取得
//
// x,y : スクリーン座標(Pixcel)
// strBuf : 文字列格納バッファアドレス
// nMaxCount: バッファサイズ
// item : 取得情報種別 上記の「パラメータ値定義」参照
//
// 返却値 : 0:正常 -1:取得失敗 -2:バッファサイズオーバー
long GetAccInfo(long x,long y,char * strBuf,long nMaxSize,long item);
//-------------------------------------------------------------
// MSAA 数値情報取得
//-------------------------------------------------------------
//
// x,y : スクリーン座標(Pixcel)
// item : 取得情報種別 上記の「パラメータ値定義」参照
//
// 返却値 : >=0:数値情報 -1:取得失敗 -2:バッファサイズオーバー
long GetAccNum(long x,long y,long item);
//-------------------------------------------------------------
// MSAA オブジェクト位置取得
//-------------------------------------------------------------
//
// x,y : スクリーン座標(Pixcel)
// pxLeft,pxTop,pxWidth,pxHeight
// : 位置情報 それそれ
// 左位置、上位置、幅、高さ(Pixcel)がセットされる
// 返却値 : 0:正常 -1:取得失敗 -2:バッファサイズオーバー
long GetAccLocation(long x,long y,RECT * lpRect);
//-------------------------------------------------------------
// Role値を文字列に変換
//-------------------------------------------------------------
//
// Role : GetAccNum で取得した値
// strBuf : 文字列格納バッファアドレス
// nMaxCount: バッファサイズ
//
// 返却値 : 0:正常 -1:取得失敗 -2:バッファサイズオーバー
long GetAccRoleText(long Role,char * strBuf,long nMaxSize);
//-------------------------------------------------------------
// オブジェクト種別取得
//-------------------------------------------------------------
//
// x,y : スクリーン座標(Pixcel)
//
// 返却値 : -1:取得失敗 0:不明 1:Simple Element 2:Real Object 3:Container
long GetObjType(long x,long y);
//-------------------------------------------------------------
// ライセンスキー登録
//-------------------------------------------------------------
//
// 返却値 : 0:登録成功 -1:失敗 -2:不正ライセンス
long RegistKey( char * key);
//-------------------------------------------------------------
// 定数宣言
//-------------------------------------------------------------
// 文字情報 GetAccInfo のパラメータ item
const long GS_ACC_INFO_NAME = 1; // AccName
const long GS_ACC_INFO_VALUE = 2; // AccValue
const long GS_ACC_INFO_DESCRIPTION = 3; // AccDescription
const long GS_ACC_INFO_DEFAULTACTION = 4; // AccDefaultAction
// 数値情報 GetAccNum のパラメータ item
const long GS_ACC_NUM_ROLE = 1; // AccRole
const long GS_ACC_NUM_STATE = 2; // AccState
const long GS_ACC_NUM_CHILDCOUNT = 3; // AccChildCount
const long GS_ACC_NUM_LOCATION = 4; // AccLocation
const long GS_ACC_NUM_ID = 5; // ID
//-------------------------------------------------------