- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!!!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()
<COMObject 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 から 利用してみる
!以下のようにプログラム名から、間接的に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