我想编写驱动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是否使用不同的字符串来标识自己?上述方法是否过时了?
答案 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