0

私のスクリプトは、AppA からテキストを取得し、それを AppB のテキスト編集に貼り付けます。AppB が (スクリプトによって) 開始されると、テキスト編集は無効になり、ユーザーがアクションを実行すると有効になります。そのアクションは手動で行う必要があります。

ユーザーが何もする前にスクリプトが実行され、エラーが発生します。編集が有効になっているかどうかを確認することを考えましたが、このエラーが発生します。「アプリケーション「システムイベント」の<>「AppB」のAppBのウィンドウを取得できません。エラーは1回だけスローされます。

エラーを回避するにはどうすればよいですか? エラーを食べるだけのtryブロックの方が良いでしょうか?

on idle
 tell application "System Events" to set AppAIsOpen to (application process "AppA" exists)
if (AppAIsOpen) then
  set AppAWasOpen to true
  tell application "AppA"
    set hdg to TxRprt
    set beam to hdg as string
  end tell
  if ((count beam) < 3) then set beam to text -3 thru -1 of ("000" & beam)
    if (beam is not previousText) then
      tell application "AppB" to launch
        tell application "System Events"
          tell application process "AppB"
        if text field 1 of window "AppB" is enabled then  -- error here
          set value of text field 1 of window "AppB" to beam  --or here
        end if
      end tell
    end tell
    set previousText to beam
      end if
    return checkInterval
else if (AppAgWasOpen) then
  quit
      return 1
end if

アイドル状態で終了

4

1 に答える 1

1

通常、繰り返しループに入り、テキスト フィールド (または任意のインターフェイス要素) が使用可能になるかどうかを確認してから、何かを実行します。このようなものが機能し、エラーを排除するはずです。

繰り返しループに陥らないように、このプロセスに時間チェックも追加していることに注意してください。この場合、テキスト フィールドが使用可能になるまで最大 5 秒待ちます。

tell application "System Events"
    -- wait for the text field to become available
    set startTime to current date
    repeat until exists (text field 1 of window "AppB" of application process "AppB")
        if (current date) - startTime is greater than 5 then
            error "Could not find text field 1 of window AppB of application process AppB"
            exit repeat
        end if
        delay 0.2
    end repeat

    tell application process "AppB"
        if text field 1 of window "AppB" is enabled then -- error here
            set value of text field 1 of window "AppB" to beam --or here
        end if
    end tell
end tell
于 2013-02-25T00:33:10.777 に答える