Aktivierung von Windows 8-Verträgen in Apps

Entwicklerblog für Windows 8-Apps

Ein Einblick in die Entwicklung von Apps im Metro-Stil – präsentiert vom Windows 8-Entwicklerteam

Aktivierung von Windows 8-Verträgen in Apps

  • Comments 0

Bei der Entwicklung von Apps im Metro-Stil werden Sie sich bald mit dem neuen leistungsstarken Konzept der Verträge unter Windows 8 beschäftigen. Mithilfe dieser Verträge wird in Apps im Metro-Stil angegeben, welche Interaktionen mit anderen Apps und Windows unterstützt werden. Möglicherweise haben Sie bereits von einigen dieser Verträge gehört: z. B. den Verträgen für „Suche“, „Freigabe“ usw. Je mehr Apps mit implementierten Verträgen installiert werden, desto besser arbeiten die Apps mit dem System oder untereinander zusammen. In diesem Beitrag erläutere ich die Aktivierung, eines der wichtigsten Konzepte beim Hinzufügen der Verträge zu Apps.

Mithilfe der Windows-Aktivierungsplattform werden Apps im Metro-Stil gestartet und Informationen über die Gründe des Benutzers für das Starten der Apps bereitgestellt. Ein Grund ist beispielsweise der Start über die entsprechende Kachel auf der Startseite; ein anderer ist das Starten einer App für eine bestimmte Aufgabe, etwa das Anzeigen der Suchergebnisse einer Abfrage durch den Benutzer. Windows stellt für die App den Grund für den Start bereit. Bei Bedarf werden weitere Informationen bereitgestellt, die zum Ausführen der Aufgabe erforderlich sind. Bevor es die Windows 8-Aktivierungsplattform gab, wurden diese Informationen über Befehlszeilenparameter an die Apps übergeben. Mit dem neuen Modell wird nun auch die Übertragung von Live-Objekten wie einer StorageFile, ShareOperation usw. unterstützt, die einen Kontext für die App bereitstellen. Verträge sind also wesentlich leistungsfähiger. Befassen wir uns also direkt mit den Einzelheiten, die Sie kennen sollten, um das Starten einer App für einen Vertrag zu unterstützen.

Verträge: Zweck- und kontextgebundenes Starten von Apps im Metro-Stil

Im Demovideo zur Windows 8 Consumer Preview wird deutlich, dass die Windows 8-Verträge die Verbindung Ihrer App mit anderen Apps im Metro-Stil sowie mit der Benutzeroberfläche des Systems darstellen. Der Vertrag für „Dateiöffnungsauswahl“ ermöglicht dem Benutzer beispielsweise das Importieren von Dateien aus einer App in eine andere. Dank des Vertrags für „Suche“ können die Benutzer eine App von einem beliebigen Ort im System aus durchsuchen oder dieselbe Suchanfrage rasch in anderen Apps ausführen. In diesen und anderen Vertragsszenarien muss Windows direkt einen Punkt der Benutzeroberfläche Ihrer App aufrufen, an dem der Benutzer eine bestimmte Aufgabe schnell und effizient durchführen kann. Hier kommen Aktivierungsplattform und API ins Spiel:

Die Initialisierung der App-Interaktionen durch die Benutzer erfolgt auf zwei Arten:

    1. Durch eine Aktion, für die die App in der Vollbildansicht in den Vordergrund gerückt wird. Wir nennen das auch die Aktivierung der Hauptansicht. Ein Beispiel ist der Vertrag für „Suche“.

      Durch Klicken auf eine App im Suchbereich wird diese mit der Ansicht der enthaltenen Suchergebnisse gestartet.
      Beispiel für die Aktivierung der Hauptansicht

    1. Durch eine Aktion, die inline gehostet wird, ohne dass der Kontext der derzeit ausgeführten App verlassen wird. Dies bezeichnen wir auch als Aktivierung der gehosteten Ansicht. Die folgenden beiden Beispiele zeigen die Dateiauswahl in einer App und eine weitere App, die als Freigabeziel verwendet wird.

Durch Auswahl einer App in der Dateiauswahl wird die Benutzeroberfläche der App an der Stelle gestartet, an der eine Datei ausgewählt werden kann.
Beispiel einer Aktivierung der gehosteten Ansicht in der Dateiauswahl


