摘自:PyWin32.chm

Introduction

This documents how to quickly start using COM from Python. It is not a thorough discussion of the COM system, or of the concepts introduced by COM.

Other good information on COM can be found in various conference tutorials - please see the collection of Mark's conference tutorials

For information on implementing COM objects using Python, please see a Quick Start to Server side COM and Python

In this document we discuss the following topics:

Quick Start

To use a COM object from Python

import win32com.client
o =
win32com.client.Dispatch("Object.Name")
o.Method()
o.property = "New
Value"
print o.property

Example

o = win32com.client.Dispatch("Excel.Application")
o.Visible = 1
o.Workbooks.Add() #
for office 97 – 95 a bit different!
o.Cells(1,1).Value = "Hello"

And we will see the word "Hello" appear in the top cell.

How do I know which methods and properties are
available?

Good question. This is hard! You need to use the documentation with the
products, or possibly a COM browser. Note however that COM browsers typically
rely on these objects registering themselves in certain ways, and many objects
to not do this. You are just expected to know.

The Python COM browser

PythonCOM comes with a basic COM browser that may show you the information
you need. Note that this package requires Pythonwin (ie, the MFC GUI
environment) to be installed for this to work.

There are far better COM browsers available - I tend to use the one that
comes with MSVC, or this one!

To run the browser, simply select it from the Pythonwin Tools menu, or
double-click on the file win32com\client\combrowse.py

Static Dispatch (or Type Safe) objects

In the above examples, if we printed the 'repr(o)' object above,
it would have resulted in

<COMObject Excel.Application>

This reflects that the object is a generic COM object that Python has no
special knowledge of (other than the name you used to create it!). This is known
as a "dynamic dispatch" object, as all knowledge is built dynamically. The
win32com package also has the concept of static dispatch objects, which
gives Python up-front knowledge about the objects that it is working with
(including arguments, argument types, etc)

In a nutshell, Static Dispatch involves the generation of a .py file that
contains support for the specific object. For more overview information, please
see the documentation references above.

The generation and management of the .py files is somewhat automatic, and
involves one of 2 steps:

  • Using makepy.py to select a COM library. This process is very similar
    to Visual Basic, where you select from a list of all objects installed on your
    system, and once selected the objects are magically useable.

or

  • Use explicit code to check for, and possibly generate, support at run-time.
    This is very powerful, as it allows the developer to avoid ensuring the user has
    selected the appropriate type library. This option is extremely powerful for OCX
    users, as it allows Python code to sub-class an OCX control, but the actual
    sub-class can be generated at run-time. Use makepy.py with a -i
    option to see how to include this support in your Python code.

The win32com.client.gencache module manages these generated files.
This module has some documentation of its
own
, but you probably don't need to know the gory details!

How do I get at the generated module?

You will notice that the generated file name is long and cryptic - obviously
not designed for humans to work with! So how do you get at the module object for
the generated code?

Hopefully, the answer is you shouldn't need to. All generated file
support is generally available directly via win32com.client.Dispatch and
win32com.client.constants. But should you ever really need the Python
module object, the win32com.client.gencache module has functions specifically
for this. The functions GetModuleForCLSID and GetModuleForProgID both return
Python module objects that you can use in your code. See the docstrings in the
gencache code for more details.

To generate Python Sources supporting a COM object

Example using Microsoft Office 97.

Either:

  • Run 'win32com\client\makepy.py' (eg, run it from the command
    window, or double-click on it) and a list will be presented. Select the Type
    Library 'Microsoft Word 8.0 Object Library'
  • From a command prompt, run the command 'makepy.py "Microsoft Word 8.0
    Object Library"
    ' (include the double quotes). This simply avoids the
    selection process.
  • If you desire, you can also use explicit code to generate it just before you
    need to use it at runtime. Run 'makepy.py -i "Microsoft Word 8.0 Object
    Library"
    ' (include the double quotes) to see how to do this.

And that is it! Nothing more needed. No special import statements needed!
Now, you simply need say

>>> import win32com.client

>>> w=win32com.client.Dispatch("Word.Application")

>>> w.Visible=1

>>> w

<win32com.gen_py.Microsoft Word 8.0 Object
Library._Application>

Note that now Python knows the explicit type of the object.

Using COM Constants

