4

実行中のすべてのアプリケーションのすべてのウィンドウのサイズを選択できるようにするapplescriptスクリプトを作成しようとしています(現在はStayを使用していますが、グリッチが発生することがあるので、「再発明」したいと思います)
。いくつかのアップルスクリプトのチュートリアルに従っていて、そうするために次のコードを考え出しましたが、それはバグがあります:

tell application "Finder"
    set rect to bounds of window of desktop
end tell

property excludedApplicationNames : {"Finder"}
tell application "System Events"
    say "a"
    repeat with theProcess in processes
        say "b"
        if background only of theProcess is false then
            say "c"
            set theProcessName to name of theProcess as string
            if theProcessName is not in excludedApplicationNames then
                say theProcessName
                tell application theProcess
                    set bounds of windows of process theProcess to rect
                end tell
            end if
        end if
    end repeat
end tell
say "done"

問題は、このコードが私の唯一のターミナルウィンドウ(いくつかの開いているタブがある)に遭遇すると、エラーになることです:System Events got an error: Can’t set application (item 2 of every process) to {0, 0, 1280, 900}.System Events got an error: Can’t set application (item 2 of every process) to {0, 0, 1280, 900}.

に変更tell application theProcessしてtell application theProcessNameも効果はありません(同じエラー)。また、に変更してもtell application "System Events"(エラーSystem Events got an error: Can’t make item 2 of every process into type integer.:)

興味深いことに、これは期待どおりに機能します。

tell application "Finder"
    set rect to bounds of window of desktop
end tell

tell application "Terminal"
    repeat with theWindow in windows
        set bounds of theWindow to rect
    end repeat
end tell

だから私はとても混乱しています。
私は何が間違っているのですか?どうすればこれを修正できますか?

4

3 に答える 3

6
tell application "Finder"
    set {0, 0, dtw, dth} to bounds of window of desktop
end tell
tell application "System Events"
    repeat with p in (processes where background only is false)
        tell p
            if name is not in {"Finder"} then
                set position of windows to {0, 0}
                set size of windows to {dtw, dth}
            end if
        end tell
    end repeat
end tell
  • 私のMacでは約3秒かかりました
  • 端末ウィンドウを画面いっぱいに最大化します (Dock が占有する 4px 領域を除く)
tell application "Finder"
    set dtb to bounds of window of desktop
end tell
tell application "System Events"
    bundle identifier of processes where background only is false
end tell
repeat with bid in result
    tell application id bid
        try
            if name is not in {"Finder"} then
                set (bounds of windows where visible is true) to dtb
            end if
        end try
    end tell
end repeat
  • 私のMacでは約0.3秒かかりました
  • Preview や Reeder などのすべてのアプリケーションで動作するわけではありません
  • いくつかのアプリケーションのプロセス名とアプリケーション名が異なるため、バンドル識別子を使用します
  • ターミナル ウィンドウのサイズを変更して、上下に数ピクセルの空きスペースを確保します。

このスクリプトを使用して、ウィンドウを最大化します。

try
    tell application "Finder" to set dtb to bounds of window of desktop
    tell application (path to frontmost application as text)
        if name is in {"Terminal"} then
            error
        else
            set bounds of window 1 to dtb
        end if
    end tell
on error
    tell application "System Events" to tell (process 1 where it is frontmost)
        try
            click (button 1 of window 1 where subrole is "AXZoomButton")
        end try
    end tell
end try

基本的な AppleScript をサポートしていない多くのアプリケーションでは、ズーム ボタンもウィンドウを画面全体に最大化します。

于 2013-01-30T08:12:48.560 に答える
1

これは、ドックのサイズを考慮に入れています。私はモニターの右側に私のものを持っていますが、下にあるドックに合わせて簡単に変更できるはずです.

tell application "Finder"
    set dtb to bounds of window of desktop
end tell

tell application "System Events" to tell process "Dock"
    set dockDimentions to size in list 1
    set dockWidth to item 1 of dockDimentions
end tell

tell application "System Events"
    bundle identifier of processes where background only is false
end tell

repeat with bid in result
    tell application id bid
        try
            if name is not in {"Finder", "System Preferences", "Notepad", "Terminal", "Activity Monitor"} then
                set x to item 1 of dtb
                set y to item 2 of dtb
                set w to (item 3 of dtb) - dockWidth
                set h to item 4 of dtb
                set (bounds of windows) to {x, y, w, h}
            end if
        end try
    end tell
end repeat
于 2014-11-24T06:34:04.943 に答える
0

これは最終的に私のためにトリックをしました:

property blacklist : {"Finder", "Preview", "Console", "AppleScript Editor", "Spotify", "TaskCoach"}
property buttonApps : {"LyX", "Eclipse"}
property buttonMaps : {{name:"LyX", Button:1, pname:"lyx"}, {name:"Eclipse", Button:2, pname:"eclipse"}}

tell application "Finder" to set theBounds to bounds of window of desktop

tell application "System Events"
    set bids to bundle identifier of processes where background only is false
end tell

repeat with bid in bids
    tell application id bid
        if name is not in blacklist then
            set appName to name as string
            if name is "Terminal" then
                set newBounds to {0, 0, (item 3 of theBounds) - 10, item 4 of theBounds}
                repeat with theWindow in windows
                    if visible of theWindow is true then
                        say appName
                        set bounds of theWindow to newBounds
                    end if
                end repeat
            else if name is not in buttonApps then
                repeat with theWindow in windows
                    if visible of theWindow is true then
                        set bounds of theWindow to theBounds
                    end if
                end repeat
            else if name is in buttonApps then
                -- get the buttonNumber
                repeat with buttonApp in buttonMaps
                    if (name of buttonApp as string) is appName then
                        set theButton to Button of buttonApp
                    end if
                end repeat
                tell application "System Events"
                    repeat with theProcess in (processes where bundle identifier is bid)
                        try
                            tell theProcess to tell window 1 to click button theButton
                        end try
                    end repeat
                end tell
            end if
        end if
    end tell
end repeat

「Spotify」と「Task Coach」は、次の方法でサイズを変更できないため、ブラックリストに登録されていることに注意してください。

  1. ウィンドウ境界の設定
  2. 緑のボタンをクリック
  3. メニューバーの「ウィンドウ」>「ズーム」をクリック
  4. を使用して⌘</kbd>F10 shortcut that I had mapped it to.

誰かがより良い解決策を思い付くことができれば、私はすべて耳にします

于 2013-01-30T20:44:05.797 に答える