Google Desktop带有一个SideBar,一直没有装过,因为觉得Google的桌面搜索太占空间。这回Zoomq告诉我Google Desktop 可以使用Python来开发,于是乎,对SideBar的开发感起兴趣来。上到 http://desktop.google.com 上面只有中文1.0版,后来发现在右下角有一个英文的链接,点击进去后发现英文版本的才有2.0Beta版可以下载。于是下载,安装了。连Google Talk也自动排在其中了。在 http://desktop.google.com/plugins/ 有SDK的文档和示例代码可以下载。下载后打开看了半天也没看到哪里可以使用 Python, 后来才发现开发Plugin需要使用Com编码,因此Google建议使用VS开发平台,但 Python 也的确是一种支持Com开发的语言。看来如果想开发 SideBar 的插件的话,需要学习Com。而Com本身是一项挺复杂的东西,什么接口了,而我的确没有怎么学过。为了研究插件的开发,我学起了 Python Com 编码。主要的资料是《Python Programming On Win32》,这本书的作者之一Mark Hammond就是win32com的开发者,也是PythonWin的开发者,因此很有权威。经过几天的学习已经大致明白了,以前对于Com的难以理解的东西,在经过Python封装后已经变得很简单了。

后来又发现一个收集有关Python 在Windows下编程的网站,发现有一些Com编程的资源,大家有兴趣可以看一看如何在 Python 下调用Windows的应用程序。

下面是一段可以使用 Windows Media Player 来播放音乐的代码,大家可以马上在交互环境下试验,当然前提是你需要安装 PythonWin32 包,现在最新的是204版。

代码如下:

>>> from win32com.client import Dispatch
>>> mp = Dispatch("WMPlayer.OCX")
>>> tune = mp.newMedia("C:/WINDOWS/system32/oobe/images/title.wma")
>>> mp.currentPlaylist.appendItem(tune)
>>> mp.controls.play()

很简单吧。如果想停止可以执行:

>>> mp.controls.stop()

Python 的 Com 编程主要包括两个方面:客户端和服务器。

客户端是用来调用其它的 Com 对象,因此从上面第一行可以看到client,就知道这是客户端编程。如果要编服务器的程序则需要从win32com.server来导入了。Dispatch是用来获得 Com 对象的方法。为什么叫Dispatch呢?因为在 Com 有一个接口叫 IDispatch ,它是一个高层接口,主要可以实现方法和属性的动态获取。也就是说,当你得到一个Com对象后你并不知道它的方法和属性都有些什么,而是动态获取的。所有实现IDispatch的对象需要实现两个方法:GetIDsOfNames()和Invoke()。GetIDsOfNames用来查找一个方法或属性是否存在,如果存在则返回它的一个数字索引,然后要使用这个索引传入Invoke来进行调用。从上面的代码你看不到这样的处理,因为 Python 自动给你完成了。所以使用 Python 写 Com 的程序真是方便啊。因此后面对于对象的操作都是自动进行GetIDsOfNames()和Invoke()进行调用了。这在Com中可以称之为后联编,也就是后期绑下。同时 Python 也支持前联编也就是前期绑定。如果想使用这种方法,需要执行MakePy.py这个程序。它会让你选择要处理的COM对象,然后生成一个python程序,用来处理前期绑定。前期绑定则不再需要动态获取了,因此它可以提高运行速度,同时还可以处理常量,而在后期绑定是处理不了的。这些细节在上面的书中都有讲述。

服务器的开发要复杂多了,这个以后再说吧。



Trackback: http://tb.donews.net/TrackBack.aspx?PostId=537571