How to use Win32 API with Python? How to use Win32 API with Python? python python

How to use Win32 API with Python?


PyWin32 is the way to go - but how to use it? One approach is to begin with a concrete problem you're having and attempting to solve it. PyWin32 provides bindings for the Win32 API functions for which there are many, and you really have to pick a specific goal first.

In my Python 2.5 installation (ActiveState on Windows) the win32 package has a Demos folder packed with sample code of various parts of the library.

For example, here's CopyFileEx.py:

import win32file, win32apiimport osdef 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_CONTINUEtemp_dir=win32api.GetTempPath()fsrc=win32api.GetTempFileName(temp_dir,'cfe')[0]fdst=win32api.GetTempFileName(temp_dir,'cfe')[0]print fsrc, fdstf=open(fsrc,'w')f.write('xxxxxxxxxxxxxxxx\n'*32768)f.close()## add a couple of extra data streamsf=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 '+fdstwin32file.CopyFileEx(fsrc, fdst, ProgressRoutine, operation_desc, False,   win32file.COPY_FILE_RESTARTABLE)

It shows how to use the CopyFileEx function with a few others (such as GetTempPath and GetTempFileName). From this example you can get a "general feel" of how to work with this library.


PyWin32, as mentioned by @chaos, is probably the most popular choice; the alternative is ctypes which is part of Python's standard library. For example, print ctypes.windll.kernel32.GetModuleHandleA(None) will show the module-handle of the current module (EXE or DLL). A more extensive example of using ctypes to get at win32 APIs is here.


The important functions that you can to use in win32 Python are the message boxes, this is classical example of OK or Cancel.

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

The collection:

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)