66

How can I use win32 API in Python? What is the best and easiest way to do it?
Can you please provide some examples?

5
  • 7
    yes, i actually did it before asking the question, and found several results. my aim is to start learning the most recommended solution to my problem. besides, not such question has been asked in stack overflow before, so I thought good answers from more experienced programmers can show the right path to take for beginners like me =) Commented Jun 21, 2009 at 23:53
  • 13
    I googled and followed the links and I still don't know how. Commented Jun 21, 2009 at 23:57
  • Is there a specific use case? what are you trying to do that is not part of the standard python library? Commented Jun 22, 2009 at 1:30
  • @SashaChedygov you're welcome! It's never late to learn mistakes. Commented Jul 7, 2012 at 8:27
  • Just reading down through the comments and @SashaChedygov's one stuck out. Believe it or not, I got here by Googling. This is now (14 years later?) the topmost entry in the list of found articles. Ironic? Commented Aug 24, 2018 at 18:23

3 Answers 3

47

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, 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)

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.

Sign up to request clarification or add additional context in comments.

1 Comment

Style remark: 3 open(fn, 'w').write('data') lines in CPython communicate the same message as 9 'open,write,close' lines.
26

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.

2 Comments

@RadimCernej: Try a google search for import ctypes github. You will get many hits. Or try this example on GitHub that uses from ctypes import *: github.com/erochest/snippets/blob/master/win32named.py
They have not gotten pyWin32 to work with the MSYS2 build of Python. CTypes does.
8

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)

2 Comments

Is there an option to display a hyperlink in such a MessageBox (or similar) with win32api?
Where does your win32api object come from?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.