| www.ibm.com/developerWorks
在 bash 中, $! 被 shell 自动替换为在后台启动的最后一个进程的 PID,这样,这个命令将改变我们刚刚启动的 Konqueror 应用程序的 URL。
最后,我们想让 Konqueror 全屏;这稍微复杂一些。
对 kdcop 的一个短期调查显示,这里有一些看起来有趣的函数可能会有帮助。
konqueror-mainwindow#1 接口有一个 actions() 函数;执行这个函数我们会得到 action() 函数所有可用参数一个列表。查看这个列表,我们会看到其中有一个操作叫 做 fullscreen 。到现在为止,一切还都不错 -- 不过在 kdcop 中调用 action() 函数并将 fullscreen 作为参数传递给这个函数,会返回一个错误。看一下 action() 函数的函数原型就会明白,它返回的是一个 DCOPRef 类型。不幸的是,kdcop 不能正确地显示这些返回类型。
不过这没关系;我们可以用 dcop 完成同样的事情:
dcop konqueror-$! konqueror-mainwindow#1 action fullscreen
这将返回
DCOPRef(konqueror-NNNNN,konqueror-mainwindow#1/action/fullscreen)
我们可以将这个返回值传递到 dcop 的另一个实例(还是借助方便的 ` 字符):
dcop `dcop konqueror-$! konqueror-mainwindow#1 action fullscreen`
这会向我们给出可用函数的一个列表,其中 activate 看起来最像是我们要找的。让我们来试试:
dcop `dcop konqueror-$! konqueror-mainwindow#1 action fullscreen` activate
就是那样,Konqueror 进入了全屏模式。
最终的脚本如下所示:
konqueror & dcop konqueror-$! konqueror-mainwindow#1 openURL www.ibm.com/developerWorks dcop `dcop konqueror-$! konqueror-mainwindow#1 action fullscreen` activate
注意,要退出全屏模式,您只需要右击 Konqueror 并在弹出的菜单中选择“Exit Full-Screen Mode”。
例 5. 当联系者上线时立即发送消息 最后这个例子用到了 Kopete -- 一个 KDE 即时消息客户机。
到 现在,这个脚本应该非常容易理解。它接受两个参数,联系者名 ($1) 和消息 ($2)。然后它进行循环,通过 dcop 得到可达联系者列表,并用 grep 来检查给出的名字是否出现,如果没有,则继续循环。如果出现了,循环终止并向联系者发送一条消息(还是用 DCOP)。 清单 1. 向 Falken 教授问候
name=$1; msg=$2; echo Waiting for $name to come online while ((`dcop kopete KopeteIface reachableContacts | grep -c $name` == 0)) do sleep 5 done echo Sending message "$msg" to "$name" dcop kopete KopeteIface messageContact $name "$msg"
| 创建一个 DCOP 感知的应用程序
现在我们将创建一个 DCOP 感知的应用程序。
简单起见,我将使用“KDevelop”集成开发环境,它有一个非常好的应用程序向导,可以为我们完成大部分工作。
由于我是一个极端的人,我现在用的是 KDevelop 3.0 beta2,但是老一些的版本的步骤也基本上相同。
一个简单的 DCOP 感知的应用程序
开始,启动 KDevelop(我从 K 菜单中使用 run 命令)。 我们在 Project 菜单中选择“New Project”,这将激活“Create New Project”向导。 如 果在其中展开 C++ 树,并展开 C++ 树下的 KDE 树,我们应该会看一个叫做“Application Framework”的条目。选择这个条目,给出您的应用程序名(例如 dwdcopapp)并填写其他需要的地方。 继续完成向导其余的部分(大部分情况下您可以只是选择“Next”),直到结束。
|