Feed Icon
.NET User Group Leipzig

Ich habe mich, seitdem Uwe Baumann in Leipzig war und eines meiner Makros für seinen TechTalk "Schneller codieren – Visual Studio .NET Extensibility" gegen eine Lizenz (ein Bier) verwendet hat, nicht weiter großartig mit der Programmierung von Makros für Visual Studio 2003 oder Visual Studio 2005 beschäftigt. Wozu auch, denn mit Werkzeugen wie ReSharper von JetBrains, von dem man übrigens beim Vortrag von Roland Weigelt über die Erweiterbarkeit von Visual Studio eine Lizenz gewinnen kann, kann viel fehlende Funktionalität von Visual Studio erschlagen werden. Bei Visual Studio 2003, übrigens auch bei Visual Studio 2005, wurde dem Softwareentwickler zugemutet, einzelne Ordner in der Projektmappe selber wieder zu schließen. Über das Kontextmenü ging das nicht. Also musste ein Makro her, welches das übernommen hat. So weit so gut zu dem Makro für Uwe's TechTalk.

Geöffnete Ordner in Visual Studio 2005 – diesselben Probleme wie in Visual Studio 2003
Abb. 1: Geöffnete Ordner in Visual Studio 2005.

Bei Visual Studio 2005 vermisse ich die Unterstützung von Ereignissen für Sounds. Visual Studio 2003 konnte das für die vielfältigsten Ereignisse, Visual Studio 2005 kann es nur noch, wenn ein Haltepunkt erreicht wird. Bei mittleren bis großen Softwareentwicklungsprojekten ist das durchaus für den einen oder andern ärgerlich, weil trotz und gerade deswegen, wegen Mehrkernprozessoren, 4 GB RAM und mehr, 1 TB RAID 0+1 und höher, Builds zwar noch ihre Zeit brauchen, aber man bequem weiterarbeiten kann. Ohne Feedback, ähnlich wie bei einer Tastatur die Taktilität, muss man ein ungefähres Zeitgefühl haben oder in Visual Studio nach dem Status eines Builds ständig nachschauen. Vielleicht rüstet Microsoft es ja auch im nächsten Service Pack für Visual Studio 2005 wieder nach? Wer weiß das schon so genau, daher habe ich ein Makro geschrieben.

Audioereignisse bei Visual Studio 2005
Abb. 2: Audioereignisse bei Visual Studio 2005 – nur noch für Haltepunkte.

Im Gegensatz zu einer Lösung im Web, überprüft mein Makro nicht die Zeichenfolge im Ausgabe-Fenster von Visual Studio 2005, sondern arbeitet über BuildEvents_OnBuildProjConfigDone(...) Handles BuildEvents.OnBuildProjConfigDone {4} mit Ereignissen aufgrund von angestoßenen Builds eines Projektes. Ist der Build eines Projektes erfolgreich, wird die Datei C:\Windows\Media\chimes.wav {2} abgespielt. Hakt es irgendwo und der Build klappt nicht, dagegen die Datei C:\Windows\Media\Windows Critical Stop.wav {3}. Ein sinnvoller Einsatz des Makros liegt außerdem darin, gleich den kompletten Build einer Lösung anzuhalten, wenn ein Build eines Projektes daraus nicht erfolgreich ist und zwar mit: DTE.ExecuteCommand("Build.Cancel") {5}. Damit nicht bei jedem Build eines Projektes, sondern nur bei der Lösung als solches eine Datei abgespielt wird, muss noch mit der Variable canceled {6, 8, 9} gearbeitet und die Entscheidung, welche Datei abzuspielen ist, in der Methode BuildEvents_OnBuildDone {7} getroffen werden.

