Linux上编程控制skype

来源:互联网 发布:喵咚家 知乎 编辑:程序博客网 时间:2024/05/21 06:21

LinuxskypeAPI使用

1 linux系统下利用skypeAPI可以通过D-BUS或者x11-messaging

2 为了减小非D-BUS开发的程序的运行效率,D-BUS的缺省状态是关闭的,在早期版本的API中,启动skype时需要添加以下选项: --enable-dbus –use-system-dbus,其中第二个选项是必须的。

3 /etc/dbus-1/system.d下添加配置文件skype.conf,内容:

     <!DOCTYPE busconfig PUBLIC "-//freedesktop//

DTD D-BUS Bus Configuration 1.0//EN"

"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">

<busconfig>

<policy context="default">

<allow own="com.Skype.API"/>

<allow send_destination="com.Skype.API"/>

<allow receive_sender="com.Skype.API"/>

<allow send_path="/com/Skype"/>

</policy>

</busconfig>

4 根据上面提供的参数编写程序,并编译运行。

5 开始通过程序来控制Skype:

       输入:NAME <应用程序名> ->Skype端弹出对话框,提示是否连接,点击“是”

       返回:OK

       输入:PROTOCOL 7

       返回:PROTOCOL 7

       输入:根据Skype API说明文档中的命令来控制Skype

       例:呼叫         CALL ***

           挂断电话     SET CALL <ID> FINISHED

           接听电话     SET CALL <ID> INPROGRESS

(6)  使用API过程中D-BUS的相关参数:

     服务为:com.Skype.API

     传输路径:client-to-Skype  /com/Skype

              Skype-to-client  /com/Skype/Client

     方法调用:用Invoke方法向Skype方发命令

              Notify方法Skype向应用程序发回消息

     D-BUS的缺省状态为关闭。

2.程序中主要函数:

       conn = dbus_bus_get(DBUS_BUS_SESSION, &err) D-BUS上创建一个连接

  ret=dbus_bus_request_name(conn,"com.litao.controlskype",DBUS_NAME_FLAG_REPLACE_EXISTING, &err)                D-BUS上申请一个连接名

       msg=dbus_message_new_method_call("com.Skype.API",                            "/com/Skype", NULL,  "Invoke");          创建一个方法调用

       dbus_message_iter_init_append(msg, &args);  向消息中添加参数(命令)

       dbus_connection_flush(conn);                     连接

       dbus_pending_call_block(pending);           程序阻塞直到有消息返回

       msg = dbus_pending_call_steal_reply(pending);   提取返回的消息

       

dbus_message_get_args(msg,0,DBUS_TYPE_STRING,&ack,DBUS_TYPE_

INVALID)                                    从返回消息中提取返回字符串

 

参考:

   <<SKYPE API 的说明与使用>>

   <<P2 Skype Demo: How To Interact With Skype>>

   https://developer.skype.com/Docs/ApiDoc/Skype_API_on_Linux