Makepy automatically installs all generated constants from a type library in
an object called win32com.clients.constants. You do not need to do
anything special to make these constants work, other than create the object
itself (ie, in the example above, the constants relating to Word would
automatically be available after the
w=win32com.client.Dispatch("Word.Application")
statement.

For example, immediately after executing the code above, you could execute
the following:

>>> w.WindowState =
win32com.client.constants.wdWindowStateMinimize

and Word will Minimize.

[文摘]Quick Start to Client side COM and Python的更多相关文章

  1. Code a simple telnet client using sockets in python

    测试端口是否开放的python脚本 原文: https://www.binarytides.com/code-telnet-client-sockets-python/ 配置: 120.79.14.8 ...

  2. Open Source VOIP applications, both clients and servers (开源sip server & sip client 和开发库)

    SIP Proxies SBO SIP Proxy Bypass All types of Internet Firewall JAIN-SIP Proxy Mini-SIP-Proxy A very ...

  3. saltstack通过salt.client执行命令(转)

    利用saltstack的salt.client模块可以在python的命令行下或者python脚本里执行相应的salt命令 master端想要执行类似 salt '*' cmd.run 'uptime ...

  4. 使用epoll实现一个udp server && client

    udp server #!/usr/bin/env python #-*- coding:utf-8 -*- import socket import select import Queue #创建s ...

  5. Longhorn 云原生容器分布式存储 - Python Client

    内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? Longhorn 云原生容器分布式存储 - 设计架构和概念 Longhorn 云原生容器分布式存储 - ...

  6. (转) [it-ebooks]电子书列表

    [it-ebooks]电子书列表   [2014]: Learning Objective-C by Developing iPhone Games || Leverage Xcode and Obj ...

  7. Http Message Converters with the Spring Framework--转载

    原文:http://www.baeldung.com/spring-httpmessageconverter-rest 1. Overview This article describes how t ...

  8. HTTP Components简介

    基于版本4.5.x 简介 组件 HttpClient,核心组件 HC Fluent,提供了流式操作接口 HttpMime,提供文件上传时用到的一些工具类 HttpClient Cache,有待学习 H ...

  9. Python socket – network programming tutorial

    原文:https://www.binarytides.com/python-socket-programming-tutorial/ --------------------------------- ...

随机推荐

  1. Java 嵌套类基础详解

    目录 1. 什么是嵌套类? 2. 为什么要使用嵌套类? 3. 嵌套类的类型 4. 静态嵌套类 5. 非静态嵌套类 5.1 成员内部类 5.2 局部内部类 5.3 匿名内部类 6. 嵌套接口 1. 什么 ...

  2. 以太坊如何估计计算gas?

    以太坊如何估计估算计算gas?Etherscan上transaction info中有个gas used by txn,结果跟remix给的结果以及geth中getTransactionReceipt ...

  3. java制作验证码(java验证码小程序)

    手动制作java的验证码 Web应用验证码的组成: (1)输入框 (2)显示验证码的图片 验证码的制作流程: 生成验证码的容器使用 j2ee的servlet 生成图片需要的类: (1) Buffere ...

  4. [SHOI2011]双倍回文

    Description   Input 输入分为两行,第一行为一个整数,表示字符串的长度,第二行有个连续的小写的英文字符,表示字符串的内容. Output 输出文件只有一行,即:输入数据中字符串的最长 ...

  5. [HNOI2008]越狱

    题目描述 监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种.如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱 输入输出格式 输入 ...

  6. 洛谷P3164 [CQOI2014]和谐矩阵

    高斯消元,可以直接消的 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cst ...

  7. 洛谷P2319 [HNOI2006]超级英雄

    一开始是用二分图匹配(网络流)+二分做的,后来发现直接用匈牙利更简单 #include<cstdio> #include<cstdlib> #include<algori ...

  8. hdu 5656 CA Loves GCD(n个任选k个的最大公约数和)

    CA Loves GCD  Accepts: 64  Submissions: 535  Time Limit: 6000/3000 MS (Java/Others)  Memory Limit: 2 ...

  9. [NOI2011]

    来自FallDream的博客,未经允许,请勿转载,谢谢. 省选完挂.但是善良的教练今天丢了一套NOI2011给我们训练 6道题233(虽然一道题做过了,一道题普及组的都会,就算是4道吧) 熬了一天,总 ...

  10. bzoj4767两双手 容斥+组合

    4767: 两双手 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 684  Solved: 208[Submit][Status][Discuss] ...