标签: scripting-bridge

Go语言的Cocoa绑定

是否可以在Google Go中编写Mac OS X/Cocoa应用程序?

是否有Go-Obj-C桥?(在我看来,Obj-C的动态非常适合Golang的界面)

我至少可以将两者连接在一起,并通过普通的C函数让它们相互通信吗?

cocoa go cocoa-bindings scripting-bridge

34
推荐指数
3
解决办法
7769
查看次数

枚举值的类型是什么?

我正在使用Apple的ScriptingBridge框架,并为iTunes生成了一个包含以下几个enum的头文件:

typedef enum {
    iTunesESrcLibrary = 'kLib',
    iTunesESrcIPod = 'kPod',
    iTunesESrcAudioCD = 'kACD',
    iTunesESrcMP3CD = 'kMCD',
    iTunesESrcDevice = 'kDev',
    iTunesESrcRadioTuner = 'kTun',
    iTunesESrcSharedLibrary = 'kShd',
    iTunesESrcUnknown = 'kUnk'
} iTunesESrc;
Run Code Online (Sandbox Code Playgroud)

我的理解是,enum值必须是整数,但这个定义似乎违反了这个规则.此外,似乎将这些enum值视为整数(NSPredicate例如,在一个中)并不是正确的事情.

我将enum上面的声明添加到一个带有空main函数的C文件中,并使用它编译i686-apple-darwin9-gcc-4.0.1.因此,虽然这些类型的enums可能不符合C标准(正如Parappa在下面指出的那样),但它们至少被gcc 编译成某种类型.

那么,那种类型是什么,以及如何在格式字符串中使用它?

c cocoa enums scripting-bridge

14
推荐指数
2
解决办法
1868
查看次数

Python打印属性没有__dict__

我在使用Python的脚本桥时遇到问题

我试图列出iTunes对象的属性

iTunes = SBApplication.applicationWithBundleIdentifier_("com.apple.iTunes")
Run Code Online (Sandbox Code Playgroud)

运用

>>> from pprint import pprint
>>> from Foundation import *
>>> from ScriptingBridge import *
>>> iTunes = SBApplication.applicationWithBundleIdentifier_("com.apple.iTunes")
>>> pprint (vars(iTunes))
Run Code Online (Sandbox Code Playgroud)

我回来了

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: vars() argument must have __dict__ attribute
Run Code Online (Sandbox Code Playgroud)

有谁知道怎么解决这个问题?

python scripting-bridge

10
推荐指数
2
解决办法
1万
查看次数

使用脚本桥创建iTunes播放列表

我正在尝试使用cocoa脚本桥创建一个新的用户播放列表,但似乎无法让它工作.我到目前为止:

iTunesApplication *iTunes = [SBApplication 
                            applicationWithBundleIdentifier:@"com.apple.iTunes"];
SBElementArray *iSources = [iTunes sources];
iTunesSource *library = nil;
for (iTunesSource *source in iSources) {
    if ([[source name] isEqualToString:@"Library"]) {
        library = source;
        break;
    }
}

// could not find the itunes library
if (!library) {
    NSLog(@"Could not connect to the iTunes library");
    return;
}

