![]() |
How to set use printer offline
Hi,
How to set "use printer online" from code. Thanks |
Re: How to set use printer offline
Hi, read
![]() |
Re: How to set use printer offline
Ich fände es besser die Lösung hier zu posten anstelle nur zu verlinken. Denn wenn der externe Artikel irgendwann verschwunden ist oder sich die URL geändert hat bringt dieses Thema keinem mehr zur Lösung.
|
Re: How to set use printer offline
Zitat:
|
Re: How to set use printer offline
Zitat:
Where I wrong?
Delphi-Quellcode:
var
SelectedPrinter: string; hSelPrn : dword; PrinterInfo : TPrinterInfo2A; bytesNeeded : dword; dwStatusMask : DWORD; begin SelectedPrinter:=Printer.Printers[Printer.PrinterIndex]; if OpenPrinter(PChar(SelectedPrinter), hSelPrn, nil) then begin GetPrinter(hSelPrn, 2, @PrinterInfo, SizeOf(PrinterInfo), @bytesNeeded); dwStatusMask:=dWord(PRINTER_ATTRIBUTE_WORK_OFFLINE); PrinterInfo.Attributes:=PrinterInfo.Attributes and dwStatusMask; SetPrinter(hSelPrn, 2, @PrinterInfo, 0); ClosePrinter(hSelPrn); end; end; |
Re: How to set use printer offline
Zitat:
Delphi-Quellcode:
var
SelectedPrinter: string; hSelPrn : dword; PrinterInfo : TPrinterInfo2A; bytesNeeded : dword; begin SelectedPrinter:=Printer.Printers[Printer.PrinterIndex]; if OpenPrinter(PChar(SelectedPrinter), hSelPrn, nil) then begin GetPrinter(hSelPrn, 2, @PrinterInfo, SizeOf(PrinterInfo), @bytesNeeded); if PrinterInfo.Attributes and PRINTER_ATTRIBUTE_WORK_OFFLINE = PRINTER_ATTRIBUTE_WORK_OFFLINE then PrinterInfo.Attributes:=PrinterInfo.Attributes and PRINTER_ATTRIBUTE_WORK_OFFLINE else Printerinfo.Attributes:=PrinterInfo.Attributes or PRINTER_ATTRIBUTE_WORK_OFFLINE; SetPrinter(hSelPrn, 2, @PrinterInfo, 0); ClosePrinter(hSelPrn); end; |
Re: How to set use printer offline
Delphi-Quellcode:
The result of this is allways PRINTER_ATTRIBUTE_WORK_OFFLINE (or 0 if PRINTER_ATTRIBUTE_WORK_OFFLINE was not set before).
PrinterInfo.Attributes:=PrinterInfo.Attributes and PRINTER_ATTRIBUTE_WORK_OFFLINE
to remove the PRINTER_ATTRIBUTE_WORK_OFFLINE bits the expression has to be:
Delphi-Quellcode:
PrinterInfo.Attributes:=PrinterInfo.Attributes and not(PRINTER_ATTRIBUTE_WORK_OFFLINE)
|
Re: How to set use printer offline
The new code:
Delphi-Quellcode:
but the printer status is not changed (1601)
procedure TForm24.Button1Click(Sender: TObject);
var HPrinter : THandle; InfoSize, BytesNeeded: Cardinal; PI2: PPrinterInfo2; PrinterDefaults: TPrinterDefaults; SelectedPrinter: string; begin SelectedPrinter:=Printer.Printers[Printer.PrinterIndex]; with PrinterDefaults do begin DesiredAccess := PRINTER_ACCESS_USE; pDatatype := nil; pDevMode := nil; end; if OpenPrinter(PChar(SelectedPrinter), HPrinter, @PrinterDefaults) then try if not GetPrinter(HPrinter, 2, nil, 0, @BytesNeeded) then begin PI2 := AllocMem(BytesNeeded); try InfoSize := SizeOf(TPrinterInfo2); if GetPrinter(HPrinter, 2, PI2, BytesNeeded, @BytesNeeded) then begin ShowMessage(IntToStr(PI2^.Attributes)); // Show 1601 PI2^.Attributes:=PI2^.Attributes and not (PRINTER_ATTRIBUTE_WORK_OFFLINE); SetPrinter(Hprinter, 2, PI2, 0); ShowMessage(IntToStr(PI2^.Attributes));//Show 577 end; finally FreeMem(PI2, BytesNeeded); end; end; finally ClosePrinter(HPrinter); end; seems that the call to SetPrinter has no effect. many thanks |
Re: How to set use printer offline
Delphi-Quellcode:
AND
function TestPrinterOffLine:Boolean;
var HPrinter : THandle; InfoSize, BytesNeeded: Cardinal; PI2: PPrinterInfo2; PrinterDefaults: TPrinterDefaults; SelectedPrinter: string; begin SelectedPrinter:=Printer.Printers[Printer.PrinterIndex]; with PrinterDefaults do begin DesiredAccess := PRINTER_ACCESS_USE; pDatatype := nil; pDevMode := nil; end; if OpenPrinter(PChar(SelectedPrinter), HPrinter, @PrinterDefaults) then try if not GetPrinter(HPrinter, 2, nil, 0, @BytesNeeded) then begin PI2 := AllocMem(BytesNeeded); try InfoSize := SizeOf(TPrinterInfo2); if GetPrinter(HPrinter, 2, PI2, BytesNeeded, @BytesNeeded) then Result:=PI2^.Attributes and PRINTER_ATTRIBUTE_WORK_OFFLINE = PRINTER_ATTRIBUTE_WORK_OFFLINE else Result:=False; finally FreeMem(PI2, BytesNeeded); end; end; finally ClosePrinter(HPrinter); end; end;
Delphi-Quellcode:
Usage:
procedure WorkPrinterOnLine(Path:string);
var F :TextFile; ScriptName: string; begin ScriptName:=Path+'temp.vbs'; AssignFile(F,ScriptName); Rewrite(F); WriteLn(F,'PrinterName = "'+ Printer.Printers[Printer.PrinterIndex]+'"'); WriteLn(F,'VerbName = "&Use Printer Online"'); WriteLn(F,'Dim sa'); WriteLn(F,'Set sa = CreateObject("Shell.Application")'); WriteLn(F,'Set printers = sa.NameSpace(4).Items()'); WriteLn(F,'''WScript.Echo TypeName(printers)'); WriteLn(F,'For each printer in printers'); WriteLn(F,'''WScript.Echo printer.Name'); WriteLn(F,'if printer.Name = PrinterName Then'); WriteLn(F,'Dim verbs: Set verbs = printer.Verbs'); WriteLn(F,'For Each verb in verbs'); WriteLn(F,'''WScript.Echo verb.Name'); WriteLn(F,'if verb.Name = VerbName Then'); // WriteLn(F,'WScript.Echo PrinterName & " was offline"'); WriteLn(F,'verb.Doit()'); WriteLn(F,'End If'); WriteLn(F,'Next'); WriteLn(F,'End If'); WriteLn(F,'Next'); CloseFile(F); ShellExecute(0, PChar('Open'),PChar(ScriptName),nil, nil, SW_HIDE); if FileExists(ScriptName) then DeleteFile(ScriptName); end;
Delphi-Quellcode:
if TestPrinterOffLine then
WorkPrinterOnLine(AppPath); |
Re: How to set use printer offline
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz