Я хотел бы написать сценарии 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 другую строку для идентификации? Вышеуказанный метод устарел?






Вы можете попробовать собственную версию .Сеть, IronPython. Он имеет надстройку ПРОТИВ, IronPythonStudio.
Будучи языком .Сеть, вы можете получить доступ ко всем доступным сборкам, включая Инструменты Visual Studio для Office.
В зависимости от того, что именно вы пытаетесь сделать, 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, com-версия AutoIt - AutoItX имеет подмножество этого списка ... документация включена в загрузку) таким образом. Я не знаю, что вы хотите сделать, поэтому я не могу указать вам на соответствующие функции, но это должно помочь вам начать.
Я не знаю, поможет ли это вам с 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 года для тестирования.
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()
С 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
Без проблем. Рад, что смог помочь.