// now look for our playlist
NSString *playlistName = @"new playlist";
SBElementArray *playlists = [library userPlaylists];
iTunesUserPlaylist *playlist = nil;
for (iTunesUserPlaylist *thisList in playlists) {
    if ([[thisList name] …
Run Code Online (Sandbox Code Playgroud)

cocoa itunes scripting-bridge

9
推荐指数
2
解决办法
3893
查看次数

使用Scripting Bridge将电影添加到iTunes

我想使用Scripting Bridge将电影添加到iTunes.最好让我在"音乐视频"和"电影"之间进行选择.我知道Objective-C和AppleScript,所以我认为它不会那么难,但我无法弄明白.我知道如何使用NSAppleScript但是我的目标是10.5或更高版本,并且读取Scripting Bridge废弃了NSAppleScript.是对的吗?

我得到的只是

iTunesApplication *iTunes = [SBApplication applicationWithBundleIdentifier: @"com.apple.iTunes"];
Run Code Online (Sandbox Code Playgroud)

你可以看到,这根本不是什么.

itunes objective-c scripting-bridge

7
推荐指数
2
解决办法
2409
查看次数

使用ScriptingBridge获取当前歌曲的iTunes作品

我一直试图弄清楚如何使用脚本桥获取当前播放歌曲的iTunes艺术作品.我已经达到了适用于某些歌曲的程度,但对于其他人来说,我得到了一个SIGABRT.我不确定问题是什么,所以任何帮助都将不胜感激.这是我到目前为止:

iTunesApplication * iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"];
NSImage *songArtwork;
iTunesTrack *current = [iTunes currentTrack];
iTunesArtwork *artwork = (iTunesArtwork *)[[[current artworks] get] lastObject];
if(artwork != nil)
  songArtwork = [artwork data];
else
  songArtwork = [NSImage imageNamed:@"Image.tiff"];

NSMenuItem *artworkMenuItem = [[NSMenuItem alloc] initWithTitle:@"" action:NULL keyEquivalent:@""];
[songArtwork setSize:NSMakeSize(128, 128)];
[artworkMenuItem setImage:songArtwork];
[Menu insertItem:artworkMenuItem atIndex:0];
Run Code Online (Sandbox Code Playgroud)

我可以使用一些歌曲,并在菜单项中很好地显示艺术作品,但对于其他人我在线上获得了一个SIGABRT:

[songArtwork setSize:NSMakeSize(128, 128)];
Run Code Online (Sandbox Code Playgroud)

控制台的输出如下:

2011-08-12 23:13:20.094 SongViewer[2146:707] -[NSAppleEventDescriptor setSize:]:     unrecognized selector sent to instance 0x102827f70
2011-08-12 23:13:20.095 SongViewer[2146:707] An uncaught exception was raised
2011-08-12 23:13:20.096 SongViewer[2146:707] -[NSAppleEventDescriptor setSize:]: unrecognized …
Run Code Online (Sandbox Code Playgroud)

itunes objective-c artwork scripting-bridge

7
推荐指数
1
解决办法
2004
查看次数

使用Mail.app从Cocoa发送HTML Mail

我正试图通过Mail.app从Cocoa应用程序发送html电子邮件.我想在Mail.app中打开新邮件,包括主题,收件人,并添加带有链接和其他内容的HTML Body.但找不到这样做的方法.我已经尝试过Scripting Bridge,但MailOutgoingMessage类没有内容类型我可以用纯文本添加内容.

尝试过AppleScript,如下所示:

set htmlContent to read "/Path/index.html"
set recipientList to {"mail@mail.com"}

tell application "Mail"
    set newMessage to make new outgoing message with properties {subject:"qwerty", visible:true}
    tell newMessage
        make new to recipient at end of to recipients with properties {address:"mail@s.com"}
            set html content to htmlContent
        --send
    end tell
end tell
Run Code Online (Sandbox Code Playgroud)

这段代码发送电子邮件与html,只有我正在改变 - 发送.但是我需要在用户做出一些更改之后发送信件.

applescript objective-c scripting-bridge

7
推荐指数
2
解决办法
2209
查看次数

Scripting Bridge vs PyObjC vs py2app

我刚刚开始学习如何集成Python和Mac OS应用程序.(我想调用从Cocoa到Python的一些方法.)我遇到了这些术语 - 脚本桥,PyObjC和py2app.有什么不同?PyObjC是脚本桥的一个例子吗?py2app什么时候开始发挥作用?

python cocoa py2app scripting-bridge

6
推荐指数
1
解决办法
1146
查看次数

Objective-C:从外部应用程序获取菜单信息

我正在尝试编写一个Mac OS菜单额外的应用程序,当用户按下某个热键时,该应用程序显示包含当前活动应用程序菜单栏项的上下文菜单.显示上下文菜单我可以做得很好,但我似乎无法获得当前活动的应用程序的菜单栏项.目前我正在使用[[[NSWorkspace sharedWorkspace] runningApplications] filteredArrayUsingPredicate:]获取活动应用程序的名称,但NSRunningApplication似乎包含了很少的其他信息.有什么方法可以从外部应用程序获取有关应用程序菜单的信息吗?

更新:

使用ScriptingBridge框架似乎工作得相当好,如果你很高兴使用AppleScript:

    SystemEventsApplication* sevApp = [SBApplication applicationWithBundleIdentifier:@"com.apple.systemevents"];
    SystemEventsProcess* proc = [[sevApp applicationProcesses] objectWithName:appName];

    for (SystemEventsMenuBar* menuBar in proc.menuBars) {
        for (SystemEventsMenuBarItem* menuBaritem in menuBar.menuBarItems) {
            NSLog(@"%@", menuBaritem.name);
        }
    }
Run Code Online (Sandbox Code Playgroud)

将打印出应用程序菜单栏中提供的菜单列表.还没有找到获取上下文菜单的方法,所以我暂不会回答这个问题...

这也很有用:http://robnapier.net/blog/scripting-bridge-265

macos cocoa objective-c menubar scripting-bridge

6
推荐指数
1
解决办法
896
查看次数

如何通过ScriptingBridge使用AppleScript获取终端窗口的窗口ID和标签号?

我可以使用以下AppleScript打开终端选项卡:

tell application "Terminal"
    set myTab to do script "exec sleep 1"
    get myTab
end tell
Run Code Online (Sandbox Code Playgroud)

这将返回一个字符串,如:tab 1 of window id 3263 of application "Terminal".这很好,我可以看到窗口ID 3263和标签号1(虽然我不知道如何查询myTab只获取这些值).

在Cocoa ScriptingBridge中,我可以这样做:

SBApplication  *terminal;
SBObject       *tab;

terminal = [SBApplication applicationWithBundleIdentifier:@"com.apple.terminal"]
tab = [terminal doScript:@"exec sleep 1" in:nil]
Run Code Online (Sandbox Code Playgroud)

如何从选项卡对象中获取窗口ID和选项卡编号?


编辑2009/4/27 - 为什么?

为了回答我为什么要这样做 - 我在终端窗口中打开一个命令(如上所述),然后我回到了tab对象.但是我想移动/调整此窗口的大小,因此我需要访问选项卡的"窗口"对象.

我正在使用Objective-C(实际上,从Perl桥接的Objective-C),并且希望坚持使用标准的OS组件,因此我相信我只能使用NSAppleScript和ScriptingBridge框架(所有perl applescript模块都打破了64位除碳).我会尝试NSAppleScript,但处理返回的值似乎是一个黑暗的艺术.

我目前的解决方案是获取选项卡对象的TTY(保证唯一)并枚举每个窗口的每个选项卡,直到找到包含选项卡的窗口.我认为这不是最好的方法(肯定不是很快!).


编辑2009/4/30 - 解决方案

根据下面" has " 的建议,我了一个NSAppleEventDescriptor API.最初,我只能通过NSAppleScript的executeAndReturnError()调用来实现这一目标.但是我发现NSAppleScript比ScriptingBridge慢得多.

使用后ClassDump提取一些更SBObject电话,我发现无证 …

cocoa applescript appleevents scripting-bridge

5
推荐指数
1
解决办法
3516
查看次数