2011-05-03 10 views
6

Mam ustawione dwa monitory i próbuję ustawić okno aplikacji na drugim monitorze, ale nic, co robię, nie działa. Na przykład używam laptopa, a okno terminala jest zmaksymalizowane na ekranie. Następnie podłączam zewnętrzny monitor. Następnie chcę uruchomić skrypt jabłkowy i zmaksymalizować terminal na większym drugim monitorze.Pozycjonowanie okna za pomocą AppleScript za pomocą dwóch monitorów

Oto co mam teraz:

set monitorTwoPos to {1050, -600} 
set monitorTwoSze to {1200, 1920} 

tell application "Microsoft Outlook" 
    set position of window 1 to monitorTwoPos 
    set size of window 1 to monitorTwoSze 
end tell 

Tutaj jest błąd pojawia się:

 
/Users/vcutten/AppleScripts/SpacesWork.scpt:1291:1332: execution error: 
Microsoft Outlook got an error: Can’t make position of window 1 into type specifier. (-1700) 

Jestem całkiem pewien, że jestem tylko przy użyciu pozycji zadanej i ustaw rozmiar całkowicie błędne :(Kiedy użyłem granic to rodzaj prac ...

Pytanie dodatkowe: Jak mogę przechodzić przez otwarte okna i uzyskać ich rozmiar? Dziękujemy!

Odpowiedz

2

Co próbowaliście?

Myślę, że aby rozwiązać ten problem, musisz obliczyć rozmiar ekranu i współrzędne drugiego monitora. Na przykład twój główny monitor zaczyna od pozycji {0,0}. Tak więc pozycja wyjściowa drugiego monitora musi być inna i trzeba to znaleźć. Na szczęście napisałem narzędzie, które da ci zarówno początkowe współrzędne, jak i rozmiar ekranu monitorów. Kiedy już masz rozmiar i położenie, to jest to proste. Zdarzenia systemowe można ustawić rozmiar i położenie okna więc można zrobić coś takiego ...

set monitorSize to {800, 600} 
set monitorPosition to {-800, 0} 

tell application "System Events" 
    tell process "Terminal" 
     set frontWindow to first window 
     set position of frontWindow to monitorPosition 
     set size of frontWindow to monitorSize 
    end tell 
end tell 

więc z powyższego skryptu wystarczy rozmiar i położenie zmienne. Możesz dostać moje narzędzie here o nazwie hmscreens, które da ci te. Być może trzeba będzie trochę dopasować współrzędne w zależności od tego, czy ekran jest mierzony od lewego dolnego rogu, czy od lewego górnego rogu, ale to po prostu prosta matematyka.

Mam nadzieję, że pomaga ...

+0

Dzięki za odpowiedź! Zaktualizowałem pytanie z tym, o co prosiłeś ... Czuję, że po prostu nie używam poprawnie ustawionej pozycji :( – gdoubleod

0

Stosować granice zamiast pozycji, to działa. Można uzyskać granice okna tak:

tell application "Microsoft Outlook" 
    get bounds of first window 
end tell 

odpowiedź na pytanie bonus:

tell application "Microsoft Outlook" 
    repeat with nextWindow in (get every window) 
     get bounds of nextWindow 
    end repeat 
end tell 

Jeśli zakładka otwierania Odpowiedzi na dolnej części edytora AppleScript, widać wszystkie wyniki.

Mam nadzieję, że to pomaga.

1

Oto skrypt, który obsługuje zapisywanie i przywracanie rozmiaru i położenia dla wielu konfiguracji wyświetlania. Może mieć pewne problemy z aplikacjami pełnoekranowymi, ale wygląda na to, że działa poprawnie.

-- allSettings is a list of records containing {width:? height:? apps:{{name:? pos:? size:?},...} 
-- for each display setup store the apps and their associated position and size 
property allSettings : {} 

-- create a variable for the current settings 
set currentSettings to {} 

display dialog "Restore or save window settings?" buttons {"Restore", "Save"} default button "Restore" 
set dialogResult to result 

tell application "Finder" 

    -- use the desktop bounds to determine display config 
    set desktopBounds to bounds of window of desktop 
    set desktopWidth to item 3 of desktopBounds 
    set desktopHeight to item 4 of desktopBounds 
    set desktopResolution to desktopWidth & "x" & desktopHeight 

    -- find the saved settings for the display config 
    repeat with i from 1 to (count of allSettings) 
     if (w of item i of allSettings is desktopWidth) and (h of item i of allSettings is desktopHeight) then 
      set currentSettings to item i of allSettings 
     end if 
    end repeat 

    if (count of currentSettings) is 0 then 
     -- add the current display settings to the stored settings 
     set currentSettings to {w:desktopWidth, h:desktopHeight, apps:{}} 
     set end of allSettings to currentSettings 
     --say "creating new config for " & desktopResolution 
    else 
     --say "found config for " & desktopResolution 
    end if 

end tell 

tell application "System Events" 

    if (button returned of dialogResult is "Save") then 
     say "saving" 
     repeat with p in every process 
      if background only of p is false then 
       tell application "System Events" to tell application process (name of p as string) 

        set appName to name of p 

        if (count of windows) > 0 then 
         set appSize to size of window 1 
         set appPosition to position of window 1 
        else 
         set appSize to 0 
         set appPosition to 0 
        end if 

        set appSettings to {} 

        repeat with i from 1 to (count of apps of currentSettings) 
         if name of item i of apps of currentSettings is name of p then 
          set appSettings to item i of apps of currentSettings 
         end if 
        end repeat 

        if (count of appSettings) is 0 then 
         set appSettings to {name:appName, position:appPosition, size:appSize} 
         set end of apps of currentSettings to appSettings 
        else 
         set position of appSettings to appPosition 
         set size of appSettings to appSize 
        end if 

       end tell 
      end if 
     end repeat 
    end if 

    if (button returned of dialogResult is "Restore") then 
     if (count of apps of currentSettings) is 0 then 
      say "no window settings were found" 
     else 
      say "restoring" 
     repeat with i from 1 to (count of apps of currentSettings) 
      set appSettings to item i of apps of currentSettings 
      set appName to (name of appSettings as string) 
      try 
       tell application "System Events" to tell application process appName 
        if (count of windows) > 0 then 
         set position of window 1 to position of appSettings 
         set size of window 1 to size of appSettings 
        end if 
       end tell 
      end try 
     end repeat 
     end if 
    end if 
end tell 

https://gist.github.com/cmackay/5863257

Powiązane problemy