使用变量时无法对齐窗口→无法使{\“string \”}成为整数类型

时间:2013-07-19 17:14:30

标签: variables window alignment applescript systemevent

尝试学习AppleScript。你在我的第一个雄心勃勃的项目的一部分下面看到了什么。如果您还打开了TextEdit窗口,它会被修改,以便可以在AppleScript编辑器中进行测试。

脚本的作用:

  • 从列表中选择编辑
  • 对齐两个打开的窗口

我的问题:

只有在我关闭变量时才对齐窗口。只要我将列表selectedEditor)中返回的变量替换为字符串tell process "TextEdit",就可以了。

我希望有人能发现错误。

事件日志中的错误代码:

System Events got an error: Can’t make {"TextEdit"} into type integer.

以下是代码:

property myEditors : {"TextEdit", "Sublime Text 2"}
set the editorList to myEditors as list

set selectedEditor to choose from list the editorList

set lngWidth to word 3 of (do shell script "defaults read /Library/Preferences/com.apple.windowserver | grep -w Width")
set lngHeight to word 3 of (do shell script "defaults read /Library/Preferences/com.apple.windowserver | grep -w Height")
set lngHalf to lngWidth / 2
set lngHeight to lngHeight - 22

tell application id "sevs"
    tell process selectedEditor to tell window 1 to set {position, size} to {{lngHalf, 22}, {lngHalf, lngHeight}}
    tell process "AppleScript Editor" to tell window 1 to set {position, size} to {{0, 22}, {lngHalf, lngHeight}}
end tell

2 个答案:

答案 0 :(得分:0)

我看到这个错误的唯一线索是:

“errAEIllegalIndex:index在put操作中超出范围”

我没有/拥有Marked,所以我不知道AppleScript的局限性/潜力。既然你是AppleScript的新手,我会问你是否确定Marked.app不是可编写脚本的,也就是说,如果你确定它没有合适的脚本词典(根本)。将应用程序文件拖放到AppleScript脚本编辑器上会告诉您(要么它显示应用程序的字典,要么告诉您它无法读取它)。使用系统事件的唯一原因是应用程序不是可编写脚本的,或者是以非常有限的方式编写脚本。大多数具有有限脚本性的应用程序都具有属性的窗口对象。

例如,Firefox(我现在正在使用)具有有限的脚本性并允许我设置其窗口的界限:

tell application "Firefox"
    set bounds of window 1 to {137, 22, 1345, 809}

    properties of window 1
end tell

...并且还获得了它的windows属性(tell中的第二行)。

我很抱歉,如果这对您来说很明显,并且您已经确定Marked没有此功能,但这是首先要检查的,就像我说的那样,我没有Marked。

答案 1 :(得分:0)

错误“系统事件出错:无法使{”TextEdit“}成为整数类型。”告诉你这个问题。 {“TextEdit”}是包含一个项目的列表。这就是你从“从列表中选择”声明中得到的结果。因此,将该陈述改为此......

set selectedEditor to item 1 of (choose from list the editorList)

这将为您提供“TextEdit”,这是一个字符串,而不是{“TextEdit”}这是一个列表。

此外,此声明是不必要的,因为myEditors已经是一个列表,如周围的括号所示。只需在“从列表中选择”命令中直接使用myEditors即可。

set the editorList to myEditors as list