Starten der App „Mail“ mithilfe des Knopfs „Teilen“, um das entsprechende Foto freizugeben
Beispiel einer Aktivierung der gehosteten Ansicht für Freigabeziele

Die Unterschiede:

Aktivierung der Hauptansicht

Aktivierung der gehosteten Ansicht

Vollständig immersiv und startet die Haupt-App auf dem Bildschirm

Rendert die Benutzeroberfläche innerhalb des Systemchroms

Kann für unterschiedlichste Aufgaben verwendet werden

Wird für eine kurze, zielgerichtete Aufgabe verwendet, auf die der Code zugeschnitten ist

Wird in der Liste für den App-Wechsel angezeigt

Wird nicht in der Liste für den App-Wechsel angezeigt

Kann mithilfe der Schließbewegung geschlossen werden

Verändert nicht die Ansicht des Hauptfensters für dieselbe App

Schauen wir uns diese Aktivierungsmodelle genauer an, und wenden wir sie auf einige verbreitete Szenarien an, die Sie bei der Entwicklung von großartigen Apps im Metro-Stil unterstützen.

Szenario 1: Integrieren der Aktivierung der „Suche“ in die App

Unter Windows 8 ermöglicht das Hinzufügen der Suchfunktion mithilfe des Vertrags für „Suche“ dem Benutzer, die Inhalte einer App jederzeit und von jedem Punkt des Systems aus zu durchsuchen. Ist die App die Haupt-App auf dem Bildschirm, können Benutzer deren Inhalte direkt mithilfe des Knopfs „Suche“ durchsuchen. Andernfalls können Benutzer den Knopf „Suche“ auswählen und anschließend aus einer App-Liste im Suchbereich die zu durchsuchende App auswählen.

Wird die Aktivierung der „Suche“ unterstützt, kann die App jederzeit gestartet werden und die Suchergebnisse einer bestimmten Anfrage anzeigen. Genau wie der Start über die Startseite ist auch der Start aus dem Suchbereich eine Aktivierung der Hauptansicht. Durch die Unterstützung mehrerer Verträge kann die App potenziell für zahlreiche Szenarien aktiviert werden. Zudem kann die App diese Aktivierung auch dann empfangen, wenn sie bereits ausgeführt wird, da der Benutzer die Hauptansicht für ein spezifisches Szenario verwenden möchte, etwa zur Anzeige von Suchergebnissen. Damit das funktioniert, empfehle ich:

  • Verzögern Sie das Laden von Code, der für den Vertrag für die Hauptansicht, für den die App aktiviert ist, nicht unbedingt notwendig ist.
  • Trennen Sie die allgemeine Initialisierungslogik, die Sie für alle Verträge verwenden, von der Logik, die zur Ausführung eines spezifischen Vertrags erforderlich ist.
  • Stellen Sie sicher, dass Code, der nur einmal beim Start ausgeführt werden soll, nicht so zum Aktivierungs-Handler hinzugefügt wird, dass eine mehrfache Ausführung möglich ist.
  • Laden Sie alle vorherigen Zustände und die Einstellungen neu, wenn die App aus einem geschlossenen Zustand gestartet wird, sodass sie aus Sicht des Benutzers stets ausgeführt und verbunden erscheint.

Sehen Sie sich die Apps „Store“ und „Fotos“ an. Sie sind hervorragende Beispiele für diese Empfehlungen zur Unterstützung der Aktivierung der „Suche“.

Abbildung der App „Store“ mit den Suchergebnissen für „Kalender“ Geöffneter Suchbereich, in dem der Benutzer eine neue Suchanfrage eingibt

Suche in der App „Store“

 

Die App „Fotos“ wird ausgeführt und zeigt die Suchergebnisse für „Vancouver“ an. Geöffneter Suchbereich mit einer ausgeführten Suchanfrage für „Vancouver“

Suche in der App „Fotos“

Betrachten wir nun, wie die Aktivierung der „Suche“ in JavaScript- und XAML-Apps richtig unterstützt wird.

JavaScript-Apps

Bei JavaScript-Apps im Metro-Stil wird die Aktivierung mithilfe des Ereignisses WinJS.Application.onactivated verfügbar gemacht. Dieses Ereignis wird ausgelöst, nachdem DOMContentLoaded abgeschlossen ist, wenn die App nicht bereits ausgeführt wird oder beendet wurde. Andernfalls wird das Ereignis ausgelöst, sobald die App von Windows deaktiviert werden muss. Die Visual Studio-Tools für JavaScript-Apps richten die Registrierung für dieses Ereignis in „default.js“ ein und stellen so einen Bereich zur Verfügung, wo Sie Code einfügen können, der beim Auftreten einer allgemeinen Startaktivierung ausgeführt wird, d. h. wenn der Benutzer die App von der Startseite aus startet.

