Как script Visual Studio 2008 из Python?

125
14

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

спросил(а) 2021-01-25T20:05:45+03:00 4 месяца, 4 недели назад
1
Решение
89

В зависимости от того, что именно вы пытаетесь сделать, 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 имеет подмножество этого списка... документация включена в загрузку) таким образом. Я не знаю, что вы хотите сделать, поэтому я не могу указать вам на соответствующие функции, но это должно вас начать.

ответил(а) 2021-01-25T20:05:45+03:00 4 месяца, 4 недели назад
89

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()

ответил(а) 2021-01-25T20:05:45+03:00 4 месяца, 4 недели назад
89

Я не знаю, поможет ли это вам в 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 год.

ответил(а) 2021-01-25T20:05:45+03:00 4 месяца, 4 недели назад
76

Вы можете попробовать собственную версию .Net, IronPython.
У него есть VS-аддон, IronPythonStudio.


Будучи языком .NET, вы можете получить доступ ко всем доступным ассамблеям, включая Visual Studio Tools for Office.

ответил(а) 2021-01-25T20:05:45+03:00 4 месяца, 4 недели назад
45

По состоянию на 2013 год лучшим вариантом может быть script 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

ответил(а) 2021-01-25T20:05:45+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема