0

我正在 xcode 4 中创建一个 applescript 应用程序,并寻求一些指导。我已经做了很多阅读和搜索互联网,但找不到我正在寻找的答案。我有一个带有文本框和按钮的主窗口。我希望能够用 hostname123 替换文本框中的文本,以便命令是:执行 shell 脚本“sudo scutil --set HostName”和 [文本框的值]。我设置了按钮事件,以便在单击时执行命令。有人可以协助获取文本框的值以便在命令中使用它吗?

on ButtonHandlerVolumeSetting0_(sender)
    do shell script "sudo scutil --set HostName hostname123" 
end ButtonHandlerVolumeSetting0_
4

1 回答 1

0

首先,我假设这是 in AppleScriptObjC,而不是旧的AppleScript Studio.

首先,您需要使 AppleScript 等效于 an IBOutlet,它是一个实例变量(或属性),它引用文本字段并允许 Objective-C 代码(或 AppleScript)与之通信。在 AppleScript 脚本的顶部,添加如下一行:

script MDAppDelegate
    property parent : class "NSObject"

    property hostNameTextField : missing value -- add this line

然后,您需要从 nib 文件中的脚本实例按住 Control 并拖动到窗口中的文本字段以“连接”此插座。

[更新]:从您收到的错误消息来看,听起来您没有hostNameTextField在 nib 文件中正确设置此连接。

下图中显示的 nib 文件中的MDAppDelegate蓝色立方体图标代表 AppleScript 脚本的一个实例,该脚本将在加载该 nib 文件时在运行时创建。您可能已经正确地建立了从按钮到蓝色 AppleScript 立方体的“连接”,它指定当您单击按钮时,它应该调用ButtonHandlerVolumeSetting0_()函数(又名 AppleScript 处理程序)。您现在需要选择您的蓝色 AppleScript 立方体实例,如下图所示,然后右键单击(或按住 Control 单击)并从蓝色立方体拖动到您的输入文本字段,如下图所示。

在此处输入图像描述

当您松开鼠标按钮时,它应该会显示一个黑色弹出面板,其中包含您可以“连接”到文本字段的可能属性。选择hostNameTextField

在此处输入图像描述

之后,当您选择蓝色 AppleScript 立方体时,在右侧实用工具区域的连接检查器中,您可以看到 AppleScript 脚本的连接。在 下Outlets,您会看到hostNameTextField出口,在 下Received Actions,您会看到ButtonHandlerVolumeSetting0_()

虽然该hostNameTextField属性在 AppleScript 中设置为初始值missing value(AppleScript 等效于 Objective-C 的nil),但通过在 nib 文件中建立此连接,在运行时,该值hostNameTextField将设置为NSTextField您指定的值。这将允许脚本和归档到 nib 文件中的对象层次结构之间的通信。

[更新结束]

An继承了从其超类NSTextField命名的方法。此方法将文本字段的内容作为(等同于 AppleScript )返回。因此,在按钮单击处理程序中,您可以获得字符串值,如下所示:stringValueNSControlNSStringstring

on ButtonHandlerVolumeSetting0_(sender)
    set hostName to hostNameTextField's stringValue()
    do shell script ("/usr/sbin/scutil --set HostName " & hostName) with administrator privileges
end ButtonHandlerVolumeSetting0_

使用 时do shell script,通常最好sudo从脚本本身中省略任何包含,而是添加with administrator privileges限定符。这对 AppleScript 意味着您需要以提升的权限运行脚本,它将处理显示标准身份验证对话框。

于 2012-11-30T04:25:20.923 回答