So erweitern Sie die Unterstützung für die Aktivierung der „Suche“ in der App

  1. Fügen Sie mithilfe des Manifest-Designers von Visual Studio die „Suche“-Deklaration zum Manifest hinzu.
  2. Platzieren Sie allgemeinen Initialisierungscode, der – unabhängig vom Grund – bei jedem Start der App ausgeführt werden muss, in den globalen Gültigkeitsbereich des JavaScripts. Fügen Sie Code, der Zugriff auf das DOM benötigt, in einen DOMContentLoaded-Ereignishandler ein.
  3. Führen Sie die Registrierung im für die Suche aktivierten Handle aus.
  4. Wenn die App für die „Suche“ aktiviert wird, navigieren Sie zur Suchergebnisseite, und übergeben Sie den queryText aus den Aktivierungsereignisargumenten.

Wenn Sie so denken wie ich, suchen Sie eine einfachere Methode als die manuelle Durchführung. Glücklicherweise können Sie dies fast vollständig mit Visual Studio-Tools erledigen, indem Sie mit der rechten Maustaste auf Ihr Projekt klicken, „Hinzufügen > Neues Element“ auswählen und im Dialogfeld „Vertrag für ‚Suche’“ auswählen. Der größte Teil des Codes, den Sie hier sehen, und eine Benutzeroberfläche für die Suche, die Suchergebnisse den UX-Richtlinien für Suche entsprechend anzeigt, wird automatisch erzeugt. Jedoch Sie müssen diese Tools zusammen mit dem „WinJS.Navigation“-Framework verwenden.

Hier sehen Sie einen Codeausschnitt aus der Datei „default.js“ meiner Foto-App mit der Unterstützung für die Aktivierung der „Suche“:

// Register activated event handler
WinJS.Application.addEventListener("activated", function (eventObject) {
...
if (eventObject.detail.kind === appModel.Activation.ActivationKind.launch) {
...
} else if (eventObject.detail.kind === appModel.Activation.ActivationKind.search) {
uri = searchPageURI;
pageParameters = { queryText: eventObject.detail.queryText };
}
// Indicate to the system that the splash screen must not be torn down
// until after processAll and navigate complete asynchronously.
if (uri) {
eventObject.setPromise(ui.processAll().then(function () {
return nav.navigate(uri, pageParameters);
}));
}
});

XAML-Apps

Für XAML-Apps im Metro-Stil übernimmt die Klasse Windows.UI.Xaml.Application einen Großteil der Arbeit, die nötig ist, damit die App die Aktivierung unterstützt. Diese Klasse macht einen Satz von Aktivierungsmethoden mit starker Typisierung verfügbar, die Sie zur Unterstützung von allgemeinen Verträgen wie „Suche“ außer Kraft setzen können. Bei allen Vertragsaktivierungen ohne stark typisierte Methode können Sie die OnActivated-Methode außer Kraft setzen und anhand der Art der Aktivierung festlegen, für welchen Vertrag die App aktiviert sein soll.

Neue Projekte für XAML-Apps in Visual Studio enthalten bereits generierten Code, der die Windows.UI.Xaml.Application-Klasse verwendet, um die Aktivierung der App für einen allgemeinen Start zu ermöglichen. Der Code für die Aktivierung befindet sich in der Klassendarstellung für die App, in den „App.xaml.cs/cpp/vb“-Dateien.

So erweitern Sie die Unterstützung für die Aktivierung der „Suche“ in der App

  1. Fügen Sie mithilfe des Manifest-Designers von Visual Studio die „Suche“-Deklaration zum Manifest hinzu.
  2. Platzieren Sie allgemeinen Initialisierungscode, der – unabhängig vom Grund – bei jedem Start der App ausgeführt werden muss, in den App-Konstruktor von „App.xaml.cs/cpp/vb“.
  3. Setzen Sie zur Aktivierung der „Suche“ die stark typisierte OnSearchActivated-Methode in „App.xaml.cs/cpp/vb“ außer Kraft.
  4. Laden Sie die „Suche“-Benutzeroberfläche, und zeigen Sie die empfangenen Suchergebnisse für die Anfrage in den SearchActivatedEventArgs an.

