1

プログラムのダイアログを開くには、入力名の長い文字列を送信する必要があります。send() 関数を試しましたが、これを完全に行うことはできません。OS コンテキスト スイッチ send() 関数が文字列の一部を別のプログラムに送信するためだと思います。

次のコードは私のスクリプトの一部です:

$ftmp = ""
while 1
  $fname = FileReadLine($file)
  if @error = -1 then ExitLoop
  $ftmp = $ftmp & $fname & " "
WEnd  
send("^o")
WinActivate("Open Image")
sleep(100)
send($fadrs)
Sleep(200)
send("{ENTER}")
sleep(10)
send($ftmp)
Sleep(100)
send("{ENTER}")
4

4 に答える 4

1

ControlSend() は、Send() の代わりに使用しているものでなければなりません。また、{ENTER} キーストロークを送信していることに気付きました。ControlClick() または ControlCommand() を使用して、次の画面に移動するはずのボタンを押します (これはより安定しています)。

Send() 型を現在フォーカスのあるコントロールに送信します。SendKeepActive() はこれに役立ちますが、現在のウィンドウをアクティブに保つだけで、問題のコントロールをアクティブに保つ必要はありません。

AutoIt ウィンドウ情報ツールを使用して、ControlSend()/ControlClick() 関数入力の各コントロールのクラスを取得します。

于 2012-08-28T18:32:41.477 に答える
1

これは私がAutoitscriptから得た答えであり、うまくいきます。長い文字列を送信するときは、 controlsettext()
を使用する必要があります。

于 2012-08-06T09:16:46.460 に答える
0

他にもいくつかの答えがあることは知っていますが、私の答えはもう少しうまくいくと思いますか?ここに行きます:

;send a large string of text instantaneously using the clipboard
ClipPut($myString)
;then you could just send ctrl + v
;Send("^v")
;or to be more precise use controlsend()
ControlSend(WindowTitle, WindowText, controlID, "^v" [, flag] )
;this way it sends instantly

お役に立てれば!

于 2012-08-22T02:09:33.910 に答える
0

申し訳ありませんが、以下ですでに正常に回答されていませんでした。他の誰かに役立つ場合に備えて、これを残します。

ウィンドウに Send() 引数の一部しか取得していないため、ウィンドウが非アクティブになっている可能性があります。各 Send() の前に WinActivate() を使用してみます。また、間に少し長いスリープを入れます。おそらく 500 または 1000 です。問題を正しく理解していれば、それでうまくいくと思います。

申し訳ありませんが、以下ですでに正常に回答されていませんでした。他の誰かに役立つ場合に備えて、これを残します。

于 2012-08-17T15:23:54.300 に答える