【问题标题】:Making a another applications's window frontmost and focused使另一个应用程序的窗口位于最前面并集中
【发布时间】:2010-09-14 04:34:26
【问题描述】:

我一直在尝试让另一个应用程序中的任何给定窗口成为最前面和最集中的窗口。

这是我尝试过的两种方法:

AppleScript

tell application "Safari"
   set index of window "Downloads" to 1
   activate
end tell

为什么它不起作用:虽然它似乎改变了 z-Order,但它并没有改变焦点!前一个最前面的窗口,即使被混淆,也会保持焦点。

CoreGraphicServices

CGSWindowOrder(cid, wid, kCGSOrderAbove, nil)

为什么它不起作用:如果不是通用所有者,您就无法更改另一个进程拥有的窗口的顺序。在这种情况下,让自己成为通用所有者不是一种选择——我不想废除 Dock。

回顾

我需要在最前面创建一个窗口,并将焦点从一个进程转移到另一个进程。 AppleScript 无法聚焦,并且 CGS 不是一个选项,因为我不拥有该窗口。

任何解决方案/想法?

【问题讨论】:

  • 您是否找到了适用于今天的解决方案?没有启用辅助功能?

标签: macos applescript core-graphics


【解决方案1】:

尝试使用 Accessibility API 将 AXPress 操作发送到 AXWindow。显然,用户需要能够访问已打开的辅助设备。

【讨论】:

  • 有什么简单的方法可以使用 CGSWindow 句柄/id 创建一个 AXWindow 吗?
  • 爱德华:不。获得 AXWindow 的唯一方法是在 AXApplication 的窗口中按标题查找窗口。这也意味着如果两个窗口有相同的标题,你就完蛋了。
  • @Noitidart:可访问性 API 仍然存在。 developer.apple.com/library/mac/documentation/Accessibility/…
  • @Noitidart:私有接口更多可能会从你的手下消失,而不是更少。那里没有真正好的解决方案,除了提交一个错误,要求改进可访问性权限系统的可用性(最好是对用户遇到的困难进行具体描述):bugreport.apple.com
  • @Noitidart:您应该为这些提交错误报告。以下是有关支持事件、它们的用途以及如何使用它们的信息:developer.apple.com/support/technical(错误报告和 TSI 并不相互排斥;提交错误报告以提醒 Apple 出现问题是有效的,然后使用TSI 尝试解锁自己。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-11
  • 1970-01-01
  • 2021-03-13
  • 2012-02-24
相关资源
最近更新 更多