AutoIt操作Dynamic control Idコントロール
2124 ワード
AutoItスクリプトでは、操作するコントロールに対してコントロールidを知る必要がありますが、IEブラウザのセキュリティコントロールでは、ブラウザを開くたびにidが動的に生成されます.ブラウザを開くたびにidが異なり、動的に変化するので、このタイプのコントロールを操作するには、別の方法が必要です.
参照先:
https://www.autoitscript.com/forum/topic/157706-how-can-i-retrieve-a-dynamic-control-id/#comment-1143379
AutoIT scriptファイルを作成し、任意の名前を付けて、次の内容を書き込みます.
上記のコードで問題が発生しました.
記入した情報は不完全で、例えばアカウントは2345しか記入できなくて、1を記入していないで、ランダムに発生して、解決方法:スクリプトの中でsleep文を加えて、それを3秒寝させます
まとめ:
1、Windowsの下の二つの概念をはっきり分けます:ウィンドウとコントロール、Autoitの中でウィンドウはWin**関数を使って操作しなければならなくて、コントロールはcontrol**関数を使って操作して、例えば:
Local $hWnd = WinWait("[ClASS:IEFrame]","",10)
Local $sClassList = WinGetClassList($hWnd)
;前に書いたLocal$hWnd=WinWait(「[ClassS:Internet Explorer_Server]」,「」,10)は情報を取得できません.ClassS:Internet Explorer_Serverのウィンドウなので、情報が読めません.
2、IEとMsgBoxを使用する前に関連するパッケージを導入する必要があります.そうしないと、運行時にエラーが発生します.
3、WinGetClassList関数式キーは、現在のウィンドウに存在するすべてのclass情報を見つけることができ、コントロールのclass情報もその中にあるので、必要なコントロールid(idの一部は固定の先頭)を見つけることができます.
4、Autoitでは、変数を文字列に変換することができ、2つの文字変数が=かどうかを比較することができますが、含めることはできません.StringInSub()関数しか呼び出せません.この関数は変数を伝えることも、文字列を伝えることもできます.
参照先:
https://www.autoitscript.com/forum/topic/157706-how-can-i-retrieve-a-dynamic-control-id/#comment-1143379
AutoIT scriptファイルを作成し、任意の名前を付けて、次の内容を書き込みます.
; WinGetClassList , , IE ATL ,
#include
#include
$oIE = _IECreate ("https://pbsz.ebank.cmbchina.com/CmbBank_GenShell/UI/GenShellPC/Login/Login.aspx","0,1,1,0")
Local $hWnd =WinWait("[ClASS:IEFrame]","",10)
Local $sClassList = WinGetClassList($hWnd)
Local $controClasss
$aClassList = StringSplit($sClassList,@CRLF,2)
For $i=0 To UBound($aClassList) -1
IfStringInStr(String($aClassList[$i]),"ATL")Then
$controlClass = String($aClassList[$i])
ExitLoop
EndIf
Next
Local $ClassNameNN_Account =$controlClass&2 ; ,
Local $ClassNameNN_Password =$controlClass&1
MsgBox($MB_SYSTEMMODAL, "",$ClassNameNN_Account)
ControlSend($hWnd,"",$ClassNameNN_Account, "123456")
ControlSend($hWnd,"",$ClassNameNN_Password, "111111")
Sleep(5000)
WinClose($hWnd)
上記のコードで問題が発生しました.
記入した情報は不完全で、例えばアカウントは2345しか記入できなくて、1を記入していないで、ランダムに発生して、解決方法:スクリプトの中でsleep文を加えて、それを3秒寝させます
まとめ:
1、Windowsの下の二つの概念をはっきり分けます:ウィンドウとコントロール、Autoitの中でウィンドウはWin**関数を使って操作しなければならなくて、コントロールはcontrol**関数を使って操作して、例えば:
Local $hWnd = WinWait("[ClASS:IEFrame]","",10)
Local $sClassList = WinGetClassList($hWnd)
;前に書いたLocal$hWnd=WinWait(「[ClassS:Internet Explorer_Server]」,「」,10)は情報を取得できません.ClassS:Internet Explorer_Serverのウィンドウなので、情報が読めません.
2、IEとMsgBoxを使用する前に関連するパッケージを導入する必要があります.そうしないと、運行時にエラーが発生します.
3、WinGetClassList関数式キーは、現在のウィンドウに存在するすべてのclass情報を見つけることができ、コントロールのclass情報もその中にあるので、必要なコントロールid(idの一部は固定の先頭)を見つけることができます.
4、Autoitでは、変数を文字列に変換することができ、2つの文字変数が=かどうかを比較することができますが、含めることはできません.StringInSub()関数しか呼び出せません.この関数は変数を伝えることも、文字列を伝えることもできます.