gpt4 book ai didi

javascript - 是否可以将 key 代码发送到不在前面的应用程序?

转载 作者:行者123 更新时间:2023-12-03 03:30:50 33 4
gpt4 key购买 nike

我正在用 Javascript 编写一个简单的 Automator 脚本。

我想向不在前面的 OS X 应用程序发送键码(或键阙)。

基本上,我想在脚本打开某个应用程序、编写文本并按 Enter 键时运行此代码并执行我的操作 - 所有这些都不会打扰我的其他工作。

我想要这样的东西:
Application("系统事件").processes['someApp'].windows[0].textFields[0].keyCode(76);

在Script Dictionary中,Processes Suite下有keyCode方法。但是,上面的代码会引发以下错误:
执行错误:第 16 行错误:错误:命名参数必须作为对象传递。 (-2700)

我知道以下代码可以正常工作,但它要求应用程序在前面运行:
//键码 76 => “输入”
Application("系统事件").keyCode(76);

更新:我正在尝试在 iTunes(Apple Music) 上搜索某些内容。如果不预先安装 iTunes 应用程序,这可能吗?

最佳答案

借助GUI脚本(辅助功能),可以在应用程序中编写不在前面的文本,但是:

  • 您需要知道您的特定窗口中有哪些 UI 元素应用程序,并了解其属性和特性特定元素。
  • 您需要在系统偏好设置 --> 安全性中添加脚本
    & 隐私 --> 辅助功能
<小时/>

这是一个示例脚本(在 ma​​cOS Sierra 上测试),用于在“TextEdit”应用程序的前端文档中的光标位置写入一些文本。

Application("System Events").processes['TextEdit'].windows[0].scrollAreas[0].textAreas[0].attributes["AXSelectedText"].value = "some text" + "\r" // r is the return KEY
<小时/>

更新

要将一些关键代码发送到后台应用程序,您可以使用Carbon框架的CGEventPostToPid()方法。

以下是在 iTunes 中搜索某些文本的脚本(适用于我的电脑、ma​​cOS SierraiTunes 版本 10.6.2)。

ObjC.import('Carbon')
iPid = Application("System Events").processes['iTunes'].unixId()
searchField = Application("System Events").processes['iTunes'].windows[0].textFields[0]
searchField.buttons[0].actions['AXPress'].perform()
delay(0.1) // increase it, if no search
searchField.focused = true
delay(0.3) // increase it, if no search
searchField.value = "world" // the searching text
searchField.actions["AXConfirm"].perform()
delay(0.1) // increase it, if no search

// ** carbon methods to send the enter key to a background application ***
enterDown = $.CGEventCreateKeyboardEvent($(), 76, true);
enterUp = $.CGEventCreateKeyboardEvent($(), 76, false);
$.CGEventPostToPid(iPid, enterDown);
delay(0.1)
$.CGEventPostToPid(iPid, enterUp);

关于javascript - 是否可以将 key 代码发送到不在前面的应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46107149/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com