Die Möglichkeiten von Trusted Applications mit Silverlight 5 (Teil 2)
Kommentare

Systemaufrufe
Die Nutzung der COM-Schnittstelle ist seit Silverlight 4 möglich. Mit der fünften Version sind diese Funktionen nicht mehr auf Out-of-Browser-Anwendungen beschränkt, die Interaktion

Systemaufrufe

Die Nutzung der COM-Schnittstelle ist seit Silverlight 4 möglich. Mit der fünften Version sind diese Funktionen nicht mehr auf Out-of-Browser-Anwendungen beschränkt, die Interaktion mit Office-Anwendungen, einem Card-Reader oder Barcodescanner kann also direkt im Browser geschehen. Außerdem ist es nun möglich, mittels P/Invoke (Platform Invocation Services) auf das Win32 API zuzugreifen. Diese Erweiterung bringt webbasierten Silverlight-Anwendungen neue Möglichkeiten, die bisher Desktopanwendungen vorenthalten waren. Die Folge ist eine starke Bindung zum Windows-Betriebssystem. Sobald das Feature in der Silverlight-Applikation verwendet wird, fällt die Kompatibilität zu anderen Betriebssystemen weg. Für Applikationen, denen eine enge Verzahnung mit dem Betriebssystem nicht abträglich oder sogar ein Teil der Anforderungen ist, macht dieses Feature durchaus Sinn.

Als Beispiel soll der Windows Mediaplayer gesteuert werden, indem Nachrichten aus der Silverlight-Anwendung an das Programm gesendet werden. Dabei lässt sich die gewünschte Systemfunktion definieren, indem das von Desktopanwendungen bekannte DllImport-Attribut genutzt wird (Listing 2). Die Methode kann anschließend wie gewohnt aus der .NET-Anwendung aufgerufen werden. Durch das Senden von Nachrichten kann im Mediaplayer die Play/Pause-Taste gedrückt oder der Abspielvorgang gestoppt werden. Die eigentliche Stärke dieses Features besteht darin, dass sich damit auch eigene Anwendungen ansprechen oder Systemfunktionen wie das Auflisten aller Prozesse aufrufen lassen.

Listing 2

public class PInvokeExample
    {
        public const int WM_COMMAND = 0x111;

        [DllImport("User32.dll")]
        public static extern int FindWindow(string strClassName, string strWindowName);

        [DllImport("User32.dll")]
        public static extern Int32 SendMessage(
            int hWnd,               
            int msg,                
            int wParam,             
            int lParam);

        public void MediaPlayerPausePlay()
        {
            var handle = FindWindow("WMPlayerApp", "Windows Media Player");
            SendMessage(handle, WM_COMMAND, 0x00004978, 0x00000000);
        }

        public void MediaPlayerStop()
        {
            var handle = FindWindow("WMPlayerApp", "Windows Media Player");
            SendMessage(handle, WM_COMMAND, 0x00004979, 0x00000000);    
        }
    }  

Mehrere Fenster

Eine weitere interessante Neuerung für vertrauenswürdige Anwendungen, die außerhalb des Browsers laufen, ist die Möglichkeit, mehrere Fenster vom Typ Window zu erzeugen. Damit kann beispielsweise ein benutzerfreundliches Layout über mehrere Monitore ermöglicht werden. Listing 3 zeigt, wie ein neues Fenster erzeugt wird. Es muss der Konstruktor der Window-Klasse aufgerufen und konfiguriert werden, das Erzeugen eines Fensters als XAML-Dokument ist leider nicht möglich. Üblicherweise wird der Content-Eigenschaft des Fensters ein Steuerelement vom Typ UserControl übergeben, das schließlich im Fenster dargestellt wird. Beim Erzeugen eines Fensters wird die Instanz automatisch in die Application.Windows-Liste eingefügt, das Schließen eines Fensters macht die Instanz ungültig. Soll eine Fensterinstanz wiederverwendet werden, empfiehlt es sich, den Schließmechanismus in der Closing-Methode zu beeinflussen. Den genauen Einsatz dieses neuen Features erklärt Sebastian Eschweiler in seinem Artikel „Viele Fenster ziern‘ die App“ auf Seite XX in dieser Ausgabe.

Listing 3

var secondWindow = new Window()
            {
                Title = "2. Fenster",
                Height = 300,
                Width = 300,
                Top = 0,
                Left = 0,
                Content = new MyUserControl(),
                Visibility = Visibility.Visible
            };  
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -