如何用Python脚本化Visual Studio 2008?

7 投票
5 回答
2662 浏览
提问于 2025-04-11 17:55

我想写一些Python脚本来控制Visual Studio 2008和Visual C++ 2008。我找到的所有例子都使用了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 个回答

3

ryan_s给出了正确的答案。你可能需要重新考虑一下使用win32com。

我更喜欢comtypes模块,而不是win32com。因为comtypes和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

根据你想做的事情,AutoIt 可能会满足你的需求。实际上,我相信它能完成你需要的任何任务。

这是我在另一篇帖子中提到的,关于如何将 AutoIt 与 Python 一起使用的内容:

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 函数(注意这个链接是指向 AutoIt 函数的参考文档,AutoIt 的 com 版本 - AutoItX 是这个列表的一个子集...文档包含在下载包中)。我不知道你具体想做什么,所以不能给你指向合适的函数,但这应该能帮助你入门。

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版本可以测试。

撰写回答