Option Strict Off ... Public Module EnvironmentEvents {1} ... Declare Function PlaySound Lib "winmm.dll" Alias "sndPlaySoundA" _
(ByVal lpszSoundName As String, ByVal uFlags As Long) As Long Const BuildSucceedWaveFile = "C:\Windows\Media\chimes.wav" {2} Const BuildFailedWaveFile = "C:\Windows\Media\Windows Critical Stop.wav" {3} Dim canceled As Boolean = False Private Sub BuildEvents_OnBuildProjConfigDone( _ {4} ByVal Project As String, ByVal ProjectConfig As String, _ ByVal Platform As String, ByVal SolutionConfig As String, _ ByVal Success As Boolean) _ Handles BuildEvents.OnBuildProjConfigDone If Success = False Then DTE.ExecuteCommand("Build.Cancel") {5} canceled = True {6} End If End Sub Private Sub BuildEvents_OnBuildDone(ByVal Scope As EnvDTE.vsBuildScope, _ {7} ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildDone If Not canceled Then {8} PlayWaveFile(BuildSucceedWaveFile) Else PlayWaveFile(BuildFailedWaveFile) End If canceled = False {9} End Sub Private Sub PlayWaveFile(ByVal soundFile As String) PlaySound(soundFile, &H1 Or &H2) End Sub End Module

Danke an Dirk Primbs, der gerade auf VB abfährt, für den Tipp zu Handles. Es war dann doch viel einfacher als gedacht, dass Makro muss in EnvironmentEvents {1} eingefügt werden. Wo findet man das? Über den Makro-Explorer in Visual Studio [ALT + F8] und dort einfach auf das entsprechende Makro doppelt klicken.

EvironmentsEvents – Ort für die Reaktion auf Ereignisse in Makros bei Visual Studio 2005
Abb. 3: In EvironmentsEvents muss das Makro eingefügt werden.

Makro-Explorer in Visual Studio 2005
Abb. 4: Makro-Explorer in Visual Studio 2005.

PS: Nein Alex, das ist kein VBA. ;)

Declare Function PlaySound Lib "winmm.dll" Alias "sndPlaySoundA" _
   (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Const BuildSucceedWaveFile = "C:\Windows\Media\chimes.wav"
Const BuildFailedWaveFile = "C:\Windows\Media\Windows Critical Stop.wav"
Dim canceled As Boolean = False

Private Sub BuildEvents_OnBuildProjConfigDone( _
    ByVal Project As String, ByVal ProjectConfig As String, _
    ByVal Platform As String, ByVal SolutionConfig As String, _
    ByVal Success As Boolean) _
    Handles BuildEvents.OnBuildProjConfigDone

    If Success = False Then
        DTE.ExecuteCommand("Build.Cancel")
        canceled = True
    End If
End Sub

Private Sub BuildEvents_OnBuildDone(ByVal Scope As EnvDTE.vsBuildScope, _
    ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildDone
    If Not canceled Then
        PlayWaveFile(BuildSucceedWaveFile)
    Else
        PlayWaveFile(BuildFailedWaveFile)
    End If

    canceled = False
End Sub

Private Sub PlayWaveFile(ByVal soundFile As String)
    PlaySound(soundFile, &H1 Or &H2)
End Sub
Download (1,07 KB)
Tuesday, May 26, 2009 7:29:51 AM (W. Europe Standard Time, UTC+01:00)
Danke, hat sehr geholfen!

Immerhin landest Du damit bei Google auf Rang 2 bei der Suche nach: "visual studio 2005 sound"

Gruß

Michael
Micha
All comments require the approval of the site owner before being displayed.
Name
E-mail
(will show your gravatar icon)
Home page

Comment (Some html is allowed: a@href@title, b, blockquote@cite, em, i, strike, strong, sub, sup, u) where the @ means "attribute." For example, you can use <a href="" title=""> or <blockquote cite="Scott">.  

Live Comment Preview

CEO bei GROSSWEBER, Entrepreneur, Entwickler, Finanzinvestor. Promoter von Community, Open Source und
Open Spaces.

Ich biete Consulting und Schulungen / Trainings, u. a. zu mobilen Geräten, Lync.
GROSSWEBER

Bei GROSSWEBER wird praktiziert, was gepredigt wird. Dort werden Schulungen für moderne Softwaretechnologien angeboten, wie Behavior Driven Development, Clean Code, Git oder HTML5. Their staff is fluent in a variety of languages, including English.

Categories

Calendar

<July 2014>
SunMonTueWedThuFriSat
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

Archive

My subscribed blogs

Blogs of good friends