windows下面的python扩展-win32all 和ctypes

来源:互联网 发布:java聊天系统源码 编辑:程序博客网 时间:2024/05/09 04:35

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 呵呵

原创粉丝点击