Applescript-バックグラウンドアプリケーションのアクティブ化が機能しない


4

なぜこれが機能しないのですか

tell application "System Events"
    set AppName to name of every process whose background only is false
    tell application (some item of AppName)
        activate
    end tell
end tell

これながら

働く

global AppName
tell application "System Events"
    set AppName to name of every process whose background only is false
end tell

tell application (some item of AppName)
    activate
end tell

明らかに、それはスコープと関係がありますが、私はなぜか何を理解していない


2
それはスコープではなく、コマンドがどこに向けられ、どのアプリケーションまたはスクリプトがそれらの実行を処理するかについてです。tell application最初のスクリプトで1つのブロックを他のブロックにネストしました。特定の状況でこれを行うには多くの理由がありますが、システムイベントは実際に他のアプリケーションにコマンドを発行できずactivateシステムイベントと他のアプリケーションの両方を潜在的にターゲットにしているため、これはそれらの1つではありません。システムイベントを優先的にアクティブ化する。2つ目のtellブロックを2番目に分離することが機能します。
CJK

2
global AppName宣言は冗長です。
CJK

回答:


5

問題があると思います。.アプリケーションにアクティブ化するように伝えることは「標準追加」によって処理されますが、そのアクションを処理するように「システムイベント」に要求しています。

tell application "System Events" to set AppName to name of ¬
    every process whose background only is false
tell application (some item of AppName) to activate

必要ありませんmytell application (some item of AppName) to activate十分なものです。
CJK

はい。それで合っています。ただし、アプリケーションのtellブロック内で変数を設定し、別のアプリケーションのtellブロックでその変数を参照する場合は、「my」または「of it」を使用することが必要になります。笑
wch1zpink

それは変数ではなく、プロパティとハンドラーに関連していますか?
CJK

3

話を聞かせてください:

1人の親が立ち上がり、3人の子供に電話をかけました。

  • エース-起きてりんごを持ってきて
  • デュース-起きてりんごを持ってきて
  • トレイ-起きてりんごを持ってきて

その親は、3個のリンゴを持ち、全員がベッドから出て喜んでいた。

他の親は言った:

  • Trey-目を覚ましてリンゴを持ってくる

これはあなたにとって「機能しない」ものと一致しますか?

もしそうなら-素晴らしい。そうでない場合は、スクリプトエディターで各スクリプトをステップ実行し、プログラムが「スクリプト外」になる場所を確認します。また、https://latenightsw.com Script Debugger をご覧になることをお勧めします一部の基本的な機能は無料で実行されますが、Appleのより基本的なエディターでスクリプトをステップ実行するよりも時間を重視する場合は、$フルバージョンのためにあなたに$。

また、繰り返しやループに関する本は、すべてが明確でない場合に行くのに適した場所かもしれません。気を悪くしないでください。つまずきながら学ぶには絶好の場所です。ループを取得したら、AppleScriptだけでなく、あらゆるスクリプト言語で驚くべきことを行うことができます。


1
まさにこのような答えで、あなたが145kの評判を得たことを本当に願っています。これは素晴らしいです。StackExchangeのすべての答えが抽象的なたとえ話であったらいいのですが。
CJK

痛い-私は思う;)
bmike

2
いいえ、私は本当にこの答えが大好きです。必ずしも+1したいわけではありませんが、間違いなく❤したいです。
CJK

2
@CJKの場合は、親切なコメントに感謝します。それは本当に私を動かし、特定の+1や-1ではありません。時々、この抽象的な答えが本当にうまく行きませんし、それも得ます。
bmike

大好きです!:)ストーリーテリングは間違いなく、メッセージを教えたり伝えるための最良の方法の1つです!
Monomeeth

1

作業中にバックグラウンドでKontaktの[OK]ボタンをクリックしようとしていました。これは私の問題を解決しました:

tell application "System Events"
    if exists of application process "Kontakt 5" then
        tell application "Kontakt 5.6.0" to activate
        delay 0.5
        repeat
            try
                click UI element "OK" of window 1 of application process "Kontakt 5"
            end try
        end repeat
    end if
end tell
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.