Wie bei JavaScript-Apps gibt es auch hier eine einfachere Methode, als die manuelle Durchführung. Einen Großteil der Arbeit können Sie mithilfe der Visual Studio-Tools erledigen. Klicken Sie mit der rechten Maustaste auf Ihr Projekt, wählen Sie „Hinzufügen > Neues Element“ aus und anschließend im Dialogfeld „Vertrag für ‚Suche’“. Der größte Teil des Codes, den Sie hier sehen, und eine Benutzeroberfläche für die Suche, die Suchergebnisse den UX-Richtlinien für Suche entsprechend anzeigt, wird automatisch erzeugt.

Hier sehen Sie C#-Codeausschnitte aus meiner Foto-App mit der Unterstützung für die Aktivierung der „Suche“:

Wir müssen die OnSearchActivated-Methode außer Kraft setzen, um die Aktivierung der „Suche“ zu unterstützen:

protected override void OnSearchActivated(SearchActivatedEventArgs args)
{
// Load Search UI
PhotoApp.SearchResultsPage.Activate(args.QueryText);
}

Die Activate-Methode der SearchResultsPage richtet eine Benutzeroberfläche ein, die die Suchergebnisse aus der Suchanfrage des Benutzers anzeigt:

// SearchResultsPage.xaml.cs code snippet 
public static void Activate(String queryText)
{
// If the window isn't already using Frame navigation, insert our own frame
var previousContent = Window.Current.Content;
var frame = previousContent as Frame;
if (frame == null)
{
frame = new Frame();
Window.Current.Content = frame;
}
// Use navigation to display the results, packing both the query text and the previous
// Window content into a single parameter object
frame.Navigate(typeof(SearchResultsPage1),
new Tuple<String, UIElement>(queryText, previousContent));
// The window must be activated in 15 seconds
Window.Current.Activate();
}

Die Logik und Prinzipien, die hier präsentiert werden, sind nicht nur für das Hinzufügen von Unterstützung für die Aktivierung der „Suche“ anwendbar: Sie können dieselben Techniken verwenden, wenn Sie Unterstützung für Protokolle, Dateizuordnungen und die automatische Wiedergabe von Geräten hinzufügen, da es sich auch hier um Verträge zur Aktivierung der Hauptansicht handelt.

Szenario 2: Integrieren der Aktivierung der „Dateiöffnungsauswahl“ in die App

Mit einer App im Metro-Stil kann die Dateiauswahl aufgerufen werden, sodass der Benutzer sein System durchsuchen und Dateien und Ordner auswählen kann, die mit der App bearbeitet werden sollen. Zudem kann der Benutzer (mithilfe der Funktion „Speichern unter“) eine Datei unter einem neuen Namen, mit einem anderen Dateityp oder an einem anderen Ort speichern. Die Dateiauswahl kann des Weiteren von einer App als Schnittstelle verwendet werden, mit der anderen Apps Dateien, ein Speicherort oder sogar Dateiupdates bereitgestellt werden. Wenn Sie den Vertrag für „Dateiöffnungsauswahl“ integrieren, können die Benutzer Dateien aus Ihrer App direkt aus einer anderen App heraus auswählen. Dadurch erhalten die Benutzer die Freiheit und Flexibilität, Dateien auszuwählen, die von Ihrer App gespeichert und angezeigt werden.

Beim Starten einer App für den Vertrag für „Dateiöffnungsauswahl“ handelt es sich um eine Aktivierung der gehosteten Ansicht. Die Benutzeroberfläche der App wird innerhalb der Dateiauswahl gehostet, und der Code, der für diese Aktivierung ausgeführt wird, darf ausschließlich dazu verwendet werden, den Benutzern die Auswahl von Dateien zu ermöglichen. Es ist wichtig, dass die App an diesem Punkt so schnell wie möglich reagiert, damit der Vorgang für die Benutzer nahtlos verläuft. Laden Sie keinen Code oder keine Bibliotheken, die nicht für die spezifische Aufgabe der Aktivierung aus der gehosteten Ansicht erforderlich sind.

Ich empfehle einen Blick auf die App „SkyDrive“, die ein hervorragendes Beispiel für die Unterstützung der Aktivierung der „Dateiöffnungsauswahl“ ist, in dem die App einzig auf die Aufgabe ausgerichtet ist, den Benutzern die Dateiauswahl zu ermöglichen.

