0

我正在尝试根据当前"open"应用程序的应用程序来处理不同的事件 - 屏幕最前面的那个。我设法使用变量保存了应用程序的名称。使用此代码。

tell application "System Events" 

    item 1 of (get name of processes whose frontmost is true)
    set openWindow to (get name of processes whose frontmost is true)
    do shell script "echo " & openWindow & " > /Users/name/temp/currentWindow.txt"

end tell

然后我尝试使用此代码为每个打开的应用程序执行不同的事件

tell application "System Events"

  if openWindow = "AppleScript Editor" then
    display dialog "my variable: " & openWindow
  end if

end tell

但是,此代码不适合做任何事情,我没有任何错误消息或任何内容,但是代码不显示对话框。如果我将对话框的代码放在代码的第一部分,它将显示打开的应用程序的名称。

关于如何使它工作的任何想法,这将非常有帮助

4

2 回答 2

1

为了解释你的问题,这是因为这段代码......

set openWindow to (get name of processes whose frontmost is true)

该代码返回一个项目列表。请注意,您要求提供流程(复数),因此您可以获得多个流程,因此无论是否找到一个或多个项目,applescript 都会将其作为列表提供给您。奇怪的是,在上面的行中,您确实要求列表中的“项目 1”,但由于某种原因,您对该行代码没有做任何事情。通常我会像这样写那行代码,所以我只得到第 1 项......

set openWindow to name of first process whose frontmost is true

无论如何,您不能将字符串“AppleScript Editor”与列表 {“AppleScript Editor”} 进行比较。它们不相等,因此您的 if 语句永远不会为真。

显示对话框显示一个字符串。因此,当您将该代码移到 if 语句之外时,applescript 足够聪明,可以将您的列表转换为字符串以便显示。

所以底线是你得到一个列表,你必须访问列表中的项目。这些项目是字符串,所以得到一个(在你的情况下你想要项目 1)并在 if 语句中使用它。

希望你能从这个解释中学到东西。祝你好运。

于 2013-01-13T22:15:20.183 回答
0

在第一个脚本中,将 openWindow 变量转换为字符串:

set openWindow to (get name of processes whose frontmost is true) as string
于 2013-01-13T09:23:15.313 回答