2006年5月6日 22:06:44
今天看了一下windows下面的python扩展。主要有两个类库。
一、win32all
其实这个就是pythonwin的扩展包,包括一个IDE。以前只是用IDE,没用过win32的扩展。有一个帮助文档的,不过组织的不是很好,没有一
个合适的sample或者setp by step。win32all根据功能分成不同的子库,如调用api的win32api,调用net命令的win32net,剪贴板操作的
win32clipboard,odbc模块的odbc(这个我倒是用过)
使用win32ap来输出一个对话框的程序代码如下:
import win32api #winapi库
import win32con #windows常数定义
win32api.MessageBox(win32con.NULL, "提示信息", "提示标题", win32con.MB_OK | win32con.MB_ICONINFORMATION)
输出一个messagbox,标题为"提示标题",提示文本为"提示信息",对话框图标为提示图标。
发现pythonwin下,不能提示出api的参数,不知道为什么。美中不足吧。
某些api的参数和返回值是被修改过了的,如GetTempPath,需要注意察看文档。
二、ctypes
这个类库是专门用来进行python到C类型转换的,它不只是针对win32的api,而是任意的动态库都适用,包括linux下面的so。对win api有特
殊的照顾,不用。
调用MessageBox的同样功能的代码为:
import ctypes #cytpes库
import win32con #windows常数定义
msgbox = ctypes.windll.user32.MessageBoxA
msgbox(win32con.NULL, "提示信息", "提示标题", win32con.MB_OK | win32con.MB_ICONINFORMATION)
不需要指定参数类型也可以调用。可以通过指定参数类型,在调用前进行参数检查。
msgbox.argtypes = [ctypes.c_int, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_int]
此时,执行msgbox(win32con.NULL, "提示信息", "提示标题", "Wrong_arg_type")
出现异常:
Traceback (most recent call last):
File "<interactive input>", line 1, in ?
ArgumentError: argument 4: exceptions.TypeError: int expected instead of str instance
如果不指定参数类型, 则会传递错误的类型。
此外,函数默认的返回值类型为integer。如果为其他类型,需要通过restype参数指定。
ctypes调用自定义的动态库的例子:(testDLL.dll为自己写的dll,里面包含一个msgbox函数)
myDLL = ctypes.cdll.LoadLibrary("testDLL.dll") #加载testDLL.dll,需要确保testDLL.dll在当前目录下
myDLL.msgbox() #调用msgbox函数
这个库的IDE提示更是少的可怜, 包括文档都不多,狂郁闷ing.
不过还好api的声明可以查MSDN 呵呵