Die Auswahl wird ausgeführt, und der Benutzer kann eine Datei aus seiner SkyDrive-App auswählen.

Unterstützung der Dateiöffnungsauswahl in der SkyDrive-App

Sehen wir uns nun an, wie Sie die Aktivierung der „Dateiöffnungsauswahl“ in JavaScript- und XAML-Apps richtig unterstützen.

JavaScript-Apps

Die Aktivierung aus der gehosteten Ansicht erfolgt in JavaScript-Apps im Metro-Stil auf die gleiche Art wie die Aktivierung aus der Hauptansicht. Es gibt jedoch einen wesentlichen Unterschied: Die Aktivierung der gehosteten Ansicht erfolgt stets in einem neuen Fenster und Skriptkontext. Das bedeutet, dass für den Code, mit dem die Aktivierung verarbeitet wird, kein Zugriff auf Bibliotheken, globale Variablen oder das DOM der Haupt-App besteht.

So erweitern Sie Ihre App für die Unterstützung der Aktivierung der „Dateiöffnungsauswahl“

  1. Erstellen Sie eine neue HTML-Seite, die speziell für den Vertrag für „Dateiöffnungsauswahl“ entworfen ist.
  2. Fügen Sie im Manifest-Designer von Visual Studio die Deklaration der „Dateiöffnungsauswahl“ hinzu, und legen Sie die neu erstellte HTML-Seite als Startseite fest.
  3. Um eine optimale Leistung zu gewährleisten, laden Sie auf dieser Seite ausschließlich JavaScript und andere Ressourcen, die für die Unterstützung des Vertrags für „Dateiöffnungsauswahl“ erforderlich sind.
  4. Strukturieren Sie den Ereignishandler für die Aktivierung so, dass ausschließlich die Aktivierung des Vertrags für „Dateiöffnungsauswahl“ verarbeitet wird. Dieser Handler wird während dem Ausführen der Dateiauswahl-Aufgabe nur einmal aufgerufen.
  5. Steuern Sie die Dateiauswahl mithilfe der Ereignisargumente der Aktivierung.

Um Zeit zu sparen, können Sie einen Großteil dieser Arbeit mit den Visual Studio-Tools erledigen. Klicken Sie einfach mit der rechten Maustaste auf Ihr Projekt, wählen Sie „Hinzufügen > Neues Element“ aus und anschließend im Dialogfeld den Vertrag für „Dateiauswahl“. Der Großteil der angezeigten Vorgänge wird automatisch für Ihr Projekt erstellt.

Im folgenden Codeausschnitt aus der Datei „fileOpenPicker.js“ meiner Foto-App können Sie die Verarbeitung der Aktivierung der „Dateiöffnungsauswahl“ nachlesen:

// Register activated event handler for handling File Open Picker activation
WinJS.Application.addEventListener("activated", function (eventObject) {
if (eventObject.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.fileOpenPicker) {
pickerUI = eventObject.detail.fileOpenPickerUI;
pickerUI.onfileremoved = fileRemovedFromPickerUI;
...
}
});

WinJS.Application.start();

XAML-Apps

In XAML-Apps im Metro-Stil wird die Aktivierung der gehosteten Ansicht auf ähnliche Weise unterstützt wie die Aktivierung der Hauptansicht. Der größte Unterschied besteht darin, dass die App beim Verarbeiten der Aktivierung nun einen neuen Thread und ein neues Fenster erstellen muss. Das Erstellen des neuen Threads und des neuen Fensters für die Aktivierung der gehosteten Ansicht wird vom Vorlagencode in Visual Studio übernommen.

Für die Verarbeitung der Aktivierung der „Dateiöffnungsauswahl“ müssen von einer XAML-App folgende Schritte ausgeführt werden:

  1. Hinzufügen der Deklaration der „Dateiöffnungsauswahl“ zu Ihrem Manifest mit dem Manifest-Designer von Visual Studio
  2. Außer Kraft setzen der OnFileOpenPickerActivated-Methode in „App.Xaml.cs/cpp/vb“ und Laden der Seite, die diesen Vertrag verarbeitet
  3. Übergeben von FileOpenPickerActivatedEventArgs an die Seite, mit der dieser Vertrag verarbeitet wird, damit letztere auf die Dateiauswahl reagieren kann

