Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Important
Metadata zařízení jsou zastaralá a budou odebrána v budoucí verzi Windows. Informace o nahrazení této funkce naleznete v tématu Metadata kontejneru balíčku ovladačů.
V systému Windows 8.1 můžou aplikace zařízení UPW provádět údržbu tiskárny, jako je například zarovnání tiskových hlav a čisticích trysek. Tento článek používá verzi C# ukázky správy tiskové úlohy a údržby tiskárny k předvedení obousměrné komunikace (Bidi) k provedení takové údržby zařízení. Další informace o aplikacích zařízení UWP obecně najdete v tématu Meet UWP device apps.
Verze jazyka C# ukázky Správa tiskové úlohy a údržba tiskárny demonstruje údržbu tiskárny pomocí souboru DeviceMaintenance.xaml.cs v projektu DeviceAppForPrinters2. To work with Bidi, the sample uses the printer extension library in the PrinterExtensionLibrary project. Knihovna rozšíření tiskárny poskytuje pohodlný způsob, jak získat přístup k rozhraním rozšíření tiskárny ovladače tisku v4. Další informace najdete v přehledu knihovny rozšíření tiskárny.
Note
Příklady kódu uvedené v tomto článku jsou založené na verzi C# ukázky správy tiskové úlohy a údržby tiskárny . Tato ukázka je dostupná také v JavaScriptu a C++. Vzhledem k tomu, že C++ má přímý přístup k modelu COM, verze C++ ukázky neobsahuje projekty knihovny kódu. Stáhněte si ukázky a podívejte se na nejnovější verze kódu.
Printer maintenance
Windows 8.1 introduces new printer extension interfaces in the v4 printer driver that you can use for implementing device maintenance: IPrinterBidiSetRequestCallback, IPrinterExtensionAsyncOperation , and IPrinterQueue2. Tato rozhraní umožňují asynchronně odesílat žádosti Bidi do monitoru portů, aby je bylo možné přeložit na příkazy specifické pro zařízení a protokol a pak je odeslat do tiskárny. Další informace najdete v tématu Údržba zařízení (ovladač tiskárny v4).
Tip
Aplikace C# a JavaScript nemůžou přímo pracovat s rozhraními COM API. Pokud píšete aplikaci pro zařízení UPW v jazyce C# nebo JavaScript, použijte knihovnu rozšíření tiskárny pro přístup k těmto rozhraním (jak je znázorněno v tomto článku).
Prerequisites
Než začnete:
Ujistěte se, že je tiskárna nainstalovaná pomocí ovladače tisku v4. Pro více informací si přečtěte Vývoj ovladačů tisku v4.
Nastavení vývojového počítače See Getting started for info about downloading the tools and creating a developer account.
Přidružte aplikaci ke Storu. Informace o tom najdete v tématu Vytvoření aplikace zařízení pro UPW.
Vytvořte metadata zařízení pro tiskárnu, která ji přidruží k aplikaci. Další informace najdete v tématu Vytvoření metadat zařízení.
Sestavte uživatelské rozhraní pro hlavní stránku vaší aplikace. Všechny aplikace pro zařízení s UPW je možné spustit na obrazovce Start, kde se zobrazují na celé obrazovce. Pomocí prostředí Start můžete zvýraznit produkty nebo služby způsobem, který odpovídá konkrétnímu brandingu a funkcím vašich zařízení. Typy ovládacích prvků uživatelského rozhraní, které může používat, neexistují žádná zvláštní omezení. Pokud chcete začít s návrhem prostředí na celé obrazovce, přečtěte si principy návrhu Microsoft Storu.
If you're writing your app with C# or JavaScript, add the PrinterExtensionLibrary project to your UWP device app solution. Tento projekt najdete v ukázce Správa tiskové úlohy a údržba tiskárny.
Note
Vzhledem k tomu, že C++ má přímý přístup k modelu COM, aplikace C++ nevyžadují pro práci s kontextem zařízení tiskárny založeného na modelu COM samostatnou knihovnu.
Krok 1: Příprava žádosti o nabídku
Rozhraní údržby zařízení vyžadují, aby vaše požadavky Bidi byly data XML ve formě řetězce. Žádosti Bidi můžete vytvořit všude, kde má v aplikaci smysl. Žádosti Bidi můžete například uložit jako řetězcové konstanty nebo je dynamicky vytvořit na základě uživatelského vstupu. Ukázka správy tiskové úlohy a údržby tiskárny vytvoří výchozí požadavek v OnNavigatedTo metodě. For more info about Bidi, see Bidirectional Communications.
This example is from the OnNavigatedTo method of the DeviceMaintenance.xaml.cs file.
string defaultBidiQuery =
"<bidi:Set xmlns:bidi=\"http://schemas.microsoft.com/windows/2005/03/printing/bidi\">\r\n" +
" <Query schema='\\Printer.Maintenance:CleanHead'>\r\n" +
" <BIDI_BOOL>false</BIDI_BOOL>\r\n" +
" </Query>\r\n" +
"</bidi:Set>";
Krok 2: Vyhledání tiskárny
Před odesláním příkazů do tiskárny musí aplikace nejprve tiskárnu najít. V tomto případě ukázka správy tiskové úlohy a údržby tiskárny obsahuje třídu s názvem PrinterEnumeration (v souboru PrinterEnumeration.cs ). Tato třída najde všechny tiskárny přidružené k aplikaci prostřednictvím metadat zařízení a vrátí seznam PrinterInfo objektů, které obsahují názvy a ID zařízení pro každou tiskárnu.
This example is from the EnumeratePrinters_Click method of the DeviceMaintenance.xaml.cs file. To ukazuje, jak ukázkový kód používá třídu PrinterEnumeration k získání seznamu přidružených tiskáren.
private async void EnumeratePrinters_Click(object sender, RoutedEventArgs e)
{
try
{
rootPage.NotifyUser("Enumerating printers. Please wait", NotifyType.StatusMessage);
// Retrieve the running app's package family name, and enumerate associated printers.
string currentPackageFamilyName = Windows.ApplicationModel.Package.Current.Id.FamilyName;
// Enumerate associated printers.
PrinterEnumeration pe = new PrinterEnumeration(currentPackageFamilyName);
List<PrinterInfo> associatedPrinters = await pe.EnumeratePrintersAsync();
// Update the data binding source on the combo box that displays the list of printers.
PrinterComboBox.ItemsSource = associatedPrinters;
if (associatedPrinters.Count > 0)
{
PrinterComboBox.SelectedIndex = 0;
rootPage.NotifyUser(associatedPrinters.Count + " printers enumerated", NotifyType.StatusMessage);
}
else
{
rootPage.NotifyUser(DisplayStrings.NoPrintersEnumerated, NotifyType.ErrorMessage);
}
}
catch (Exception exception)
{
rootPage.NotifyUser("Caught an exception: " + exception.Message, NotifyType.ErrorMessage);
}
}
Tip
For more info about the PrinterEnumeration and PrinterInfo classes, see the PrinterEnumeration.cs file.
Krok 3: Odeslání žádosti o nabídku
K odeslání požadavku Bidi vyžadují rozhraní údržby zařízení řetězec Bidi a zpětné volání. Ve SendBidiRequest_Click metodě vzorek nejprve použije objekt PrinterInfo k vytvoření objektu kontextu rozšíření tiskárny nazvaného context.
PrinterBidiSetRequestCallback Pak se vytvoří objekt a obslužná rutina události se přidá pro zpracování události zpětného OnBidiResponseReceived volání. Nakonec se metoda kontextu SendBidiSetRequestAsync rozšíření tiskárny používá k odeslání řetězce Bidi a zpětného volání.
This example is from the SendBidiRequest_Click method of the DeviceMaintenance.xaml.cs file.
private void SendBidiRequest_Click(object sender, RoutedEventArgs e)
{
try
{
PrinterInfo queue = (PrinterInfo)PrinterComboBox.SelectedItem;
// Retrieve a COM IPrinterExtensionContext object, using the static WinRT factory.
// Then instantiate one "PrinterExtensionContext" object that allows operations on the COM object.
Object comContext = Windows.Devices.Printers.Extensions.PrintExtensionContext.FromDeviceId(queue.DeviceId);
PrinterExtensionContext context = new PrinterExtensionContext(comContext);
// Create an instance of the callback object, and perform an asynchronous 'bidi set' operation.
PrinterBidiSetRequestCallback callback = new PrinterBidiSetRequestCallback();
// Add an event handler to the callback object's OnBidiResponseReceived event.
// The event handler will be invoked once the Bidi response is received.
callback.OnBidiResponseReceived += OnBidiResponseReceived;
// Send the Bidi "Set" query asynchronously.
IPrinterExtensionAsyncOperation operationContext
= context.Queue.SendBidiSetRequestAsync(BidiQueryInput.Text, callback);
// The 'operationContext' object can be used to cancel the operation if required.
}
catch (Exception exception)
{
rootPage.NotifyUser("Caught an exception: " + exception.Message, NotifyType.ErrorMessage);
}
}
Krok 4: Přijetí odpovědi Bidi
Po dokončení operace "set" Bidi se vyvolá objekt zpětného volání typu PrinterBidiSetRequestCallback. Toto zpětné volání se postará o zpracování chyb z odpovědi HRESULT a pak aktivuje OnBidiResponseReceived událost a odešle odpověď Bidi prostřednictvím parametrů události.
This example shows the PrinterBidiSetRequestCallback class definition in the DeviceMaintenance.xaml.cs file.
internal class PrinterBidiSetRequestCallback : IPrinterBidiSetRequestCallback
{
/// <summary>
/// This method is invoked when the asynchronous Bidi "Set" operation is completed.
/// </summary>
public void Completed(string response, int statusHResult)
{
string result;
if (statusHResult == (int)HRESULT.S_OK)
{
result = "The response is \r\n" + response;
}
else
{
result = "The HRESULT received is: 0x" + statusHResult.ToString("X") + "\r\n" +
"No Bidi response was received";
}
// Invoke the event handlers when the Bidi response is received.
OnBidiResponseReceived(null, result);
}
/// <summary>
/// This event will be invoked when the Bidi 'set' response is received.
/// </summary>
public event EventHandler<string> OnBidiResponseReceived;
}
Odpověď Bidi se pak odešle do OnBidiResponseReceived metody, kde Dispatcher se použije k zobrazení výsledků ve vlákně uživatelského rozhraní.
This example is from the OnBidiResponseReceived method of the DeviceMaintenance.xaml.cs file.
internal async void OnBidiResponseReceived(object sender, string bidiResponse)
{
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
BidiResponseOutput.Text = bidiResponse;
});
}
Testing
Než budete moct otestovat aplikaci zařízení UPW, musí být propojená s tiskárnou pomocí metadat zařízení.
K přidání informací o aplikaci zařízení do tiskárny potřebujete kopii balíčku metadat zařízení. Pokud nemáte metadata zařízení, můžete je vytvořit pomocí Průvodce vytvářením metadat zařízení , jak je popsáno v článku Vytvoření metadat zařízení pro aplikaci zařízení UPW.
Note
Pokud chcete použít Průvodce vytvářením metadat zařízení, musíte před dokončením kroků v tomto článku nainstalovat sadu Microsoft Visual Studio Professional, Microsoft Visual Studio Ultimate nebo samostatnou sadu SDK pro Windows 8.1. Při instalaci sady Microsoft Visual Studio Express pro Windows se nainstaluje verze sady SDK, která průvodce neobsahuje.
Následující kroky sestaví aplikaci a nainstalují metadata zařízení.
Povolte testovací podepisování.
Spusťte průvodce vytvářením metadat zařízení z %ProgramFiles(x86)%\Windows Kits\8.1\bin\x86 dvojitým kliknutím na DeviceMetadataWizard.exe
From the Tools menu, select Enable Test Signing.
Restartování počítače
Sestavte řešení otevřením souboru řešení (.sln). Po načtení ukázky stiskněte klávesu F7 nebo přejděte do sestavení> řešení z horní nabídky.
Odpojte a odinstalujte tiskárnu. Tento krok je povinný, aby systém Windows při příštím zjištění zařízení přečetl aktualizovaná metadata zařízení.
Umožňuje upravit a uložit metadata zařízení. Pokud chcete propojit aplikaci zařízení se zařízením, musíte aplikaci zařízení přidružit k zařízení. Pokud se metadata zařízení ještě nevytvoří, přečtěte si téma Vytvoření metadat zařízení pro aplikaci pro zařízení UPW.
Pokud průvodce vytvářením metadat zařízení ještě není otevřený, spusťte ho z %ProgramFiles(x86)%\Windows Kits\8.1\bin\x86 poklikáním na DeviceMetadataWizard.exe.
Vyberte Upravit metadata zařízení. Tato možnost umožňuje upravit existující balíček metadat zařízení.
In the Open dialog box, locate the device metadata package associated with your UWP device app. (It has a devicemetadata-ms file extension.)
Na stránce Zadejte informace o aplikaci pro zařízení UWP zadejte informace o aplikaci Microsoft Store do pole aplikace pro zařízení UWP. Výběrem možnosti Importovat soubor manifestu aplikace PROWP automaticky zadejte název balíčku, název vydavatele a ID aplikace PROWP.
If your app is registering for printer notifications, fill out the Notification handlers box. In Event ID, enter the name of the print event handler. In Event Asset, enter the name of the file where that code resides.
When you're done, select Next until you get to the Finish page.
Na stránce Zkontrolujte balíček metadat zařízení se ujistěte, že jsou všechna nastavení správná, a zaškrtněte zaškrtávací políčko Zkopírovat balíček metadat zařízení do úložiště metadat v místním počítači. Then select Save.
Znovu připojte tiskárnu, aby systém Windows při připojení zařízení přečetl aktualizovaná metadata zařízení.
Related articles
- Údržba zařízení (ovladač tiskárny v4)
- Vývoj tiskových ovladačů v4
- Bidirectional Communications
- Začínáme s aplikacemi pro UWP
- Vytvoření aplikace pro zařízení s UPW (podrobný průvodce)
- Vytvoření metadat zařízení pro aplikaci UWP zařízení (podrobný průvodce)