请问,如何用delphi强制删除打印机中的打印列表(200分)

  • 主题发起人 主题发起人 hctt
  • 开始时间 开始时间
H

hctt

Unregistered / Unconfirmed
GUEST, unregistred user!
如题!
打印机可能是网络打印机,也可能是本地打印机。
请各位高手帮忙解答!
谢谢!
 
难道没有人知道吗?
 
还是没人知道,难道大富翁的高手都冬眠了?现在春天到了!!!
 
uses Printers, Winspool;
// 删除打印机
function RemovePrinter(pName: string): boolean;
var
Handle: THandle;
pd: PRINTER_DEFAULTS;
begin
Result := false;
// 偿试按网络打印机方式删除
if DeletePrinterConnection( PChar(pName) ) then
// 删除成功
Result := true
else
begin
// 按本地打印机删除
pd.DesiredAccess := PRINTER_ALL_ACCESS;
pd.pDatatype := nil;
pd.pDevMode := nil;
// 打开打印机
if OpenPrinter(PChar(pName), Handle, @pd) then
// 删除
if DeletePrinter( Handle ) then
Result := true;
end;
end;

// 测试
procedure TForm1.FormCreate(Sender: TObject);
begin
ListBox1.Items.Assign(Printer.Printers);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
pName: string;
begin

if ListBox1.ItemIndex < 0 then
exit;
pName := ListBox1.Items.Strings[ListBox1.ItemIndex];
if RemovePrinter( pName ) then
showmessage('打印机' + pName + '删除成功')
else
showmessage('打印机' + pName + '删除失败');
Printer.Refresh;
ListBox1.Items.Assign(Printer.Printers);
end;
 
Sorry,这下全好了。
 
不错,我把此帖收了
 
真的不错,谢谢高人指点
 
apw
我要知道的是怎么将打印机中的任务队列删除
而不是把打印机删除
请继续关注
 
删除打印任务:
uses Printers, WinSpool
// 删除打印任务
function RemoveJob(PrinterName: String;
JobId: DWORD): boolean;
var
hPrinter: THandle;
pd: PRINTER_DEFAULTS;
begin
// You need a printer handle, open the printer
pd.DesiredAccess := PRINTER_ALL_ACCESS;
pd.pDatatype := nil;
pd.pDevMode := nil;
// 打开打印机
if OpenPrinter(PChar(PrinterName),hPrinter,@pd) then
Result := SetJob( hPrinter, JobId, 0, nil, JOB_CONTROL_DELETE )
else
Result := false;
end;

//----------------------------------------------------------------------------
//使用示例
FPrinterName: string;
procedure TForm1.FormCreate(Sender: TObject);
begin
lbPrinters.Items.Assign(Printer.Printers);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
lbJobs.Items.Clear;
if lbPrinters.ItemIndex >= 0 then
begin
FPrinterName := lbPrinters.Items.Strings[lbPrinters.ItemIndex];
GetJobs(FPrinterName, lbJobs.Items )
end else
FPrinterName := '';
end;

procedure TForm1.Button2Click(Sender: TObject);
var
JobId: DWORD;
begin
if lbJobs.ItemIndex >= 0 then
begin
JobId := DWORD(lbJobs.Items.Objects[lbJobs.ItemIndex]);
if RemoveJob( FPrinterName, JobId ) then
begin
showMessage('删除打印机:' + FPrinterName +
'上的任务:' + lbJobs.Items.Strings[lbJobs.ItemIndex] + '成功');
GetJobs(FPrinterName, lbJobs.Items )
end else
showMessage('删除打印机:' + FPrinterName +
'上的任务:' + lbJobs.Items.Strings[lbJobs.ItemIndex] + '失败');
end;
end;
//------------------------------------------------------------------------------
// 取打印机当前任务见
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2451480
 
apw
谢谢你的帮助
问题解决了
结贴200分奉上
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
887
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部