PyWin32

win32all, pywin32, Python Win32 Extensions a/nebo Python for Windows Extensions - synonyma, pod kterými se na Netu ukrývá

Jedná se balík modulů pro práci pod Windows. Obsahuje modul pro práci s WinAPI (win32api), s registry (_winreg), s Microsoftí technologií COM (win32com) a další. K těmto modulům je také dodáváno vývojové prostředí PythonWin.

Obsahuje, kromě jiných, také tyto moduly (seznam všech se mi nikde na Netu nepodařilo najít, najdete ho až v souboru nápovědy pywin32.chm po instalaci):

Download, Tutoriály, praktické ukázky, kniha:

Po instalaci

vám vznikne několik nových adresářů v adresáři site-packages:

Python COM

Asi by se slušelo připomenout, že při skriptování pomocí COM umí Python pouze objekty s rozhraním IDispatch a potom pár objektů, ke kterým je u PythonCOMu uděláno DLL rozhraní. Tím myslím přímé vytváření objektů přes CoCreateInstance a QueryInterface s daným rozhraním (obecně musí umět IDispatch).

Praktické ukázky

Příklad scriptování Wordu

vložení textu do dokumentu:

   # -*- coding: cp1250 -*- 
   import win32com.client

   # je snad lepší dávat přednost gencache.EnsureDispatch před Dispatch, 
   # protože se tak zpřístupní všechny možné konstanty
   # zde konkrétně wdNewBlankDocument
   wordApp = win32com.client.gencache.EnsureDispatch("Word.Application")

   wordApp.Visible = 1 # jasné

   # Nový dokument
   wordApp.Documents.Add(DocumentType=win32com.client.constants.wdNewBlankDocument)

   # Vložíme text na pozici kurzoru
   wordApp.Selection.TypeText (Text=u"Tuto větu napsal Python.")

   #uložíme
   wordApp.ActiveDocument.SaveAs("Python")

   # zavřeme Word
   # wordApp.Application.Quit()

A jak jsem na všechny ty metody wordApp přišel? Pustil jsem si Word, nahrál jsem si makro, které dělalo to co bych chtěl, pak jsem to makro editoval a to co jsem tam našel, jsem s mírnými úpravami (přidělání závorek, změna := na =, apod.) dal do scriptu vždy za objekt wordApp.

Druhý možný způsob je hrabat se MSDN nebo v Googlu . Hodně štěstí :-)

Jaké mám připojené disky?

   >>> import win32net
   >>> win32net.NetServerDiskEnum()
   Traceback (most recent call last):
    File "<stdin>", line 1, in ?
   TypeError: function takes at least 1 argument (0 given)
   >>> win32net.NetServerDiskEnum(None)
   (u'A:', u'C:', u'D:', u'E:') 

nebo :

    import win32api

    s = win32api.GetLogicalDriveStrings()
    print s

    lst = s.split('\0')
    print lst