如题,谢谢!!!
解决方案 »
- webbrowser1如何通过查找网页中的特定字符串获取坐标?
- rave5报表不能选择打印!
- 发送消息 和接受消息问题
- 建新delphi QQ群:欢迎大家一起来讨论4480637
- 设计报表时将打印幅面设置为B5,但在程序调用时幅面大小总是以A4出现,周围会空出一些篇幅,怎样解决这个问题?
- 我想在Shape控件中增加一个右键和一个双击功能,应该什么实现啊??
- 怎么让quikrep中的chart在quikrep预览时也可以看到数据?
- OpenDialog中如何设定过滤出一系列后缀名的文件,而不是一个。
- 如何给access数据库进行加密后,还可以通过delphi程序对它进行访问
- 到底怎么办啊,我快急死了,再次求救
- 过滤数据
- run这个function的uses 里怎么声明?
第一个参数指定打印机,第二个参数看: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.
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 配置打印机端口
使用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函数直接去清空打印作业而不需要考虑打印机呢?
Setjob
SetAbortProc 设备打印作业的放弃函数
GetJob
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
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;
我修改了你给我的回复如下:
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)
时出错,与我没有连打印机有关吗?还是有别的原因呢?另外这样删除作业速度
快吗?