AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Drucker entfernen

Ein Thema von TUX_der_Pinguin · begonnen am 17. Aug 2017 · letzter Beitrag vom 21. Aug 2017
Antwort Antwort
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
609 Beiträge
 
Delphi 11 Alexandria
 
#1

Drucker entfernen

  Alt 17. Aug 2017, 12:22
Hallo DPler,

ich versuche mich gerade an einer Möglichkeit Drucker aus einer eigenen Anwendung heraus zu entfernen. Ich habe da auf Delphi-Treff etwas passendes gefunden, jedoch funktioniert das nicht.
Delphi-Quellcode:
function PE_DeletePrinterNow(pPrinterName: PChar):BOOL;
var
hPrinter : Cardinal;
PrinterDef: PRINTER_DEFAULTS;
begin
  Result := FALSE;

   FillChar(PrinterDef, sizeof(PrinterDef), #0);
   PrinterDef.DesiredAccess := PRINTER_ALL_ACCESS;

   if OpenPrinter(pPrinterName, hPrinter, @PrinterDef) then
   begin
    if DeletePrinter(hPrinter) then Result := TRUE;
    ClosePrinter(hPrinter);
   end;
end;
Auflistung aller Drucker im System
Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
var
  Index: Integer;
  
begin
  for Index := 0 to Printer.Printers.Count-1 do
  begin
    ListBox1.Items.Add(Printer.Printers[Index]);
  end;
    
end;
Drucker entfernen
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
begin
  if RemovePrinter(ListBox1.Items[ListBox1.ItemIndex]) then
    ShowMessage('Ok')
  else
    ShowMessage('Failed');
end;
Merkwürdig ist das beim ersten Versuch die Funktion einen Erfolg meldet, der Drucker bleibt aber im System erhalten, danach schlägt der jeder erneute Aufruf fehl. Probiert habe ich das ganze unter Windows 7, später soll die Software aber hauptsächlich unter Windows 10 laufen.
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Drucker entfernen

  Alt 17. Aug 2017, 12:52
Versuche mal, ob der Drucker verschwindet, wenn du die Druckerwarteschlange neustartest.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

AW: Drucker entfernen

  Alt 17. Aug 2017, 13:38
Die Frage wäre ja, was beim zweiten Mal fehl schlägt ... OpenPrinter oder DeletePrinter.
Vermutlich OpenPrinter, weil der Printer ja gelöscht ist.


Aber ein Boolean sagt ja nun überhaupt nichts darüber aus, was nicht ging und vorallem warum es nicht gin.
Delphi-Quellcode:
procedure PE_DeletePrinterNow(PrinterName: string);
var
  hPrinter : Cardinal;
  PrinterDef: PRINTER_DEFAULTS;
begin
  FillChar(PrinterDef, SizeOf(PrinterDef), #0);
  PrinterDef.DesiredAccess := PRINTER_ALL_ACCESS;
  if not OpenPrinter(PChar(PrinterName), hPrinter, @PrinterDef) then
    RaiseLastOSError;
  try
    if not DeletePrinter(hPrinter) then
      RaiseLastOSError;
  finally
    ClosePrinter(hPrinter);
  end;
end;
$2B or not $2B
  Mit Zitat antworten Zitat
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
609 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Drucker entfernen

  Alt 17. Aug 2017, 13:38
Versuche mal, ob der Drucker verschwindet, wenn du die Druckerwarteschlange neustartest.
Ich weiß zwar nicht wie ich das aus dem Programm heraus machen soll aber ich habe auch mal den Rechner komplett neugestartet und alle Drucker waren noch vorhanden. Wird ja wohl kaum eine zeitliche Begrenzung sein, dass der Drucker nur zum löschen markiert wird und wird innerhalb von X Sekunden/Minuten die Druckerwarteschlange neugestartet dann wird der Drucker tatsächlich gelöscht.
  Mit Zitat antworten Zitat
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
609 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Drucker entfernen

  Alt 17. Aug 2017, 13:50
Die Frage wäre ja, was beim zweiten Mal fehl schlägt ... OpenPrinter oder DeletePrinter.
Vermutlich OpenPrinter, weil der Printer ja gelöscht ist.


Aber ein Boolean sagt ja nun überhaupt nichts darüber aus, was nicht ging und vorallem warum es nicht gin.
Delphi-Quellcode:
procedure PE_DeletePrinterNow(PrinterName: string);
var
  hPrinter : Cardinal;
  PrinterDef: PRINTER_DEFAULTS;
begin
  FillChar(PrinterDef, SizeOf(PrinterDef), #0);
  PrinterDef.DesiredAccess := PRINTER_ALL_ACCESS;
  if not OpenPrinter(PChar(PrinterName), hPrinter, @PrinterDef) then
    RaiseLastOSError;
  try
    if not DeletePrinter(hPrinter) then
      RaiseLastOSError;
  finally
    ClosePrinter(hPrinter);
  end;
end;
Es schlägt DeletePrinter() fehl und nicht OpenPrinter() mit der Fehlermeldung ..
Zitat:
Systemfehler. Code: 1801.
Der Druckername ist unzulässig.
Eigentlich müsste ja OpenPrinter fehlschlagen tut es aber nicht und zu allem überfluss ist der Drucker immer noch vorhanden.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: Drucker entfernen

  Alt 17. Aug 2017, 13:58
Was genau willst du eigentlich löschen, bzw. was soll dadurch erreicht werden?

Zitat:
The DeletePrinter function deletes the specified printer object.
Hmmm, DeletePrinter löscht nicht den Printer, also den Treiber,
sondern nur eines der "vielen" Schnittstellenobjekte.

DeletePrinter ist nur die Umkehrfunktion vom AddPrinter.
https://msdn.microsoft.com/de-de/lib...(v=vs.85).aspx
$2B or not $2B
  Mit Zitat antworten Zitat
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
609 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Drucker entfernen

  Alt 17. Aug 2017, 14:03
Was genau willst du eigentlich löschen, bzw. was soll dadurch erreicht werden?

Zitat:
The DeletePrinter function deletes the specified printer object.
Hmmm, DeletePrinter löscht nicht den Printer, also den Treiber,
sondern nur eines der "vielen" Schnittstellenobjekte.

DeletePrinter ist nur die Umkehrfunktion vom AddPrinter.
https://msdn.microsoft.com/de-de/lib...(v=vs.85).aspx
Das nur das Objekt gelöscht wird habe ich übersehen bzw. es stand nicht dabei wo ich das Beispiel gefunden habe. Ich will eigentlich einen Drucker aus dem System entfernen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

AW: Drucker entfernen

  Alt 17. Aug 2017, 14:25
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
vermutlich DeletePrintDriver
$2B or not $2B
  Mit Zitat antworten Zitat
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
609 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Drucker entfernen

  Alt 17. Aug 2017, 15:21
Zitat:
The DeletePrinterDriver function removes the specified printer-driver name from the list of names of supported drivers on a server.
...
DeletePrinterDriver deletes a driver only if no version of the driver is in use for the specified environment. DeletePrinterDriverEx can delete specific versions of the driver.
Vielleicht ist mein Englisch zu schlecht aber das liest sich jetzt auch nicht unbedingt so als würde man damit einen Drucker entfernen können. Werde dann wohl erst mal aufgeben und es dabei belassen.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.800 Beiträge
 
Delphi 12 Athens
 
#10

AW: Drucker entfernen

  Alt 21. Aug 2017, 09:00
Naja, mehr als den Treiber wirst Du in Software niemals los werden können, es sei denn Du steuerst damit eine Strahlenkanone oder so.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz