Entwickeln für Windows 7 – WindowsSevenPowerPointAddIn

by Gregor Biswanger 19. Oktober 2009 09:47

Windows-7-logo

Passend zur Windows 7 Launch & House Party unserer .NET Community in Ingolstadt (www.indot.net), habe ich ein PowerPoint-AddIn geschrieben, das auf die API von Windows 7 zugreift und den Fortschritt einer Präsentation in der Taskbar anzeigt. Es soll Demonstrieren, wie einfach das Entwickeln für Windows 7 ist. Die Windows Taskbar kann wärend einer Präsentation kurz durch die Windows-Taste hervorgehoben werden, oder die Präsentation wird auf einem zweiten Monitor angezeigt. Auch das Präsentieren im Fenster wäre möglich.

Das-WindowsSevenPowerPointAddIn-zeigt-den-Status-zur-aktuellen-Folie-an
Das WindowsSevenPowerPointAddIn zeigt den Status zur aktuellen Folie an.

Der kleine How-To Artikel soll hier beschreiben, wie mittels Windows 7 API auf Windows 7 interne Funktionen zugegriffen wird. Zudem kann das AddIn für eigene Windows 7 Partys oder natürlich auch für den eigengebrauch Verwendet werden.

Das WindowsSevenPowerPointAddIn

Um auf die Windows 7 API von .NET aus zugreifen zu können, wird erst das Kostenfreie Windows API Code Pack for Microsoft .NET Framework benötigt. Dann wird ein neues VSTO Projekt in Visual Studio angelegt, mit der Vorlage für PowerPoint.

Abb1-1-Neues-PowerPoint-VSTO-Vorlagenprojekt-anlegen

Abb.1.1. - Neues-PowerPoint-VSTO-Vorlagenprojekt-anlegen

Danach müssen zwei Assemblies vom Windows 7 API Code Pack im Projekt referenziert werden: „C:\WindowsAPICodePack\Shell\bin\Debug\Microsoft.WindowsAPICodePack.Shell.dll“ und „C:\WindowsAPICodePack\Shell\bin\Debug\Microsoft.WindowsAPICodePack.dll“.

Anschließend wird erst mal durchleuchtet was benötigt wird.

Man braucht nun folgende Events:
1, Das beim Wechsel der Folien ausgelöst wird. Das ist zu finden in der Application-Klasse: Application.SlideShowNextSlide.
2, Wenn die Präsentation beendet wird. Auch das wird von der Application-Klasse geboten: Application.SlideShowEnd.

Die Events werden beim laden des AddIn´s Abonniert. Um nun den Status der Taskleiste zu ändern, gibt es die TaskbarManager-Klasse. Dabei wechselt man zur Instance und kann durch „SetProgressValue“ den Wert setzen. Die Werte werden aus den aktuellen Event-Argumenten entnommen und weitergereicht.

   1: using System;
   2: using Microsoft.Office.Interop.PowerPoint;
   3: using Microsoft.WindowsAPICodePack.Taskbar;
   4:  
   5: namespace WindowsSevenPowerPointAddIn
   6: {
   7:     public partial class ThisAddIn
   8:     {
   9:         private void ThisAddIn_Startup(object sender, EventArgs e)
  10:         {
  11:             Application.SlideShowNextSlide += Application_SlideShowNextSlide;
  12:             Application.SlideShowEnd += Application_SlideShowEnd;
  13:         }
  14:  
  15:         private void Application_SlideShowNextSlide( SlideShowWindow e)
  16:         {
  17:             int slidesCount = Application.ActivePresentation.Slides.Count;
  18:             int currentSlideNumber = e.View.CurrentShowPosition;
  19:  
  20:             TaskbarManager.Instance.SetProgressValue( currentSlideNumber, slidesCount );
  21:         }
  22:  
  23:         private void Application_SlideShowEnd( Presentation e )
  24:         {
  25:         }
  26:  
  27:  
  28:         private static void ThisAddIn_Shutdown(object sender, EventArgs e)
  29:         {
  30:         }
  31:  
  32:         // VSTO generated code
  33:     }
  34: }

Listing 1 – Das Abonnieren der Events und das setzen vom Status in der Windows 7 Taskbar.

Damit beim Beenden der Anwendung auch der Status wieder zurück gesetzt wird, schreibt man noch eine ResetProgressBar-Methode, die dann beim beenden der Präsentation ausgeführt wird.

   1: using System;
   2: using Microsoft.Office.Interop.PowerPoint;
   3: using Microsoft.WindowsAPICodePack.Taskbar;
   4:  
   5: namespace WindowsSevenPowerPointAddIn
   6: {
   7:     public partial class ThisAddIn
   8:     {
   9:         private void ThisAddIn_Startup(object sender, EventArgs e)
  10:         {
  11:             Application.SlideShowNextSlide += Application_SlideShowNextSlide;
  12:             Application.SlideShowEnd += Application_SlideShowEnd;
  13:         }
  14:  
  15:         private void Application_SlideShowNextSlide( SlideShowWindow e)
  16:         {
  17:             int slidesCount = Application.ActivePresentation.Slides.Count;
  18:             int currentSlideNumber = e.View.CurrentShowPosition;
  19:  
  20:             TaskbarManager.Instance.SetProgressValue( currentSlideNumber, slidesCount );
  21:         }
  22:  
  23:         private void Application_SlideShowEnd( Presentation e )
  24:         {
  25:             ResetProgressBar();
  26:         }
  27:  
  28:         private void ResetProgressBar()
  29:         {
  30:             TaskbarManager.Instance.SetProgressValue( 0, 100 );
  31:         }
  32:  
  33:         private static void ThisAddIn_Shutdown(object sender, EventArgs e)
  34:         {
  35:         }
  36:  
  37:         // VSTO generated code
  38:     }
  39: }

Listing 2 – Das zurückstellen der Status-Information.

Zu guter Letzt darf der Source-Code auch nur ausgeführt werden, wenn es sich um ein Windows 7 handelt. Auch dafür bietet die TaskbarManager-Klasse eine Lösung mit der IsPlatformSupported-Methode an.

   1: using System;
   2: using Microsoft.Office.Interop.PowerPoint;
   3: using Microsoft.WindowsAPICodePack.Taskbar;
   4:  
   5: namespace WindowsSevenPowerPointAddIn
   6: {
   7:     public partial class ThisAddIn
   8:     {
   9:         private void ThisAddIn_Startup(object sender, EventArgs e)
  10:         {
  11:             if( TaskbarManager.IsPlatformSupported )
  12:             {
  13:                 Application.SlideShowNextSlide += Application_SlideShowNextSlide;
  14:                 Application.SlideShowEnd += Application_SlideShowEnd;
  15:             }
  16:         }
  17:  
  18:         private void Application_SlideShowNextSlide( SlideShowWindow e)
  19:         {
  20:             int slidesCount = Application.ActivePresentation.Slides.Count;
  21:             int currentSlideNumber = e.View.CurrentShowPosition;
  22:  
  23:             TaskbarManager.Instance.SetProgressValue( currentSlideNumber, slidesCount );
  24:         }
  25:  
  26:         private void Application_SlideShowEnd( Presentation e )
  27:         {
  28:             ResetProgressBar();
  29:         }
  30:  
  31:         private void ResetProgressBar()
  32:         {
  33:             TaskbarManager.Instance.SetProgressValue( 0, 100 );
  34:         }
  35:  
  36:         private static void ThisAddIn_Shutdown(object sender, EventArgs e)
  37:         {
  38:         }
  39:  
  40:         // VSTO generated code
  41:     }
  42: }

Listing 3 – Der komplette Source-Code von WindowsSevenPowerPointAddIn.

Um das AddIn weitergeben zu können ohne großen Aufwand, wird einfach unter den Projekteigenschaften bei „Publisch“ – „Publish Now“, ein Installationspaket erzeugt.

Download

Hier gibt es den Download der Solution und den Download des fertigen AddIn´s.

VS2008 VSTO Solution: WindowsSevenPowerPointAddInSolution.zip (771,48 kb)
MS PowerPoint 2007 AddIn: WindowsSevenPowerPointAddIn.zip (6,16 mb)

Fazit

Der Artikel und das AddIn sollen verdeutlichen, wie einfach hier auf Windows 7 mittels .NET zugegriffen werden kann. Weitere Beispiele bietet das Code Pack von selbst an. Wenn jemand Verwendung für dieses AddIn findet, sollte bitte einfach ein Kommentar hinterlassen. :) Viel Spaß damit...



Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war, bitten "kicken" sie ihn.
kick it on dotnet-kicks.de

Kommentare

Powered by BlogEngine.NET 1.4.5.0
Theme by Extensive SEO

Über den Autor

Gregor Biswanger

Microsoft MVP für Client App Dev
XING

Gregor Biswanger (Microsoft MVP für Client App Dev) ist freier Consultant, Trainer, Autor und Speaker.


Seine Schwerpunkte liegen im Bereich der .NET-Architektur, agilen Prozessen und XAML. Er veröffentlichte vor kurzem seine DVD´s mit Video-Trainings zum Thema „Meine erste Windows 8 App“, „Windows Store Apps mit XAML und C#“ und „WPF 4.5 und Silverlight 5“ bei Addison-Wesley von video2brain.


Biswanger ist auch im Auftrag von Intel GmbH als Technologieberater für die Intel Developer Zone aktiv und ist Leader bei der Ingolstädter .NET Developers Group (INdotNET). 

 

Video über mich:
http://www.youtube.com/watch?v=mx_6SiiLxjk


Basta! 2011 Speaker

CLIPer

MCTS
Windows SharePoint Services 3.0 – Application Development (MCTS)