Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Önemli
Modern yazdırma platformu, Windows'un yazıcılarla iletişim kurmak için tercih ettiği araçlardır. Yazıcı cihazı geliştirme için Windows 10 ve 11'deki yazdırma deneyimini özelleştirmek için Yazdırma Desteği Uygulamaları (PSA) ile birlikte Microsoft'un IPP gelen kutusu sınıf sürücüsünü kullanmanızı öneririz.
Daha fazla bilgi için bkz. Yazdırma Desteği Uygulaması v1 ve v2 tasarım kılavuzu.
Yazıcı uzantısı uygulamaları, kullanıcılar Windows masaüstünde mevcut uygulamaları çalıştırdığında yazdırma tercihlerini ve yazıcı bildirimlerini destekler.
Yazıcı uzantıları COM özellikli herhangi bir dilde oluşturulabilir, ancak Microsoft .NET Framework 4 kullanılarak derlenecek şekilde iyileştirilmiştir. Yazıcı uzantıları, XCopy özellikliyse ve işletim sistemine dahil olanlar dışında dış çalışma zamanlarında bağımlılıkları yoksa (örneğin, .NET) bir yazdırma sürücüsü paketiyle dağıtılabilir. Yazıcı uzantısı uygulaması bu ölçütleri karşılamıyorsa, setup.exe veya MSI paketinde dağıtılabilir ve v4 bildiriminde belirtilen PrinterExtensionUrl yönergesi kullanılarak yazıcının Cihaz Aşaması deneyiminde tanıtılabilir. Bir yazıcı uzantısı uygulaması bir MSI paketi aracılığıyla dağıtıldığında, yazdırma sürücüsünü pakete ekleme veya dışarıda bırakma ve sürücüyü ayrı olarak dağıtma seçeneğiniz vardır. PrinterExtensionUrl, yazıcı tercihleri deneyiminde gösterilir.
BT yöneticileri, yazıcı uzantılarının dağıtımını yönetmek için birkaç seçeneğe sahiptir. Uygulama bir setup.exe veya MSI içinde paketlenmişse, BT yöneticileri Microsoft Endpoint Configuration Manager gibi standart yazılım dağıtım araçlarını kullanabilir veya uygulamaları standart işletim sistemi görüntülerine ekleyebilir. BT yöneticileri, yazdırma kuyruğu adı<\PrinterDriverData\PrinterExtensionUrl HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\>düzenlerse v4 bildiriminde belirtilen PrinterExtensionUrl öğesini de geçersiz kılabilir.
Bir kuruluş yazıcı uzantılarını tamamen engellemeyi seçerse, bu işlem "Bilgisayar Yapılandırması\Yönetim Şablonları\Yazıcılar\V4 yazıcı sürücülerinin yazıcı uzantısı uygulamalarını göstermesine izin verme" adlı bir grup ilkesi aracılığıyla yapılabilir.
Yazıcı uzantısı oluşturma
Yazıcı uzantısı geliştirirken, bilmeniz gereken altı ana odak alanı vardır. Bu odak alanları aşağıdaki listede gösterilmiştir.
Kayıt
Olayları Etkinleştirme
OnDriverEvent İşleyicisi
Yazdırma Tercihleri
Yazıcı Bildirimleri
Yazıcıları Yönetme
Kayıt
Yazıcı uzantıları, bir kayıt defteri anahtarları kümesi belirtilerek veya v4 bildirim dosyasının PrinterExtensions bölümünde uygulama bilgileri belirtilerek yazdırma sistemine kaydedilir.
Yazıcı uzantıları için farklı giriş noktalarının her birini destekleyen belirli GUID'ler vardır. Bu GUID'leri v4 bildirim dosyasında kullanmanız gerekmez, ancak v4 sürücü yüklemesinde kayıt defteri biçimini kullanmak için GUID değerlerini bilmeniz gerekir. Aşağıdaki tabloda, iki giriş noktası için GUID değerleri gösterilmektedir.
| Girdi Noktası | GUID |
|---|---|
| Yazdırma Tercihleri | {EC8F261F-267C-469F-B5D6-3933023C29CC} |
| Yazıcı Bildirimleri | {23BB1328-63DE-4293-915B-A6A23D929ACB} |
Yazıcı sürücüsünün dışında yüklü olan yazıcı uzantılarının kayıt defteri kullanılarak kaydedilmesi gerekir. Bu, biriktiricinin durumundan veya istemci makinesindeki v4 yapılandırma modülünden bağımsız olarak yazıcı uzantılarının yüklenebilmesini sağlar.
PrintNotify hizmeti başlatıldıktan sonra [OfflineRoot] yolu altında kayıt defteri anahtarlarını denetler ve bekleyen kayıtları veya kayıt silmeleri işler. Bekleyen kayıtlar veya kayıt silme işlemleri tamamlandıktan sonra kayıt defteri anahtarları gerçek zamanlı olarak silinir. Kayıt defteri anahtarlarını yerleştirmek için bir betik veya yinelemeli işlem kullanıyorsanız, \[PrinterDriverId] anahtarını her belirttiğinizde \[PrinterExtensionID] anahtarını yeniden oluşturmanız gerekebilir. Tamamlanmamış veya yanlış biçimlendirilmiş anahtarlar silinmez.
Bu kayıt yalnızca ilk yüklemede gereklidir. Aşağıdaki örnekte, yazıcı uzantılarını kaydetmek için kullanılan doğru kayıt defteri anahtarı biçimi gösterilmektedir.
Uyarı
[OfflineRoot] HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\OfflinePrinterExtensionsiçin kısaltma olarak kullanılır.
[OfflineRoot]
\[PrinterExtensionId] {GUID}
AppPath=[PrinterExtensionAppPath] {String}
\[PrinterDriverId] {GUID}
\[PrinterExtensionReasonGuid]
(default) = ["0"|"1"] {REG_SZ 0:Unregister, 1:Register}
\…
\[PrinterExtensionReasonGuidN]
\[PrinterDriverId2]
\[PrinterExtensionReasonGuid2.1]
\…
\[PrinterExtensionReasonGuid2.Z]
…
\[PrinterDriverIdM]
\[PrinterExtensionId2]
…
\[PrinterExtensionIdT]
Örneğin, aşağıdaki anahtar kümesi {PrinterExtensionIDGuid} PrinterExtensionID’ye sahip yazıcı uzantısını ve {PrinterDriverID1Guid} ve {PrinterDriverID2Guid} PrinterDriverID’leri için "C:\Program Files\Fabrikam\pe.exe" yürütülebilir dosyasının tam yolunu, yazıcı tercihleri ile yazıcı bildirim nedenleri dahilinde kaydeder.
[OfflineRoot]
\{PrinterExtensionIDGuid}
AppPath="C:\Program Files\Fabrikam\pe.exe"
\{PrinterDriverID1Guid}
\{EC8F261F-267C-469F-B5D6-3933023C29CC}
(default) = "1"
\{23BB1328-63DE-4293-915B-A6A23D929ACB}
(default) = "1"
\{PrinterDriverID1Guid}
\{EC8F261F-267C-469F-B5D6-3933023C29CC}
(default) = "1"
\{23BB1328-63DE-4293-915B-A6A23D929ACB}
(default) = "1"
Aynı yazıcı uzantısını kaldırmak için aşağıdaki anahtar kümesi belirtilmelidir.
[OfflineRoot]
\{PrinterExtensionIDGuid}
AppPath="C:\Program Files\Fabrikam\pe.exe"
\{PrinterDriverID1Guid}
\{EC8F261F-267C-469F-B5D6-3933023C29CC}
(default) = "0"
\{23BB1328-63DE-4293-915B-A6A23D929ACB}
(default) = "0"
\{PrinterDriverID1Guid}
\{EC8F261F-267C-469F-B5D6-3933023C29CC}
(default) = "0"
\{23BB1328-63DE-4293-915B-A6A23D929ACB}
(default) = "0"
Yazıcı uzantıları hem kullanıcı tarafından başlatılan bir bağlamda hem de olay başlatılmış bir bağlamda çalışabildiğinden, yazıcı uzantınızın çalıştığı bağlamı belirlemek yararlı olur. Bu, örneğin bir uygulamanın bildirim veya yazdırma tercihleri için başlatıldıysa tüm kuyruklarda durumu listelemesine izin verebilir. Microsoft, sürücüden ayrı olarak yüklenen yazıcı uzantılarının (örneğin, MSI veya setup.exe) Başlat menüsü kısayollarında veya kayıt sırasında kayıt defterinde doldurulan AppPath girişinde komut satırı anahtarlarını kullanmasını önerir. Sürücüyle birlikte yüklenen yazıcı uzantıları DriverStore'na yüklendiğinden, bunlar yazdırma tercihleri veya yazıcı bildirimleri olayları dışında başlatılmaz. Bu nedenle, bu durumda komut satırı anahtarlarının belirtilmesi desteklenmez.
Yazıcı uzantısı geçerli PrinterDriverID için kaydolduğunda, AppPath'te PrinterDriverID'yi içermelidir. Örneğin, adıprinterextension.exeve PrinterDriverID değeri {GUID} olan bir yazıcı uzantısı uygulaması için [PrinterExtensionAppPath] aşağıdaki örneğe benzer olacaktır:
"C:\program files\fabrikam\printerextension.exe {GUID}"
Olayları etkinleştirme
Çalışma zamanında, yazıcı uzantılarının geçerli PrinterDriverID için olay tetiklendiricisini etkinleştirmesi gerekir. Bu, uygulamaya args[] dizisi aracılığıyla geçirilen PrinterDriverID'dir ve yazdırma sisteminin yazdırma tercihleri veya yazıcı bildirimleri gibi nedenleri işlemek için uygun bir olay bağlamı sağlamasına olanak tanır.
Bu nedenle uygulamanın geçerli PrinterDriverID için yeni bir PrinterExtensionManager oluşturması, OnDriverEvent olayını işlemek için bir temsilci kaydetmesi ve PrinterDriverID ile EnableEvents yöntemini çağırması gerekir. Aşağıdaki kod parçacığında bu yaklaşım gösterilmektedir.
PrinterExtensionManager mgr = new PrinterExtensionManager();
mgr.OnDriverEvent += OnDriverEvent;
mgr.EnableEvents(new Guid(PrinterDriverID1));
Bir uygulama 5 saniye içinde EnableEvents'i çağırmazsa Windows zaman aşımına uğrar ve standart bir kullanıcı arabirimi başlatır. Bunu azaltmak için, yazıcı uzantıları aşağıdakiler de dahil olmak üzere en son performans en iyi yöntemlerini izlemelidir:
EnableEvents'i çağırana kadar uygulama başlatma işleminin mümkün olduğunca çoğunu geciktirin. Bundan sonra, asenkron yöntemler kullanarak ve başlatma sırasında UI iş parçacığını engellemeden, kullanıcı arayüzünün yanıt verme hızını önceliklendirin.
Yükleme sırasında yerel görüntü oluşturmak için ngen kullanın. Daha fazla bilgi için bkz. Yerel Görüntü Oluşturucu.
Yükleme sırasında performans sorunlarını bulmak için performans ölçüm araçlarını kullanın. Daha fazla bilgi için bkz. Windows Performans Analizi Araçları.
DriverEvent işleyicisi
OnDriverEvent işleyicisi kaydedildikten ve olaylar etkinleştirildikten sonra yazıcı uzantısı yazdırma tercihlerini veya yazıcı bildirimlerini işlemek için başlatıldıysa, işleyici çağrılır. Önceki kod parçacığında, Olay işleyicisi olarak OnDriverEvent adlı bir yöntem kaydedildi. Aşağıdaki kod parçacığında PrinterExtensionEventArgs parametresi, yazdırma tercihleri ve yazıcı bildirimleri senaryolarının oluşturulmasına izin veren nesnedir. PrinterExtensionEventArgs , IPrinterExtensionEventArgs için bir sarmalayıcıdır.
static void OnDriverEvent(object sender, PrinterExtensionEventArgs eventArgs)
{
//
// Display the print preferences window.
//
if (eventArgs.ReasonId.Equals(PrinterExtensionReason.PrintPreferences))
{
PrintPreferenceWindow printPreferenceWindow = new PrintPreferenceWindow();
printPreferenceWindow.Initialize(eventArgs);
//
// Set the caller application's window as parent/owner of the newly created printing preferences window.
//
WindowInteropHelper wih = new WindowInteropHelper(printPreferenceWindow);
wih.Owner = eventArgs.WindowParent;
//
// Display a modal/non-modal window based on the 'WindowModal' parameter.
//
if (eventArgs.WindowModal)
{
printPreferenceWindow.ShowDialog();
}
else
{
printPreferenceWindow.Show();
}
}
//
// Handle driver events.
//
else if (eventArgs.ReasonId.Equals(PrinterExtensionReason.DriverEvent))
{
// Handle driver events here.
}
}
Windows, kilitlenme veya yavaş yazıcı uzantılarıyla ilişkili kötü bir kullanıcı deneyimini önlemek için, EnableEvents uygulama başlatıldıktan sonra kısa bir süre içinde çağrılmazsa bir zaman aşımı uygular. Hata ayıklamayı etkinleştirmek için, PrintNotify hizmetine eklenmiş bir hata ayıklayıcısı varsa bu zaman aşımı devre dışı bırakılır.
Ancak çoğu durumda, ilgilendiğimiz uygulamayla ilgili tüm kod, OnDriverEvent geri çağırması sırasında veya sonrasında çalışır. Geliştirme sırasında, OnDriverEvent geri aramasından yazdırma tercihleri veya yazıcı bildirimleri deneyimi başlatmadan önce MessageBox'ı göstermek de yararlı olabilir. MessageBox görüntülendiğinde Visual Studio'ya dönün ve Hata Ayıkla>Sürece Ekle'yi seçin ve işleminizin adını seçin. Son olarak, MessageBox'ınıza dönün ve devam etmek için Tamam'ı seçin. Bu, istisnaları görmenizi ve bu noktadan itibaren herhangi bir kesme noktasına ulaşmanızı sağlar.
Gelecekte yeni ReasonId'ler desteklenebilir. Sonuç olarak, yazıcı uzantılarının ReasonID'yi açıkça denetlemesi ve bilinen son ReasonID'yi algılamak için "else" deyimi kullanmaması gerekir. ReasonID alınırsa ve bilinmiyorsa, uygulama düzgün bir şekilde çıkmalıdır.
Yazdırma tercihleri
Yazdırma tercihleri PrintSchemaEventArgs.Ticket nesnesi tarafından yönlendirilir. Bu nesne, bir cihazın özelliklerini ve seçeneklerini açıklayan Hem PrintTicket hem de PrintCapabilities belgelerini kapsüller. XML'in kendisi de kullanılabilir olsa da, nesne modeli bu biçimlerle çalışmayı kolaylaştırır.
Her IPrintSchemaTicket veya IPrintSchemaCapabilities nesnesinin içinde özellikler (IPrintSchemaFeature) ve seçenekler (IPrintSchemaOption) vardır. Özellikler ve seçenekler için kullanılan arabirimler kaynağından bağımsız olarak aynı olsa da, davranış temel alınan XML'nin bir sonucu olarak biraz değişir. Örneğin, PrintCapabilities belgeleri özellik başına birçok seçenek belirtirken, PrintTicket belgeleri yalnızca seçili (veya varsayılan) seçeneği belirtir. Benzer şekilde, PrintCapabilities belgeleri yerelleştirilmiş görüntü dizelerini belirtirken, PrintTicket belgeleri belirtmez.
WPF'de veri bağlama hakkında daha fazla bilgi için bkz. Veri Bağlamaya Genel Bakış.
Microsoft, performansı en üst düzeye çıkarmak için GetPrintCapabilities çağrısının yalnızca PrintCapabilities belgesinin güncelleştirilmesi gerektiğinde yapılmasını önerir.
Kullanıcı veri bağlı ComboBox denetimlerini kullanarak seçimler yaptığında PrintTicket nesnesi otomatik olarak güncelleştirilir. Kullanıcı son olarak Tamam'a tıkladığında, zaman uyumsuz doğrulama ve tamamlama zinciri başlar. Bu eşzamanlı olmayan desen, kullanıcı arabirimi iş parçacıklarında uzun süre çalışan görevlerin oluşmasını önlemek ve yazdırma tercihleri kullanıcı arabiriminde veya yazdırma işlemi yapılan uygulamada kilitlenmelere neden olmamak için yaygın olarak kullanılır. Aşağıda, kullanıcı Tamam'a tıkladıktan sonra PrintTicket değişikliklerini işlemek için kullanılan adımların listesi yer alır.
PrintSchemaTicket, IPrintSchemaTicket::ValidateAsync yöntemi kullanılarak zaman uyumsuz olarak doğrulanır.
Zaman uyumsuz doğrulama tamamlandığında, Ortak Dil Çalışma Zamanı (CLR) PrintTicketValidateCompleted yöntemini çağırır.
Doğrulama başarılı olursa CommitPrintTicketAsync yöntemini çağırır ve CommitPrintTicketAsync IPrintSchemaTicket::CommitAsync yöntemini çağırır. PrintTicket'i güncelleştirme işlemi başarıyla tamamlandığında, yazdırma tercihlerinin tamamlandığını belirtmek için PrinterExtensionEventArgs.Request.Complete yöntemini çağıran bir kolaylık yöntemi çağıran PrintTicketCommitCompleted yöntemi çağrılır ve ardından uygulama kapatılır.
Aksi takdirde, kullanıcıya kısıtlama durumunu işlemek için kullanıcı arabirimi sunar.
Kullanıcı yazdırma tercihleri penceresini doğrudan iptal et'e tıkladıysa veya kapattıysa, yazıcı uzantısı uygun bir HRESULT değeri ve hata günlüğü iletisiyle IPrinterExtensionEventArgs.Request.Cancel'ı çağırır.
Yazıcı uzantısının işlemi kapatılmışsa ve önceki paragraflarda açıklandığı gibi Complete veya Cancel yöntemleri çağrılmazsa, yazdırma sistemi otomatik olarak Microsoft tarafından sağlanan kullanıcı arabirimini kullanmaya geri döner.
Cihaz durumu bilgilerini almak için yazıcı uzantıları, yazdırma cihazını sorgulamak için Bidi'yi kullanabilir. Örneğin, mürekkep durumunu veya cihazla ilgili diğer durum türlerini göstermek için, yazıcı uzantıları cihaza Bidi sorguları vermek için IPrinterExtensionEventArgs.PrinterQueue.SendBidiQuery yöntemini kullanabilir. En son Bidi durumunu almak, OnBidiResponseReceived olayı için olay işleyicisi ayarlamayı ve geçerli bir Bidi sorgusuyla SendBidiQuery yöntemini çağırmayı içeren iki adımlı bir işlemdir. Aşağıdaki kod parçacığı bu iki adımlı işlemi gösterir.
PrinterQueue.OnBidiResponseReceived += new
EventHandler<PrinterQueueEventArgs>(OnBidiResponseReceived);
PrinterQueue.SendBidiQuery("\\Printer.consumables");
Bidi yanıtı alındığında aşağıdaki olay işleyicisi çağrılır. Bu etkinlik işleyicisi, bir cihaz kullanılamadığında geliştirme süreci için faydalı olabilecek simüle edilmiş bir mürekkep durumu uygulamasına da sahiptir. PrinterQueueEventArgs nesnesi hem HRESULT hem de Bidi XML yanıtı içerir. Bidi XML yanıtları hakkında daha fazla bilgi için bkz. Bidi İstek ve Yanıt Şemaları.
private void OnBidiResponseReceived(object sender, PrinterQueueEventArgs e)
{
if (e.StatusHResult != (int)HRESULT.S_OK)
{
MockInkStatus();
return;
}
//
// Display the ink levels from the data.
//
BidiHelperSource = new BidiHelper(e.Response);
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("BidiHelperSource"));
}
InkStatusTitle = "Ink status (Live data)";
}
Yazıcı bildirimleri
Yazıcı bildirimleri, yazdırma tercihleriyle tam olarak aynı şekilde çağrılır. OnDriverEvent işleyicisinde, IPrinterExtensionEventArgs bir ReasonID'nin DriverEvents GUID ile eşleşip eşleşmediğini gösteriyorsa, bu olayı işlemek için bir deneyim oluşturabiliriz.
Aşağıdaki değişkenler, işlevsel bir yazıcı bildirimleri deneyimini işlemede en çok yararlıdır.
PrinterExtensionEventArgs.BidiNotification – Bu, olayın tetiklenmesine neden olan Bidi XML'sini taşır.
PrinterExtensionEventArgs.DetailedReasonId – Bu, sürücü olay xml dosyasındaki eventID GUID'sini içerir.
Bildirimler için IPrinterExtensionEventArgs nesnesinin en önemli özniteliği BidiNotification özelliğidir. Bu, olayın tetiklenişine neden olan Bidi XML'sini taşır. Bidi XML yanıtları hakkında daha fazla bilgi için bkz. Bidi İstek ve Yanıt Şemaları.
Yazıcıları yönetme
Yazıcı uzantısının, yazıcıları yönetmek/bakımını yapmak için merkez olarak kullanılabilecek bir uygulama olarak rolünü desteklemek için, geçerli yazıcı uzantısının kayıtlı olduğu yazdırma kuyruklarını listelemek ve her kuyruğun durumunu almak mümkündür. Bu, PrinterExtensionSample projesinde gösterilmez, ancak aşağıdaki kod parçacığı bir olay işleyicisini kaydetmek için App.xaml.cs Main yöntemine eklenebilir.
mgr.OnPrinterQueuesEnumerated += new EventHandler<PrinterQueuesEnumeratedEventArgs>(mgr_OnPrinterQueuesEnumerated);
Kuyruklar numaralandırıldıktan sonra olay işleyicisi çağrılır ve durum işlemleri gerçekleşebilir. Bu olay, kullanıcı açıldıktan sonra daha fazla kuyruk yüklemiş olsa bile numaralandırılmış yazdırma kuyrukları listesinin güncel olduğundan emin olmak için uygulamanın ömrü boyunca düzenli aralıklarla tetiklenir. Sonuç olarak, olay işleyicisinin her yürütülürken yeni bir pencere oluşturmaması önemlidir ve bu aşağıdaki kod parçacığında gösterilir.
static void mgr_OnPrinterQueuesEnumerated(object sender, PrinterQueuesEnumeratedEventArgs e)
{
foreach (IPrinterExtensionContext pContext in e)
{
// show status
}
}
Microsoft, bir yazıcı uzantısı kullanarak bakım görevlerini gerçekleştirmek için eski WritePrinter API'sinin aşağıdaki sahte kodda özetlenen şekilde kullanılmasını önerir.
OpenPrinter
StartDocPrinter
StartPagePrinter
WritePrinter
EndPagePrinter
EndDocPrinter
ClosePrinter
Yazıcı uzantısı performansı için en iyi yöntemler
En iyi kullanıcı deneyimini sağlamak için yazıcı uzantıları mümkün olan en hızlı şekilde yüklenecek şekilde tasarlanmalıdır. Yazıcı Uzantısı Örneği projesi bir .NET uygulamasıdır ve bu da çalışma zamanında yerel işlemci mimarisi için uygun biçimde derlenmiş olması gereken bir ara dilde (IL) yerleşik hale getirildiği anlamına gelir. Yükleme sırasında Microsoft, uygulamanın yerel sistem mimarisi için derlendiğinden emin olmak için yazıcı uzantılarının en iyi yöntemlere göre yüklenmesini önerir. Kod derleme ve yükleme en iyi yöntemleri hakkında daha fazla bilgi için bkz. Masaüstü Uygulamalarınız için Başlatma Performansını Geliştirme.
Microsoft ayrıca yazıcı uzantılarının kaynakları yükleme gibi başlatma görevlerini EnableEvents yöntemi çağrılana kadar ertelemesini önerir. Bu, uygulamanın yazıcı uzantıları için 5 saniyelik zaman aşımından önce EnableEvents'i çağırma olasılığını en aza indirir.
OnDriverEvent çağrısından sonra, yazıcı uzantıları kullanıcı arabirimini başlatmalı ve mümkün olduğunca hızlı çizim yapmalı ve yanıt verme hızını sağlamak için mümkün olduğunda zaman uyumsuz yöntemleri kullanmalıdır. Yazdırma tercihleri veya yazıcı bildirimleri için ilk pencere durumunu oluşturmak için yazıcı uzantılarının ağ çağrılarına veya Bidi'ye bağımlılığı olmamalıdır.
Kullanıcı PrintTicket'i etkileyen ekran kullanıcı arabirimini kullanarak seçimler yaptığından, yazıcı uzantısı değişiklikleri mümkün olan en erken şekilde doğrulamak için IPrintSchemaTicket::ValidateAsync yöntemini kullanmalıdır. Son olarak yazıcı uzantısı, PrintTicket değişikliklerini işlemek için IPrintSchemaTicket::CommitAsync yöntemini kullanmalıdır.
Yazıcı uzantıları, onları çağıran işlemden bağımsız olarak ve her zaman işlem dışında yürütülür. Bu nedenle, yazıcı uzantısı geliştirirken pencere davranışını göz önünde bulundurmanız gerekir:
- IPrinterExtensionEventArgs'dekiWindowParent özelliği, uygulamayı çağıran pencerenin tutamacını belirtir.
- IPrinterExtensionEventArgs'ınWindowModal özelliği, bir yazıcı uzantısının (yazdırma tercihleri modunda) mod olarak çalıştırılıp çalıştırılmayacağını belirtir.
Yazıcı Uzantısı Örneği, genellikle en üstteki pencere olarak başlatılan bir kullanıcı arabiriminin nasıl oluşturulacağını gösterir. Ancak bazı durumlarda, kullanıcı arabiriminin çağrılmasına neden olan işlemin farklı bir bütünlük düzeyinde çalıştığı veya işlemin farklı bir işlemci mimarisi için derlendiği durumlarda kullanıcı arabirimi ön planda gösterilmez. Bu durumda, yazıcı uzantısı görev çubuğundaki simgeyi yanıp sönmesini sağlayarak ön plana geçmek için kullanıcıdan izin istemek üzere FlashWindowEx çağrısını yapmalıdır.
İlgili makaleler
Masaüstü Uygulamalarınız için Başlatma Performansını Geliştirme