1 Son düzenleyen, sasmazali (31.12.2010 16:45:21)

Konu: Yazıcı İşini Yakalamak

Merhaba. Şubelerimizdeki makineler açılışta bir program ile çalışmasını sağladık. Fakat kullanıcı yanlışlıkla yazıcısına uzak masaüstünde bir iş gönderdiğinde sunucudan çıktığı için iptal edemiyor.

Yazıcının işlerini ekranda görmek ve iptal edilmesini sağlamak istiyoruz. aslında windowsun yazıcı işlerini gösterdiği ve iptal izni verdiği yeri görmesi bile yeterli bunun için forumda bir bilgi bulamadım yardımcı olursanız sevinirim

Yazıcı listesini buluyorum yaptığı işide bulabilsem windows yazıcı iptal kutusuna gerek kalmaz . Kullanıcıların burdan bilgisayarda gezinti yapma olasılığı var bunun olmasını istemiyoruz

2

Re: Yazıcı İşini Yakalamak

http://www.berezniker.com/content/pages … rint-queue

bu sayfada listelere ulaşabilecek bir örnek buldum. Fakat iptaline ymnelik bir komut bulamadım

3

Re: Yazıcı İşini Yakalamak

ÇÖZÜMÜ ÜRERTTİM EN SONUNDA İNTERNETTE BAYA BİLGİ VAR ORDA SORUNU ÇÖZDÜM İLERDE BELKİ İHTİYAÇ DUYAN OLURSA DİYE PAYLAŞIMA KOYUYORUM

yazici_lisitesi.prg

Visual Fox Pro
IF USED("yazici")

    USE IN "yazici"
ENDIF
 
CREATE CURSOR yazici(yazici_ad c(128))
CLEAR
llfoundpdf = .F.
DIMENSION laprinters[200,2]
lnprintercount = APRINTERS(laprinters)
IF lnprintercount > 0
    FOR sayac = 1 TO lnprintercount
        SELECT yazici
        APPEND BLANK
        replace yazici_ad WITH UPPER(laprinters[sayac,1])
    NEXT sayac
ENDIF


yazici_isleri.prg

Visual Fox Pro
IF USED("yazici_isleri")

    USE IN "yazici_isleri"
ENDIF
 
CREATE CURSOR yazici_isleri(gonderen c(50), sayfa c(15), isler c(254), yazici_adi c(128))
* WMI
LOCAL lcComputer, loWMIService, loErr
 
loLocator = CREATEOBJECT('WBEMScripting.SWBEMLocator')
loWMI = loLocator.ConnectServer()   && local machine logged on user
loWMI.Security_.ImpersonationLevel = 3   && Impersonate
 
lcPrinterName = STRTRAN(lcPrinterName , "\", "\\")
loPrintJobs =  loWMI.ExecQuery("
Select * from Win32_PrintJob " + ;
                "
  WHERE Name like '" + lcPrinterName + "%'")
 
llOK = .T.
TRY
    FOR EACH loPrintJob in loPrintJobs
        SELECT yazici_isleri
        APPEND BLANK
        replace yazici_isleri.isler            WITH ALLTRIM(loPrintjob.Document)
        replace yazici_isleri.gonderen         WITH ALLTRIM(loPrintjob.Owner)
        replace yazici_isleri.sayfa            WITH ALLTRIM(STR(loPrintjob.TotalPages))+"
/ "+ALLTRIM(STR(loPrintjob.PagesPrinted))
        replace yazici_isleri.yazici_adi    WITH ALLTRIM(SUBSTR(ALLTRIM(loPrintjob.Caption),1,RAT("
,",ALLTRIM(loPrintjob.Caption))-1))
    ENDFOR
CATCH TO loErr
*    ? loErr.Errorno, loErr.Message
*    llOK = .F.
ENDTRY
GO TOP

yazici_butun_isler_iptal.prg

Visual Fox Pro
IF NOT EMPTY(lcPrintername)

    IF ClearPrintQueue(lcPrintername)
*        ? "The print queue has been successfully cleared"
    ELSE
*        ? "Error"
    ENDIF
ENDIF
RETURN
*--------------------------------------------------------------------
 
FUNCTION ClearPrintQueue(tcPrinterName)
LOCAL lcPrinterName, loWMI, loPrinters, loPrinter, loErr, loLocator
loLocator     = CREATEOBJECT('WBEMScripting.SWBEMLocator')
loWMI        = loLocator.ConnectServer()
loWMI.Security_.ImpersonationLevel = 3          && Impersonate
lcPrinterName = STRTRAN(tcPrinterName , "\", "\\")               
loPrinters =  loWMI.ExecQuery("
Select * from Win32_Printer " + ;
                "
  WHERE Name = '" + lcPrinterName + "'")
 
llOK = .T.
TRY
    FOR EACH loPrinter in loPrinters
        loPrinter.CancelAllJobs()
    ENDFOR
CATCH TO loErr
*    ? loErr.Errorno, loErr.Message   
    llOK = .F.
ENDTRY
 
RETURN llOK


1) yazici_lisitesi.prg sistemde yüklü yazıcılar bulunup list veya comboda seçim haline getiriliyor
2) yazici_isleri.prg ile seçilmiş yazıcı interactivechange ile çalıştırılması sağlanarak bir listbox da listeleniyor.
    Burda dikkat edilmesi gereken like ile çağrıldığından aynı ismi içeren başka yazıcılarda varsa onların işide geliyor name='' kullandım fakat sistemden tam sonuç dönmediği için like kullanımına devam ettim. Fakat gelen listede benim seçtiğim yazıcı ismini birebir içeren bilgileri lstede listeliyorum.
3) yazici_butun_isler_iptal.prg iptal ile setiğim yazıcıdan emin isem tüm listenin iptalini sağlıyorum.
4) sadece bir işin iptalini arıyorum bulursam onuda not düşerim inşallah

herkese kolay gelsin