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ファイルを作成し、任意の名前を付けて、次の内容を書き込みます.
;  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()関数しか呼び出せません.この関数は変数を伝えることも、文字列を伝えることもできます.