В настоящее время я использую Applescript для расчета размера и положения окна слева направо, что отлично работает. Вот пример, когда я пытаюсь расположить окно как «Левую половину экрана».
tell application "System Events"
tell application process "Xcode"
activate
tell window 1 to set size to {(1600) / 2, 814}
tell window 1 to set position to {0, 0}
end tell
end tell
Я пытаюсь работать над позиционированием окна «Правая половина экрана» (технически я могу рассчитать это, установив X = screenWidth/2, но проблема в том, что окно приложения Xcode некоторая часть экрана не видна user, где, как если бы я вычислял его справа, я могу убедиться, что все окно отображается на экране для пользователя.
Фактический результат: https://share.cleanshot.com/COYgKD
Ожидаемый результат: https://share.cleanshot.com/BIELCA
Цель: показать правую половину окна, чтобы все окно было видно пользователю на экране.
Любая помощь приветствуется
Как насчет x = screenWidth - windowWidth
?
Каковы размеры вашего дисплея в пикселях? Ваше хромированное окно, очевидно, занимает больше половины экрана. Кроме того, вы не можете расположить окно над строкой меню так идеально, что вы должны учитывать это при своих вертикальных расчетах. Кроме того, на дисплеях Retina вам может потребоваться уменьшить вдвое используемые числа. Наконец, почему у вас есть это внутри двух блоков Tell?
Чтобы получить размеры вашего экрана:
tell application id "com.apple.finder" to set ¬
[null, null, screenW, screenH] to the ¬
bounds of the desktop's window
Я считаю, что XCode поддерживает сценарии, поэтому нет необходимости вызывать системные события, чтобы получить или установить его размер и положение. Однако окна приложений с поддержкой сценариев предлагают это с помощью свойства bounds
, как и desktop's window
выше:
tell application id "com.apple.Xcode" to tell ¬
window 1 to tell (a reference to its bounds)
set [X, Y, W, H] to its contents
set |𝚫𝓍| to W - screenW
set its contents to [X - |𝚫𝓍|, Y, W - |𝚫𝓍|, H]
end tell
Это выровняет окно по правому краю экрана, даже если оно уже полностью видно на вашем экране. Чтобы он влиял на перемещение только в том случае, если это требуется, вставьте такое условие, что |𝚫𝓍| > 0
.
The following is a functionally identical version of the last code block, but utilising statements that are formulated in a more explicit manner:
tell application id "com.apple.Xcode" to tell ¬
the front window to if (it exists) then
set [X, Y, W, H] to the bounds
set |𝚫𝓍| to W - screenW
set the bounds to [X - |𝚫𝓍|, Y, W - |𝚫𝓍|, H]
end tell
I added a check to make sure the front window
(which is identical to and equivalent terminology for window 1
) exists, so in cases where there are no windows, the script won't throw an error.
Here, the bounds
property is explicitly accessed by value whenever we need to retrieve or set its value, compared to the version above where the property was being accessed by reference. In this situation, there's no tangible difference between the two methods.
из того, что я понимаю, используйте содержимое для скриптовых приложений и для не скриптового использования размера/позиции? @cjk
Нет, дело не в их скриптовости, дело в иерархии объектов. size
и position
— это свойства объектов класса window
, которые являются дочерними элементами элементов process
системных событий, что имело место в исходном сценарии. Это относится ко всем приложениям, поскольку он обходит любой интерфейс с поддержкой сценариев и просто взламывает пользовательский интерфейс для управления элементами на экране. Тем не менее, для приложений, которые поддерживают сценарии, сценарии гораздо лучше. Объекты класса window
, принадлежащие родительскому элементу application
(как в моем скрипте), имеют свойство bounds
.
contents
не имеет к этому никакого отношения, но относится к тому, как я использую (a reference to...)
, который извлекает ссылку (или указатель) на свойство bounds
, а не оценивает его сразу. Вызов contents
вызывает разыменование свойства и возвращает его значение (когда оно читается) или возвращает указатель вставки (когда мы хотим установить для свойства новое значение). Возможно, мне не стоило писать решение так непрозрачно. Я добавлю версию, которая функционально идентична, но более ясна в том, как она работает.
Каковы значения
screenWidth
, положение и размер окна на изображениях?