Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Important
Az eszköz metaadatai elavultak, és a Windows egy későbbi kiadásában törlődnek. A funkció cseréjével kapcsolatos információkért tekintse meg az illesztőprogram-csomag tárolójának metaadatait.
A Windows 8.1-ben az UWP-eszközalkalmazások nyomtatókarbantartást végezhetnek, például a nyomtatófejek igazítását és a fúvókák tisztítását. Ez a cikk a nyomtatási feladatkezelési és nyomtatókarbantartási minta C#-verzióját használja annak bemutatására, hogy a kétirányú kommunikáció (Bidi) hogyan használható az ilyen eszközök karbantartására. Az UWP-eszközalkalmazásokkal kapcsolatos további információkért lásd: UWP-eszközalkalmazások.
A Nyomtatófeladat-kezelési és nyomtatókarbantartási minta C#-verziója bemutatja a nyomtató karbantartását a DeviceAppForPrinters2 projekt DeviceMaintenance.xaml.cs fájljával. To work with Bidi, the sample uses the printer extension library in the PrinterExtensionLibrary project. A nyomtatóbővítménykönyvtár segítségével kényelmesen elérheti a v4 nyomtatóillesztő nyomtatóbővítmény-interfészeit. További információ: Nyomtatóbővítménytár áttekintése.
Note
A cikkben bemutatott kódminták a nyomtatási feladatkezelési és nyomtatókarbantartási minta C#-verzióján alapulnak. Ez a minta JavaScriptben és C++-ban is elérhető. Mivel a C++ közvetlenül hozzáférhet a COM-hez, a minta C++ verziója nem tartalmaz kódtárprojekteket. Töltse le a mintákat a kód legújabb verzióinak megtekintéséhez.
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. Ezek az interfészek lehetővé teszik a Bidi-kérések aszinkron küldését a portmonitorba, hogy eszköz- és protokollspecifikus parancsokra fordíthatók le, majd elküldhetők a nyomtatóra. További információ: Eszközkarbantartás (v4 nyomtatóillesztő).
Tip
A C# és a JavaScript-alkalmazások nem működnek közvetlenül a COM API-kkal. Ha C# vagy JavaScript UWP-eszközalkalmazást ír, a nyomtatóbővítménytár használatával érheti el ezeket az interfészeket (ahogyan az ebben a cikkben látható).
Prerequisites
A kezdés előtt:
Győződjön meg arról, hogy a nyomtató v4-nyomtatóillesztővel van telepítve. További információ: V4-nyomtatóillesztők fejlesztése.
Állítsa be a fejlesztői pc-t. See Getting started for info about downloading the tools and creating a developer account.
Társítsa az alkalmazást az áruházhoz. Lásd a UWP-eszközalkalmazás létrehozása című részt további információkért.
Hozzon létre eszköz metaadatokat a nyomtatóhoz, amely társítja azt az alkalmazáshoz. További információ: Eszköz metaadatainak létrehozása.
Hozza létre az alkalmazás főoldalának felhasználói felületét. Az összes UWP-eszközalkalmazás elindítható a Start menüből, ahol teljes képernyős megjelenítésre kerülnek. A Start felülettel úgy emelheti ki a terméket vagy szolgáltatásokat, hogy az megfeleljen az eszközök adott arculatának és funkcióinak. A felhasználói felület által használható vezérlők típusára nincsenek különleges korlátozások. A teljes képernyős élmény tervezésének megkezdéséhez tekintse meg a Microsoft Store tervezési alapelveit.
If you're writing your app with C# or JavaScript, add the PrinterExtensionLibrary project to your UWP device app solution. Ezt a projektet a Nyomtatási feladatok kezelése és a nyomtatókarbantartási minta tartalmazza.
Note
Mivel a C++ közvetlenül hozzáfér a COM-hoz, a C++ alkalmazásoknak nincs szükségük külön kódtárra a COM-alapú nyomtatóeszköz környezetének használatához.
1. lépés: Bidi-kérelem előkészítése
Az eszközkarbantartási felületek megkövetelik, hogy a Bidi-kérelmek XML-adatok legyenek sztring formájában. A Bidi-kérelmeket bárhol létrehozhatja, ahol van értelme az alkalmazásban. A Bidi-kéréseket például sztringállandókként mentheti, vagy dinamikusan létrehozhatja őket a felhasználói bemenet alapján. A nyomtatási feladatok kezelése és a nyomtatókarbantartási minta egy alapértelmezett kérést hoz létre a metódusban OnNavigatedTo . 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>";
2. lépés: Nyomtató keresése
Mielőtt az alkalmazás parancsokat küldhet a nyomtatónak, először meg kell keresnie a nyomtatót. Ehhez a nyomtatási feladatok kezelése és a nyomtatókarbantartási minta tartalmaz egy osztályt PrinterEnumeration (a PrinterEnumeration.cs fájlban). Ez az osztály megkeresi az alkalmazáshoz eszköz metaadatain keresztül társított összes nyomtatót, és visszaadja az objektumok listáját PrinterInfo , amely tartalmazza az egyes nyomtatók nevét és eszközazonosítóit.
This example is from the EnumeratePrinters_Click method of the DeviceMaintenance.xaml.cs file. Bemutatja, hogyan használja a minta a PrinterEnumeration osztályt az asszociált nyomtatók listájának lekéréséhez.
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.
3. lépés: Bidi-kérelem küldése
A Bidi-kérés elküldéséhez az eszközkarbantartási felületekhez Bidi-sztringre és visszahívásra van szükség. A metódusban a SendBidiRequest_Click minta először egy PrinterInfo objektumot használ egy nyomtatóbővítmény környezeti objektumának contextlétrehozásához. Ezután létrejön egy PrinterBidiSetRequestCallback objektum, és hozzáad egy eseménykezelőt a visszahívás eseményének OnBidiResponseReceived kezeléséhez. Végül a nyomtatóbővítmény környezetének metódusával SendBidiSetRequestAsync küldi el a Bidi-sztringet és a visszahívást.
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);
}
}
4. lépés: Bidi-válasz fogadása
Amikor a Bidi "set" művelet befejeződött, a rendszer meghívja a visszahívási objektumot( típus PrinterBidiSetRequestCallback). Ez a visszahívás gondoskodik a HRESULT-válaszból származó hibakezelésről, majd elindítja az OnBidiResponseReceived eseményt, és elküldi a Bidi-választ az eseményparamétereken keresztül.
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;
}
Ezután a Rendszer elküldi a Bidi-választ a OnBidiResponseReceived metódusnak, ahol a Dispatcher rendszer az eredményeket a felhasználói felületen jeleníti meg.
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
Az UWP-eszközalkalmazás tesztelése előtt az eszköz metaadataival kell csatlakoztatni a nyomtatóhoz.
Az eszközalkalmazás adatainak hozzáadásához szüksége van a nyomtató eszköz metaadat-csomagjának másolatára. Ha nem rendelkezik az eszköz metaadataival, az eszköz metaadatainak létrehozása varázslóval hozhatja létre az eszköz metaadatainak létrehozása az UWP-eszközalkalmazáshoz című cikkben leírtak szerint.
Note
Az Eszköz metaadatok létrehozása varázsló használatához telepítenie kell a Microsoft Visual Studio Professionalt, a Microsoft Visual Studio Ultimateet vagy a Windows 8.1 önálló SDK-t, mielőtt végrehajtja a jelen cikkben leírt lépéseket. A WindowsHoz készült Microsoft Visual Studio Express telepítése az SDK olyan verzióját telepíti, amely nem tartalmazza a varázslót.
Az alábbi lépések létrehoznak egy alkalmazást, és telepítik az eszköz metaadatait.
Tesztelés aláírásának engedélyezése.
Indítsa el a Device Metadata Authoring Wizard a következő helyről: %ProgramFiles(x86)%\Windows Kits\8.1\bin\x86, a DeviceMetadataWizard.exe dupla kattintásával.
From the Tools menu, select Enable Test Signing.
A számítógép újraindítása
Hozza létre a megoldást a megoldásfájl (.sln) megnyitásával. Nyomja le az F7 billentyűt, vagy a > minta betöltése után lépjen a buildelési megoldásra a felső menüből.
Bontsa le és távolítsa el a nyomtatót. Erre a lépésre azért van szükség, hogy a Windows a következő észleléskor felolvassa a frissített eszköz metaadatait.
Eszköz metaadatainak szerkesztése és mentése. Az eszközalkalmazás eszközhöz való csatolásához társítania kell az eszközalkalmazást az eszközével. Ha az eszköz metaadatai még nincsenek létrehozva, olvassa el az eszköz metaadatainak létrehozása az UWP-eszközalkalmazáshoz című témakört.
Ha az Eszköz metaadat-létrehozó varázslója még nincs megnyitva, indítsa el %ProgramFiles(x86)%\Windows Kits\8.1\bin\x86 fájlból, kattintson duplán aDeviceMetadataWizard.exe.
Válassza az Eszköz metaadatainak szerkesztése lehetőséget. Ezzel a beállítással szerkesztheti a meglévő eszköz metaadat-csomagját.
In the Open dialog box, locate the device metadata package associated with your UWP device app. (It has a devicemetadata-ms file extension.)
A UWP-eszközalkalmazás adatainak megadása lapon adja meg a Microsoft Store alkalmazás adatait a UWP-eszközalkalmazás mezőben. Válassza az UWP-alkalmazás jegyzékfájljának importálása lehetőséget a Csomagnév, a Közzétevő neve és az UWP-alkalmazásazonosító automatikus megadásához.
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.
Az Az eszköz metaadat-csomagjának áttekintése lapon győződjön meg arról, hogy az összes beállítás helyes, és jelölje be a Az eszköz metaadat-csomagjának másolása a helyi számítógép metaadat-tárolójába jelölőnégyzetet. Then select Save.
Csatlakoztassa újra a nyomtatót, hogy a Windows beolvassa a frissített eszköz metaadatait, amikor az eszköz csatlakoztatva van.