2008-10-21 9 views
7

Je voudrais écrire des scripts Python qui pilotent Visual Studio 2008 et Visual C++ 2008. Tous les exemples que j'ai trouvés jusqu'à présent utilisent win32com.client.Dispatch. Cela fonctionne bien pour Excel 2007 et Word 2007, mais échoue pour Visual Studio 2008:Comment scripter Visual Studio 2008 à partir de Python?

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

Toutes les idées? Est-ce que Visual Studio 2008 utilise une chaîne différente pour s'identifier? La méthode ci-dessus est-elle périmée?

Répondre

3

Je ne sais pas si cela vous aidera à 2008, mais avec Visual Studio 2005 et win32com Je suis en mesure de le faire:

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

Malheureusement, je n'ai pas 2008 pour tester avec bien .

+0

Il fonctionne avec Visual Studio 2008, merci! – jwfearn

+0

Pas de problème. Heureux d'avoir pu aider. –

3

Selon ce que vous essayez de faire exactement, AutoIt peut répondre à vos besoins. En fait, je suis sûr que cela fera tout ce que vous avez besoin de faire.

Taken de mon other post sur la façon d'utiliser AutoIt avec 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 

Vous pouvez bien sûr utiliser l'une des AutoItX functions (notez que ce lien va à la référence de la fonction AutoIt, la version com de AutoIt - AutoItX a un sous-ensemble de cette liste ... la documentation est incluse dans le téléchargement) de cette manière. Je ne sais pas ce que vous voulez faire, donc je ne peux pas vous orienter vers les fonctions appropriées, mais cela devrait vous aider à démarrer.

3

ryan_s a la bonne réponse. Vous pourriez repenser en utilisant win32com.

Je préfère le module comtypes à win32com. Il s'intègre mieux avec ctypes et python en général. L'utilisation de l'une ou l'autre approche avec vs 2008 fonctionnera. Voici un exemple qui imprime les noms et les raccourcis clavier pour toutes les commandes dans 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() 
0

Dès l'année 2013, une meilleure option peut être à l'écriture Visual Studio par IronPython la cause mieux CLR/COM et d'autres l'intégration de choses 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