AppleScriptがアクティブなアプリケーションを取得


13

display dialog("test")「Finder」アプリケーションが現在フォーカス/アクティブになっている場合にのみ、AppleScriptを使用してコード(たとえば)を実行するにはどうすればよいですか。


アプリケーションが既にアクティブになっている場合、再度アクティブにすることで何を達成することを目指していますか?
ケント

stackoverflow.com/questions/3718520/…アイドルは関連していますが、問題は解決しません。
ウィリアム

質問を明確にする必要があります。私の答えのスクリプトは、「works」の定義に対して機能します。つまり、Finderが最前面にあるかどうかを正確に報告します。
鉄人

@鉄人更新
ウィリアム

Applescriptアプリをどのように起動しますか?もちろん、ダブルクリックすると、常にFinderが最前面から2番目に表示されます。回答の変更-これはスクリプトエディターから呼び出された場合は機能しますが、Finderでダブルクリックすると誤検出になるため、「失敗」します
鉄人

回答:


18

これは、スクリプトがスクリプトエディターから呼び出された場合に機能します。「邪魔にならない」ため、次のアプリをチェックしますが、Finderからダブルクリックすると、Finderは常に最後に並んでいるため、失敗します。

tell application "System Events"
    set frontmostProcess to first process where it is frontmost
    set visible of frontmostProcess to false
    repeat while (frontmostProcess is frontmost)
        delay 0.2
    end repeat
    set secondFrontmost to name of first process where it is frontmost
    set frontmost of frontmostProcess to true
end tell

tell application (path to frontmost application as text)
    if "Finder" is in secondFrontmost then
        display dialog ("Finder was last in front")
    else
        display dialog (secondFrontmost & " was last in front")
    end if
end tell

後世のために前の回答をここに残します

最初に質問を適切に読んでいないため、回答全体を再ジジしました;-)

tell application "System Events"
    set activeApp to name of first application process whose frontmost is true
    if "Finder" is in activeApp then
        display dialog ("test")
    else
        display dialog ("test2")
    end if
end tell

+1提案されたソリューションはそのままでは機能しないようです。アプリケーションが開いている限り「テスト」を受けますが、必ずしもアクティブであるかどうかは関係ありません。
ウィリアム

再考…編集された答え
鉄人

完全に書き直して、デスクトップに戻りました。これは、まさにあなたが要求したとおりになります。
鉄人

2
また、2番目のダイアログコマンドを置き換えてdisplay dialog (activeApp)、スクリプトが最前面と考えるものを正確に確認することもできます。
ケント

1
これには注意してください-一部のアプリのアプリ名(例tell application "app_name":)は、プロセス名(例:)と異なりますset frontmost of process "app_process" to true
BallpointBen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.