这有点深入,我有点过头了。我从来没有使用过AWK,而且我尝试了解它的时间越多(或许它是时间已晚),它就越令人沮丧。
我正在尝试编写一个AppleScript脚本,以便在我的显示器上调整窗口大小。现在,我可以采用简单的方法并将我的显示器尺寸硬编码到脚本中,但我决定尝试动态地收集它们。我设法找到了一个解析plist并吐出ALMOST可用信息的代码片段,这里是AppleScript:
set screenInfo to do shell script "defaults read /Library/Preferences/com.apple.windowserver | awk '
BEGIN { FS=\"= \" }
/Active/ { screens++ }
{ gsub(\";\",\"\",$2) }
/^ *OriginX/ { ox[screens] = $2 }
/^ *OriginY/ { oy[screens] = $2 }
/^ *Width/ { w[screens] = $2 }
/^ *Height/ { h[screens] = $2 }
END {
for (si=1;si<=screens;si++) {
print ox[si],oy[si],w[si],h[si]
}
}'"
return screenInfo
end getScreenInfo
那个工作得很好 - 在我的&#34;结果&#34;窗口,我得到以下内容:
"0 0 1920 1080
\"-1600\" 0 1600 1200
1920 0 1680 1050
0 0 1920 1080
\"-1600\" 0 1600 1200
1920 0 1680 1050
3600 1050 1024 768 "
第一个数字对是显示器左上角的坐标,第二个数字对是该显示器的分辨率。每个显示器都是这种情况 - 尽管显示器1-3的重复,加上鬼影监视器。我并不十分关心它,它应该是可以解析的。
我的问题出现在我尝试将这些数字解析为整数以便我可以使用它们时 - 使用类似set theVar to word 1 of paragraph 2 of theString as integer
的内容,它会解析为1600
,而不是-1600
需要它。我尝试逐步浏览整个字符串,一次删除1个字符,但我认为这些只会显示在结果窗口中 - 当我display dialog
时,它们不会显示。即使我没有尝试将其解析为整数,只需word 1 of paragraph 2
它就会忽略-
并返回"1600"
。我怎么解析这个?天哪,我现在不是苹果的粉丝。
答案 0 :(得分:3)
您可以使用AppleScriptObjC
获取屏幕分辨率use framework "Foundation"
set screenFrames to {}
set screens to current application's NSScreen's screens()
repeat with aScreen in screens
set end of screenFrames to aScreen's frame() as record
end repeat
screenFrames
将包含每个屏幕的记录,其中包含origin
和x
成员的记录y
以及size
和width
height
1}}成员。
例如,您可以使用
获取屏幕1的宽度set screen1Width to width of |size| of item 1 of screenFrames as integer