Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以向不在前面的应用程序发送密钥代码?_Javascript_Macos_Applescript_Automator - Fatal编程技术网

Javascript 是否可以向不在前面的应用程序发送密钥代码?

Javascript 是否可以向不在前面的应用程序发送密钥代码?,javascript,macos,applescript,automator,Javascript,Macos,Applescript,Automator,我正在用Javascript编写一个简单的自动机脚本 我想向不在前面的OSX应用程序发送密钥代码(或密钥存储) 基本上,我希望在脚本打开某个应用程序、编写文本和按enter键时运行此代码并执行我的操作—所有这些都不会影响我的其他工作 我想要这样的东西: 应用程序(“系统事件”)。进程['someApp'].windows[0]。文本字段[0]。键码(76); 在脚本字典中,processs Suite下有keyCode方法。 但是,上面的代码会引发如下错误: 执行错误:第16行错误:错误:

我正在用Javascript编写一个简单的自动机脚本

我想向不在前面的OSX应用程序发送密钥代码(或密钥存储)

基本上,我希望在脚本打开某个应用程序、编写文本和按enter键时运行此代码并执行我的操作—所有这些都不会影响我的其他工作

我想要这样的东西:

应用程序(“系统事件”)。进程['someApp'].windows[0]。文本字段[0]。键码(76);

在脚本字典中,
processs Suite
下有
keyCode
方法。 但是,上面的代码会引发如下错误:

执行错误:第16行错误:错误:命名参数必须作为对象传递。(-2700)

我知道以下代码工作正常,但它要求应用程序在前面运行:

//KeyCode 76=>“输入”
应用程序(“系统事件”)。键码(76);


更新:我正试图在iTunes(苹果音乐)上搜索一些东西。这是否可以在不提前使用iTunes应用程序的情况下实现?

可以在GUI脚本的帮助下在应用程序中编写不在前面的文本(可访问性),但是:

  • 您需要知道特定窗口中的UI元素是什么 应用程序,并了解 特定元素
  • 您需要在
    系统首选项-->安全性中添加脚本
    &隐私-->可访问性

下面是一个示例脚本(在macOS Sierra上测试),用于在“TextEdit”应用程序前面文档的光标位置写入一些文本

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

更新

要向后台应用程序发送一些关键代码,可以使用
cgreventpostopid()
框架的Carbon方法

下面是在iTunes中搜索一些文本的脚本(在我的电脑上,macOS SierraiTunes版本10.6.2


系统事件
key code
命令仅作用于具有焦点的对象。根据我使用“回车”的经验,我认为情况并非如此。KeyCode方法的作用与带有“enter”键代码的击键方法相同。呼叫时会向前端应用程序发送一个“回车”命令。谢谢您的回答,但我这里说的是实际的“回车”功能。我的脚本将文本正确地写入该UIElement,但它要求应用程序预先输入“enter”键代码。我试图在不激活前面的应用程序的情况下点击“回车”。如果不知道应用程序的名称,也不知道按下“回车”键时会发生什么,我将无法提供帮助。但是,有些操作(如果可用)会模拟某些ui元素上的enter键,AppleScript示例:
执行某个特定元素的“AXConfirm”操作…
Ahh-很抱歉,缺少信息。我正在尝试在iTunes(苹果音乐)上搜索一些东西。我尝试了执行“确认”操作,但没有成功-什么都没有发生。这是否可以在不提前使用iTunes应用程序的情况下实现?
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);