!!!Python Win32 Extensions [Python][COM] !!Links ::Official *http://python.net/crew/skippy/win32/Downloads.html *http://sourceforge.net/projects/pywin32/files/ ::Quick Start *http://docs.activestate.com/activepython/2.4/pywin32/html/com/win32com/HTML/docindex.html ::Win32 COM開発 *http://msdn.microsoft.com/ja-jp/library/aa139672.aspx *[スクリプトを使用した Windows Server 管理の自動化|http://www.google.co.jp/url?sa=t&source=web&ct=res&cd=6&url=http%3A%2F%2Fdownload.microsoft.com%2Fdownload%2F8%2F0%2F4%2F8042C28F-9673-4931-91CE-021D3B8D4740%2F0402_Anno_OST_1.pdf&ei=iL26SsCtEdCZkQXQ_uzuBQ&usg=AFQjCNFIMro0JmQAy_sBhN6duvnvcrsU_g&sig2=KJ9D1ym3yvXoxXfI7kJF5g] *[MSDN Library Scripting|http://msdn.microsoft.com/ja-jp/library/aa155075.aspx] *[Windows Scripting Host のオブジェクト|http://msdn.microsoft.com/ja-jp/library/cc446503.aspx] !!!COM オブジェクトをPythonから利用する !!はじめに *Excelを立ち上げてワークブックを追加してセルにHello. >>> import win32com.client >>> o = win32com.client.Dispatch("Excel.Application") >>> o.Visible = 1 >>> o.Workbooks.Add() >>> o.Cells(1,1).Value = "Hello" !!!COM の仕様を確認する方法 !!COM と Windows レジストリ *COMコンポーネントは、DLLかEXE *COMは、レジストリから、CLSIDを参照することで、ディスク上からコンポーネントを探し出す。 *以下はShell.Application のCLSID {{ref_image py_win32com00.jpg}} !以下のようにプログラム名から、間接的にCLSIDを取得できる。 ::レジストリ HKEY_CLASSES_ROOT 以下に登録されている、Shell.Application を Python から 利用してみる {{ref_image py_win32com01.jpg}} *HKEY_CLASSES_ROOT\Shell.Application {{ref_image py_win32com02.jpg}} !Shell.Application の使用例 *Shell.Application SetTime()を呼び出す。日付と時刻のプロパティをを表示 >>> import win32com.client >>> sh = win32com.client.Dispatch('Shell.Application') >>> sh.SetTime() {{ref_image py_win32com03.jpg}} !!OLE/COM Object Viewer で、COMの仕様を確認する *Download : [OLE/COM Object Viewer|http://www.microsoft.com/DOWNLOADS/details.aspx?FamilyID=5233b70d-d9b2-4cb5-aeb6-45664be858b6&displaylang=en] **[Windows SDK|http://msdn.microsoft.com/ja-jp/windows/bb980924.aspx] に含まれる IViewer.dll が必要。 *Shell.Application の内容を確認してみる ::Visual Studio の同梱されている {{ref_image py_win32com04.jpg}} ::Type Libraries から・・・ {{ref_image py_win32com05.jpg}} ::Microsoft Shell Controls And Automation を選択して、Viewアイコンもしくはダブルクリック {{ref_image py_win32com06.jpg}} ::CoClasses から、Shell を探すと、Methods の中に、SetTimeが見つかる *ファイルを開くから、上記レジストリエディタで確認した SHELL32.DLL を選択しても起動する。 {{ref_image py_win32com07.jpg}} ::SetTimeを選択すると、Help と シグネチャが確認できる。 {{ref_image py_win32com08.jpg}} !!Visual Basic Editor のオブジェクトブラウザで 確認 ::Excel の Visual Basic Editor から上記 OLE/COM Object Viewer で確認したのと同様の内容を確認 *ツール − マクロ − Visual Basic Editor {{ref_image py_win32com09.jpg}} ::Visual Basic Editor から 参照設定ダイアログを起動する *ツール − 参照設定 {{ref_image py_win32com10.jpg}} ::Microsoft Shell Controls And Automation をチェックして、OK {{ref_image py_win32com11.jpg}} ::表示 − オブジェクトブラウザを起動 {{ref_image py_win32com12.jpg}} ::Shell − SetTime で内容を確認 {{ref_image py_win32com13.jpg}} !!!例 [WshShell] !!WScript.Network !プリンタを列挙 ::WScript.Network で、呼び出されるCOM {{ref_image py_win32com_wsh_net01.jpg}} ::WshNetwork の EnumPrinterConnections を呼び出してみる {{ref_image py_win32com_wsh_net02.jpg}} ::結果が、WshCollection で返る {{ref_image py_win32com_wsh_net03.jpg}} ::実行 >>> import win32com.client >>> wsh = win32com.client.Dispatch('WScript.Network') >>> printers = wsh.EnumPrinterConnections() >>> for i in range(0, printers.Count(), 1): ... print printers[i] ... XPSPort: Microsoft XPS Document Writer Journal Note Writer Port: Journal ノート ライタ BULLZIP Bullzip PDF Printer USB001 \\Izanami\Canon MP500 Series Printer NEWSOFT \\Izanami\PageManager PDF Writer