![]() |
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:
|
Re: How to set use printer offline
Was willst du uns damit sagen? Es wäre schön wenn du auch ein paar Worte darüber verlieren würdest warum du dich selbst zitierst und was du damit erreichen willst.
|
Re: How to set use printer offline
Zitat:
so meine Software kommt er wieder auf Linie Früher habe ich von deutschen Google schreiben |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 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-2025 by Thomas Breitkreuz