如何使用Python的Win32 API?

我如何在Python中使用win32 API?
什么是最好的和最简单的方法来做到这一点?
你能提供一些例子吗?

PyWin32是要走的路 – 但如何使用它? 一种方法是从一个具体的问题开始,并试图解决它。 PyWin32提供了许多Win32 API函数的绑定,你必须先select一个特定的目标。

在我的Python 2.5安装(Windows上的ActiveState)中,win32包中有一个Demos文件夹,里面包含了库的各个部分的示例代码。

例如,这里是CopyFileEx.py:

import win32file, win32api import os def ProgressRoutine(TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred, StreamNumber, CallbackReason, SourceFile, DestinationFile, Data): print Data print TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred, StreamNumber, CallbackReason, SourceFile, DestinationFile ##if TotalBytesTransferred > 100000: ## return win32file.PROGRESS_STOP return win32file.PROGRESS_CONTINUE temp_dir=win32api.GetTempPath() fsrc=win32api.GetTempFileName(temp_dir,'cfe')[0] fdst=win32api.GetTempFileName(temp_dir,'cfe')[0] print fsrc, fdst f=open(fsrc,'w') f.write('xxxxxxxxxxxxxxxx\n'*32768) f.close() ## add a couple of extra data streams f=open(fsrc+':stream_y','w') f.write('yyyyyyyyyyyyyyyy\n'*32768) f.close() f=open(fsrc+':stream_z','w') f.write('zzzzzzzzzzzzzzzz\n'*32768) f.close() operation_desc='Copying '+fsrc+' to '+fdst win32file.CopyFileEx(fsrc, fdst, ProgressRoutine, operation_desc, False, win32file.COPY_FILE_RESTARTABLE) 

它显示了如何使用CopyFileEx函数与其他一些(如GetTempPath和GetTempFileName)。 从这个例子你可以得到如何使用这个库的“普遍感觉”。

@chaos提到的PyWin32可能是最受欢迎的select; 另一种select是ctypes ,它是Python标准库的一部分。 例如, print ctypes.windll.kernel32.GetModuleHandleA(None)将显示当前模块(EXE或DLL)的模块句柄。 使用ctypes获取win32 API的更广泛的例子就在这里 。

你可以在win32中使用Python的重要function是消息框,这是OK或者Cancel的经典例子。

 result = win32api.MessageBox(None,"Do you want to open a file?", "title",1) if result == 1: print 'Ok' elif result == 2: print 'cancel' 

集合:

 win32api.MessageBox(0,"msgbox", "title") win32api.MessageBox(0,"ok cancel?", "title",1) win32api.MessageBox(0,"abort retry ignore?", "title",2) win32api.MessageBox(0,"yes no cancel?", "title",3)