如题,谢谢!!!

解决方案 »

  1.   

    使用ResetPrinter函数。
    第一个参数指定打印机,第二个参数看:The PRINTER_DEFAULTS structure specifies the default data type, environment, initialization data, and access rights for a printer. typedef struct _PRINTER_DEFAULTS {  // pd  
        LPTSTR      pDatatype; 
        LPDEVMODE   pDevMode; 
        ACCESS_MASK DesiredAccess; 
    } PRINTER_DEFAULTS;
     MemberspDatatypePoints to a null-terminated string that specifies the default data type for a printer. pDevModePoints to a DEVMODE structure that identifies the default environment and initialization data for a printer. DesiredAccessSpecifies desired access rights for a printer. The OpenPrinter function uses this member to set access rights to the printer. These rights can affect the operation of the SetPrinter and DeletePrinter functions. This member can be set to PRINTER_ACCESS_ADMINISTER, PRINTER_ACCESS_USE, or any generic security value (for example, WRITE_DACL). If an application wishes to open a printer to perform administrative tasks, such as the SetPrinter function, it must open the printer with PRINTER_ACCESS_ADMINISTER access.
      

  2.   

    所有打印相关的API函数 !
        
    AddPrinterConnection 为当前用户建立与打印机的联系
    StartPagePrinter 开始打印机
    StartDoc 开始打印作业
    StartDocPrinter 开始打印作业
    AddPrintProvidor 加入一个打印机支持器
    AddForm 加入一个打印机窗体
    AddPort 加入一个打印机端口
    AddMonitor 加入一个打印机管理器
    ShellExecute 打开或打印指定文件
    ClosePrinter 关闭打开的打印机
    WritePrinter 向打印机输出数据
    AddPrinter 在打印机服务器上建立一个打印机
    SetAbortProc 设备打印作业的放弃函数
    SetPrinter 设置打印机信息
    SetPrinterData 设置打印机配置
    SetJob 设置打印作业信息
    ResetPrinter 设置打印数据类型和设备模式值
    DeletePrinterConnection 删除与打印机的连接
    DeletePrintProcessor 删除打印机处理器
    DeletePrinterDriver 删除打印机驱动程序
    DeletePrinter 删除打印机服务器上的打印机
    DeleteMonitor 删除打印机监视器
    DeletePrintProvidor 删除打印机提供者
    DeleteForm 删除打印机窗体层差
    AbortPrinter 删除打印机缓冲文件
    DeletePort 删除打印机端口
    AddJob 启动一个打印作业
    AdvancedDocumentProperties 进行打印机高级设置
    PrintDlg 建立打印文本对话框
    EnumPrintProcessors 枚举已安装的打印机处理器
    EnumPrinterDrivers 枚举已安装的打印机驱动程序
    EnumPorts 枚举可用打印机端口
    EnumPrintProcessorDatatypes 枚举打印机所支持的数据类型
    EnumForms 枚举所支持的打印机窗体
    AbortDoc 终止一项打印作业
    PrinterProperties 修改打印机属性
    AddPrintProcessor 将打印处理器复制到打印机服务器中
    AddPrinterDriver 将打印机驱动程序复制到打印机服务器中
    PrinterMessageBox 显示打印作业出错信息
    ConnectToPrinterDlg 显示浏览对话并连接网络打印机
    EndPagePrinter 结束打印页
    EndDoc 结束打印作业
    EndDocPrinter 结束打印作业
    StartPage 准备打印机接收数据
    WaitForPrinterChange 监测打印机或打印机服务器变化
    GetPrintProcessorDirectory 获取打印机驱动处理器路径
    GetPrinterDriver 获取打印机驱动程序信息
    GetPrinterDriverDirectory 获取打印机驱动程序路径
    GetPrinter 获取打印机信息
    GetPrinterData 获取打印机配置信息
    GetForm 获取打印机窗口信息
    EnumJobs 获取打印作业信息
    GetJob 获取打印作业信息
    OpenPrinter 获取指定打印机的句柄
    ReadPrinter 读打印机数据
    DocumentProperties 配置打印机设置
    ConfigurePort 配置打印机端口
      

  3.   

    Eastunfail朋友:
     使用ResetPrinter应该uses什么呢?Winspool中的ResetPrinter只带两个参数,我使用SetPrinter但失败了,代码如下:
    uses Winspool;
    var
    ADevice, ADriver, APort: PChar;
    ADeviceMode: THandle;
    PrinterHandle:Cardinal;
    begin
      GetMem(ADevice,255);
      GetMem(ADriver,255);
      GetMem(APort,255);
      printer.GetPrinter(ADevice,ADriver,APort,ADeviceMode);
      if OpenPrinter(ADevice,PrinterHandle,nil) then
      begin
        //ResetPrinter(PrinterHandle,nil);
        Winspool.SetPrinter(PrinterHandle,0,nil,PRINTER_CONTROL_PURGE);
      end;
    我想做的是清空PC机中可能残留的打印作业,有没有API函数直接去清空打印作业而不需要考虑打印机呢?
      

  4.   

    可以把作业清除.就行了吧.
    Setjob
    SetAbortProc 设备打印作业的放弃函数
    GetJob
      

  5.   

    This is a VB version to 
    Using code combined from previous posts on these newsgroups, I am trying to
    delete all print jobs in a given print queue. This is under Windows 2000
    using VB.Net. The printer is a Text Printer that is paused. I get a return
    code (rtn) of 1 from all API function calls below but the print queue is not
    emptied. What am I doing wrong?Code:Public Declare Auto Function OpenPrinter Lib "winspool.drv" _
    (ByVal pPrinterName As String, _
    ByRef phPrinter As IntPtr, _
    ByVal pDefault As PrinterDefaults) As Int32Public Declare Auto Function SetPrinter Lib "winspool.drv" _
    (ByVal hPrinter As IntPtr, _
    ByVal Level As Long, _
    ByVal pPrinter As Byte, _
    ByVal Command As Long) _
    As Int32Public Declare Function ClosePrinter Lib "winspool.drv" _
    (ByVal hPrinter As IntPtr) As Int32<StructLayout(LayoutKind.Sequential)> _
    Public Class PrinterDefaults
    Public pDataType As Int32
    Public pDevMode As Int32
    Public permissions As Int32
    End ClassPublic Const PRINTER_ACCESS_ADMINISTER As Int32 = &H4
    Public Const STANDARD_RIGHTS_REQUIRED As Int32 = &HF0000
    Public Const PRINTER_ACCESS_USE As Int32 = &H8
    Public Const PRINTER_ALL_ACCESS As Int32 = _
    STANDARD_RIGHTS_REQUIRED Or _
    PRINTER_ACCESS_USE Or _
    PRINTER_ACCESS_ADMINISTER
    Public Const PRINTER_CONTROL_PURGE As Long = 3Dim hPrinter As IntPtr
    Dim PrinterDefs As New PrinterDefaults()
    Dim rtn As Int32
    PrinterDefs.permissions = PRINTER_ALL_ACCESS
    rtn = OpenPrinter("MyPrinter", hPrinter, PrinterDefs)
    rtn = SetPrinter(hPrinter, 0, vbNull, PRINTER_CONTROL_PURGE)
    rtn = ClosePrinter(hPrinter)Thank you,
    Everett Barnes
      

  6.   

    Delphi Version by Chen. 2003.8var ADeviceMode: THandle;
        PrinterHandle:Cardinal;
        PrinterDefs:PPrinterDefaults;
    begin
       Getmem(PrinterDefs,sizeof(_PRINTER_DEFAULTSA));
       PrinterDefs.DesiredAccess:= PRINTER_ALL_ACCESS;//设置权限访问.
    if OpenPrinter('FinePrint pdfFactory Pro',PrinterHandle,PrinterDefs) then
      begin
        SetPrinter(PrinterHandle,0,nil,PRINTER_CONTROL_PURGE);
      end;
      

  7.   

    itren朋友:
        我修改了你给我的回复如下:
    var
    ADevice, ADriver, APort: PChar;
    ADeviceMode: THandle;
    PrinterHandle:Cardinal;
    PrinterDefs:PPrinterDefaults;
    begin
      GetMem(ADevice,255);
      GetMem(ADriver,255);
      GetMem(APort,255);
      printer.GetPrinter(ADevice,ADriver,APort,ADeviceMode);
      Getmem(PrinterDefs,sizeof(_PRINTER_DEFAULTSA));
       PrinterDefs.DesiredAccess:= PRINTER_ALL_ACCESS;//设置权限访问.
      if OpenPrinter(ADevice,PrinterHandle,PrinterDefs) then
      begin
        Winspool.SetPrinter(PrinterHandle,0,nil,PRINTER_CONTROL_PURGE);
        ClosePrinter(PrinterHandle);
      end;
    end;
    但我跑到OpenPrinter(ADevice,PrinterHandle,PrinterDefs)
    时出错,与我没有连打印机有关吗?还是有别的原因呢?另外这样删除作业速度
    快吗?