如何从Python编写Visual Studio 2008脚本?

时间:2008-10-21 16:08:55

标签: python visual-studio visual-studio-2008 visual-c++

我想编写驱动Visual Studio 2008和Visual C ++ 2008的Python脚本。到目前为止我找到的所有示例都使用win32com.client.Dispatch。这适用于Excel 2007和Word 2007但Visual Studio 2008失败:

import win32com.client
app1 = win32com.client.Dispatch( 'Excel.Application' ) # ok
app2 = win32com.client.Dispatch( 'Word.Application' )  # ok
app3 = win32com.client.Dispatch( 'MSDev.Application' ) # error

有什么想法吗? Visual Studio 2008是否使用不同的字符串来标识自己?上述方法是否过时了?

5 个答案:

答案 0 :(得分:3)

根据您的具体操作,AutoIt可能会满足您的需求。事实上,我相信它会做你需要做的任何事情。

从我的other post中获取有关如何在Python中使用AutoIt的信息:

import win32com.client
oAutoItX = win32com.client.Dispatch( "AutoItX3.Control" )

oAutoItX.Opt("WinTitleMatchMode", 2) #Match text anywhere in a window title

width = oAutoItX.WinGetClientSizeWidth("Firefox")
height = oAutoItX.WinGetClientSizeHeight("Firefox")

print width, height

你当然可以使用AutoItX functions中的任何一个(注意该链接转到AutoIt函数引用,AutoIt的com版本 - AutoItX有该列表的子集......文档包含在以这种方式下载)。我不知道你想做什么,所以我不能指出你适当的功能,但这应该让你开始。

答案 1 :(得分:3)

我不知道这对2008年是否会有所帮助,但是使用Visual Studio 2005和win32com,我能够做到这一点:

>>> import win32com.client
>>> b = win32com.client.Dispatch('VisualStudio.DTE')
>>> b
<COMObject VisualStudio.DTE>
>>> b.name
u'Microsoft Visual Studio'
>>> b.Version
u'8.0'

不幸的是,我没有2008年测试。

答案 2 :(得分:3)

ryan_s有正确的答案。您可以使用win32com重新思考。

我更喜欢comtypes模块到win32com。它通常适用于ctypes和python。

使用vs 2008的任何一种方法都可行。下面是一个打印Visual Studio中所有命令的名称和键盘快捷键的示例。

import comtypes.client as client

vs = client.CreateObject('VisualStudio.DTE')

commands = [command for command in vs.Commands if bool(command.Name) or bool(command.Bindings)]
commands.sort(key=lambda cmd : cmd.Name)

f= open('bindings.csv','w')

for command in commands:
    f.write(command.Name+"," +";".join(command.Bindings)+ "\n")

f.close()

答案 3 :(得分:2)

您可以尝试 .Net 自己的版本IronPython。 它有一个 VS 插件,IronPythonStudio

作为 .Net 语言,您可以访问所有可用的程序集,包括Visual Studio Tools for Office

答案 4 :(得分:0)

截至2013年,更好的选择可以通过Visual Studio编写脚本IronPython,以便更好地CLR / COM和其他MS内容集成:


import clr
import System

t = System.Type.GetTypeFromProgID("AutoItX3.Control")
oAutoItX = System.Activator.CreateInstance(t)

oAutoItX.Opt("WinTitleMatchMode", 2)

width = oAutoItX.WinGetClientSizeWidth("IronPythonApplication1 - Microsoft Visual Studio (Administrator)")
height = oAutoItX.WinGetClientSizeHeight("IronPythonApplication1 - Microsoft Visual Studio (Administrator)")

print width, height