Skype Mac API - 使用AppleScript或5年历史的API?

时间:2010-06-06 05:37:10

标签: objective-c cocoa xcode x86-64 skype

我有一个x86_64应用程序,我希望可以选择阅读Skype状态消息。但是,5岁的skype mac框架是32位的,如果有一种方法可以在64位应用程序中进行编译,我还没有找到它。

我的问题是,基本上,我应该怎么做呢?我真的只需要设置USERSTATUS AWAY / ONLINE字符串。

使用AppleScript,每次都会弹出“Skype应该允许这个”对话框。这是非常低效和彻头彻尾的刺激。

么?

我正在考虑编写一个32位的CLI包装器,但这似乎有些过分。

5 个答案:

答案 0 :(得分:2)

我使用Notification Watcher了解Skype的API只适用于NSDistributedNotifications。重复这些通知就像64位应用程序的魅力一样。

答案 1 :(得分:0)

答案 2 :(得分:0)

如果我没记错,一旦允许,许可对话框就不会出现。

我的Skype Apple脚本我必须通过GUI点击它们。如果他们出现了。

tell application "Skype" to launch
delay 15
(* this part if the security API window comes up*)
tell application "System Events"
    tell application process "Skype"
        if exists (radio button "Allow this application to use Skype" of radio group 1 of window "Skype API Security") then
            click
            delay 0.5
            click button "OK" of window "Skype API Security"
        end if
    end tell
end tell
delay 5

答案 3 :(得分:0)

我发现如果您通过查看捆绑内容打开“Skype.app” - >框架你会发现64位和32位skype.framework

答案 4 :(得分:0)

这是对Twitter请求的回复。我在回答这个问题时使用了这段代码。我不需要查看Skype API,因为它工作正常,但我想它自上次尝试使用以来已更新。总之...

以下是我在与Skype通信时使用的NSDistributedNotifications列表:

  

SKSkypeAPINotification

     

SKSkypeAttachResponse

     

SKSkypeBecameAvailable

     

SKAvailabilityUpdate

     

SKSkypeWillQuit

就像任何其他类型的NSDistributedNotification一样,您只需注册并处理结果:

[[NSDistributedNotificationCenter defaultCenter]
     addObserver:self selector:@selector(setStatusAfterQuit:) 
     name:@"SKSkypeWillQuit"
     object:nil 
     suspensionBehavior:NSNotificationSuspensionBehaviorDeliverImmediately];

这些是我与Skype保持同步的iVars:

NSString *applicationName;
NSString *mostRecentStatus;
NSString *mostRecentStatusMessage;
NSString *mostRecentUsername;
int APIClientID;
BOOL isConnected;
BOOL needToSetMessage;

NSString *nextMessage;
NSString *nextStatus;

以下是如何连接到Skype的示例:

-(void) skypeConnect{
    if (!isConnected){
        [[NSDistributedNotificationCenter defaultCenter] postNotificationName:@"SKSkypeAPIAvailabilityRequest"                                                                     
                                                                       object:nil
                                                                     userInfo:nil        
                                                           deliverImmediately:YES];



        [[NSDistributedNotificationCenter defaultCenter] postNotificationName:@"SKSkypeAPIAttachRequest"
                                                                    object:applicationName
                                                                  userInfo:nil
                                                        deliverImmediately:YES];
    }
}

以下是获取状态消息的示例(在您使用Skype注册后):

    -(void) processNotification:(NSNotification *) note{
        if ([[note name] isEqualToString:@"SKSkypeAttachResponse"]){

            if([[[note userInfo] objectForKey:@"SKYPE_API_ATTACH_RESPONSE"] intValue] == 0){
                NSLog(@"Failed to connect to Skype.");
                isConnected = NO;
            }else {
                NSLog(@"Connected to Skype.");

                APIClientID = [[[note userInfo] objectForKey:@"SKYPE_API_ATTACH_RESPONSE"] intValue];
                isConnected = YES;

                [self sendCommand:@"GET PROFILE MOOD_TEXT"];


                if (needToSetMessage){
                    [self sendCommand:[NSString stringWithFormat:@"SET USERSTATUS %@",nextStatus]]; 
                    [self sendCommand:[NSString stringWithFormat:@"SET PROFILE MOOD_TEXT %@",nextMessage]];
                    needToSetMessage = NO;
                    nextMessage = @"";
                    nextStatus = @"";
                }

            }

        }
    }