Um Zeit zu sparen, können Sie diese Arbeit mit den Visual Studio-Tools erledigen. Klicken Sie einfach mit der rechten Maustaste auf Ihr Projekt, wählen Sie „Hinzufügen > Neues Element“ aus und anschließend im Dialogfeld den Vertrag für „Dateiauswahl“. Der Großteil der angezeigten Vorgänge wird automatisch für Ihr Projekt erstellt.

Sehen Sie sich beispielsweise im folgenden C#-Ausschnitt meiner Foto-App an, wie die Aktivierung der „Dateiöffnungsauswahl“ verarbeitet wird:

// App.xaml.cs code snippet
protected override void OnFileOpenPickerActivated(FileOpenPickerActivatedEventArgs args)
{
var fileOpenPickerPage = new PhotoApp.FileOpenPickerPage();
fileOpenPickerPage.Activate(args);
}

// FileOpenPickerPage.xaml.cs code snippet
public void Activate(FileOpenPickerActivatedEventArgs args)
{
this._fileOpenPickerUI = args.FileOpenPickerUI;
this._fileOpenPickerUI.FileRemoved += FileOpenPickerUI_FileRemoved;

// Show the user’s photos in the Picker UI
...

Window.Current.Content = this;
// The window must be activated in 15 seconds
Window.Current.Activate();
}

Die Logik und Prinzipien, die hier dargestellt werden, sind nicht nur für das Hinzufügen von Unterstützung für die Aktivierung der „Dateiöffnungsauswahl“ anwendbar: Mit derselben Methode können Sie die Unterstützung für die Verträge für Ziel freigeben, Dateispeicherungsauswahl, Kontaktauswahl, Kameraeinstellungen und Einstellungen für Druckaufgaben hinzufügen, da es sich hierbei ebenfalls um Verträge zur Aktivierung der gehosteten Ansicht handelt.

Zusammenfassung

Ich habe Ihnen gezeigt, wie „Suche“, „Dateiauswahl“ und andere Windows 8-Verträge es Benutzern in Ihrer App ermöglichen, spezifische Aufgaben von anderen Teilen des Systems oder in bestimmten Szenarien sogar von anderen Apps zu erledigen. Die Benutzer werden erwarten, dass diese Aufgaben in Ihrer App schnell und flüssig ausgeführt werden, da sowohl Windows als auch der App Zweck und Aufgabe bekannt sind. Die richtige Implementierung der App-Aktivierung ist beim benutzerfreundlichen Entwickeln für diese Verträge von grundlegender Bedeutung. Auch wenn Sie nur am Kern einer App arbeiten und dabei überhaupt keine Verträge verwenden, können diese Hinweise bei der Einrichtung der allgemeinen Startaktivierung hilfreich sein. So können Sie die App später leicht um die Unterstützung von Verträgen erweitern, ohne den Code umgestalten zu müssen.

Zur Erinnerung:

  1. Platzieren Sie alles, was zur allgemeinen App-Initialisierungslogik gehört, an einem Speicherort, an dem diese Elemente unabhängig von der Art der Aktivierung der App ausgeführt werden.
  2. Die Aktivierungs-Handler können auch dann ausgeführt werden, wenn die App bereits ausgeführt wird oder beendet wurde. Stellen Sie sicher, dass dies keine unbeabsichtigten Konsequenzen für die App hat.
  3. Visual Studio-Tools können Ihnen bei der Unterstützung der Verträge für „Suche“, „Ziel freigeben“ und „Dateiöffnungsauswahl“ einen großen Teil der Arbeit abnehmen. Rechtsklicken Sie einfach auf Ihr Projekt, und wählen Sie „Hinzufügen > Neues Element“ aus.
  4. Beim Empfang einer Aktivierung der gehosteten Ansicht laden Sie nur den Code, der für die mit der Aktivierung zusammenhängenden Aufgabe notwendig ist.

Weitere Informationen zu Aktivierung und Verträgen unter Windows 8 finden Sie unter den folgenden Links. Sie können Ihre Fragen auch in unseren Foren stellen.

Dokumentation

Beispiele

Vielen Dank

Derek Gebhard
Programmmanager, Windows-Benutzeroberfläche

Unter Mitarbeit von: Jake Sabulsky, Marco Matos, Daniel Oliver

  • Loading...
Leave a Comment
  • Please add 1 and 8 and type the answer here:
  • Post