如何判断最前面的 window 是 MacOS 中使用 Applescript 的 NSOpenPanel / 文件打开对话框?
How do I tell if the frontmost window is a NSOpenPanel / file open dialog in MacOS using Applescript?
我正在尝试使用 AppleScript 自动更改最前面的“文件打开对话框”或 NSOpenPanel 对话框的目录,无论 window 是任何应用程序的一部分。这个想法是我按下一个热键,它会控制那个对话框切换到一个特定的文件夹。
我似乎无法找到如何找到 window 的属性,以便为“文件打开对话框”过滤它。使用辅助功能检查器我可以发现“class”是 NSOpenPanel
。如何使用 Applescript 获取 window 的 class?
如果你运行下面的AppleScript,你可以看到最前面window的属性:
tell application "anApp" to activate
delay 1
tell application "System Events"
tell process "anApp"
properties of window 1
end tell
end tell
应用程序必须处于活动状态才能查看 windows 的属性;如果应用程序在后台运行,您将无法获得一致的结果。
应该可以通过测试以下属性的某些组合来识别 NOOpenPanel:
- 角色描述:“对话”
- 标题:“打开”
- 子角色:“AXDialog”
- 名称:“打开”
- 描述:“对话框”
就个人而言,我可能会依赖 name
和 role description
,只要应用程序通过标准 'Open' 对话框,它们应该是相同的。 'Save' 对话框将是相同的,除了 title
和 name
将是 'save' 而不是 'open'。
如果您的应用程序显示的是打开或保存 sheet(附加到标题栏的子 window),而不是单独的对话框,那么您需要稍微改变一下。获取属性的 AppleScript 如下所示:
tell application "anApp" to activate
delay 1
tell application "System Events"
tell process "anApp"
tell window 1
properties of sheet 1
end tell
end tell
end tell
相关可测试属性如下:
- 辅助功能说明:“保存”
- 角色描述:"sheet"
- 角色:“AXSheet”
- 描述:“保存”
您可能需要添加逻辑来测试前面的 window 是否有 sheet,这应该区分对话框和 sheets。
一些应用程序使用 non-standard open/save 对话框,您必须在 case-by-case 的基础上考虑它们。没有灵丹妙药。
我正在尝试使用 AppleScript 自动更改最前面的“文件打开对话框”或 NSOpenPanel 对话框的目录,无论 window 是任何应用程序的一部分。这个想法是我按下一个热键,它会控制那个对话框切换到一个特定的文件夹。
我似乎无法找到如何找到 window 的属性,以便为“文件打开对话框”过滤它。使用辅助功能检查器我可以发现“class”是 NSOpenPanel
。如何使用 Applescript 获取 window 的 class?
如果你运行下面的AppleScript,你可以看到最前面window的属性:
tell application "anApp" to activate
delay 1
tell application "System Events"
tell process "anApp"
properties of window 1
end tell
end tell
应用程序必须处于活动状态才能查看 windows 的属性;如果应用程序在后台运行,您将无法获得一致的结果。
应该可以通过测试以下属性的某些组合来识别 NOOpenPanel:
- 角色描述:“对话”
- 标题:“打开”
- 子角色:“AXDialog”
- 名称:“打开”
- 描述:“对话框”
就个人而言,我可能会依赖 name
和 role description
,只要应用程序通过标准 'Open' 对话框,它们应该是相同的。 'Save' 对话框将是相同的,除了 title
和 name
将是 'save' 而不是 'open'。
如果您的应用程序显示的是打开或保存 sheet(附加到标题栏的子 window),而不是单独的对话框,那么您需要稍微改变一下。获取属性的 AppleScript 如下所示:
tell application "anApp" to activate
delay 1
tell application "System Events"
tell process "anApp"
tell window 1
properties of sheet 1
end tell
end tell
end tell
相关可测试属性如下:
- 辅助功能说明:“保存”
- 角色描述:"sheet"
- 角色:“AXSheet”
- 描述:“保存”
您可能需要添加逻辑来测试前面的 window 是否有 sheet,这应该区分对话框和 sheets。
一些应用程序使用 non-standard open/save 对话框,您必须在 case-by-case 的基础上考虑它们。没有灵丹妙药。