4

マルチモニター設定でウィンドウをレイアウトするために使用するスクリプトがあります。Mavericks にアップグレードした後、次のエラーが表示されます。

Organize Windows is not allowed assistive access.

Apple サポートを調べたところ、http ://support.apple.com/kb/HT5914 を見つけました。 そこに記載されている手順に従いました。アプレットに署名しましたが、あまり成功しませんでした。エラーはまだ発生します。

まず、2 番目のプロンプトは、スクリプトがアプリケーションとしてエクスポートされ、/Applications に配置された場合にのみ発生します。たとえば、スクリプトをドキュメント (アプリのようにバンドルされている) に配置すると、ポップアップしません。

すべてのアプレットが表示されると、システム環境設定で「アプレット」として表示されます (識別子があるため、これは奇妙です)。

この種のスクリプトの実行に成功した人はいますか? セキュリティチェックをグローバルに無効にする方法はありますか? (ないと思いますが、聞いてみる価値はあります)

以下はスクリプトです。いくつかのアプリを起動して画面に配置するだけです。

#Query desktop area
tell application "Finder"
    set displayAreaDimensions to bounds of window of desktop
    set widthOfDisplayArea to item 3 of displayAreaDimensions
    set heightOfDisplayArea to item 4 of displayAreaDimensions
end tell

tell application "System Events" to tell process "Dock"
    set dockPosition to position in list 1
    set dockDimensions to size in list 1
    set heightOfDock to item 2 of dockDimensions
    set positionOfDock to item 2 of dockPosition
end tell

# Space between windows
set padding to 7

# This assumes that the Apple Cinema Display 27" is to the right
# of the Macbook Pro
set idea_w to 1600
set idea_h to 1440
set idea_base_x to 1680

set iterm_w to 2560 - idea_w - padding
set iterm_h to 1000
set iterm_base_x to idea_base_x + idea_w + padding

#If we're in a single monitor configuration
if widthOfDisplayArea is 1680 and heightOfDisplayArea is 1050 then
    # Override sizes
    set idea_base_x to 0
    set iterm_base_x to 0
    set idea_w to widthOfDisplayArea
    set idea_h to (heightOfDisplayArea - heightOfDock)
    set iterm_w to 1024
    set iterm_h to (heightOfDisplayArea - heightOfDock)
end if

checkRunning("IntelliJ IDEA 11", 10)
checkRunning("iTerm", 0)

placeWindow("IntelliJ IDEA", idea_base_x, 0, idea_w, idea_h)
placeWindow("iTerm", iterm_base_x, 0, iterm_w, iterm_h)

#Helper to launch as necessary
on checkRunning(theName, theDelay)
    if application theName is not running then
        tell application theName to activate
        delay theDelay
    end if
end checkRunning

on placeWindow(theProcess, x, y, w, h)
    tell application "System Events" to tell process theProcess
        set allWindows to (every window)
        repeat with aWindow in allWindows
            set position of aWindow to {x, y}
            set size of aWindow to {w, h}
        end repeat
    end tell
end placeWindow
4

2 に答える 2

7

マイナーなオーディオの不具合に対処するために作成したスクリプト アプリでも、まったく同じ問題が発生していました。起動時に起動するように設定し、Assistive Access で許可し、Apple サポートで見つけたように署名しましたが、起動するたびにエラーが発生しました。

最終的に問題を解決したのは、スクリプト コードを新しいスクリプト ファイルにコピー アンド ペーストし、別の名前でアプリケーションとして保存し、署名することでした。最終的に実行すると、Assistive Access で許可するかどうか尋ねられたので、以前と同じように起動時に開始するように設定しました。再起動しただけで、問題なく動作しました。

于 2013-11-03T14:11:36.550 に答える
2

Red Five の回答はすばらしいものですが、注意すべき点がいくつかあります。

補助アクセス機能の使用を編集するためにスクリプトを編集する場合、補助アクセスへの署名と再許可は、スクリプト内の補助アクセス機能の既存の使用に対してのみ機能します。補助アクセス機能を新たに使用すると、「XYZ は補助アクセスを許可されていません」というメッセージが表示されます。エラー。その時点で、スクリプトの内容を別の名前の新しいスクリプトにコピーすることが、スクリプト全体で補助アクセス機能を使用できるようにする唯一の方法のようです。補助アクセス機能を含まないその他の編集では、補助アクセスを再度許可する必要があり、スクリプトをコピーする必要はありません。これにより、補助アクセス機能のデバッグがやや面倒になります。

また、コードが try ブロックでラップされている場合、「XYZ は支援アクセスを許可されていません」というメッセージが表示されないことにも注意してください。エラーなので、デバッグするには、try/end-try 行をコメントアウトする必要があります。

コードの署名を削除して再適用するなど、この必要性を回避する方法があるかもしれませんが、私はそれを理解しようとはしていません.

于 2015-03-06T22:29:57.267 に答える