Einzelnen Beitrag anzeigen

HERMES

Registriert seit: 29. Nov 2004
142 Beiträge
 
#1

Druckereigenschaften ändern

  Alt 28. Jun 2005, 15:45
Hallo,

ich möchte die eigenschaften eines Druckers ändern. Diese änderungen müssen für das ganze system gelten, nicht nur für einen eigenen Druckjob.

Delphi-Quellcode:
var
   Data2:PPrinterInfo2;
   hPrint, hDeviceMode :THANDLE;
   needed:Cardinal;
   Device : array[0..255] of char;
   Driver : array[0..255] of char;
     Port : array[0..255] of char;
   i:Integer;
   size:cardinal;
   //DevMode: PDeviceMode;
begin
   if( combobox1.Items[combobox1.ItemIndex] <> '' ) then
   begin
      Printer.PrinterIndex := Printer.Printers.IndexOf( combobox1.Items[combobox1.ItemIndex] );
      Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
      //DevMode := GlobalLock( hDeviceMode );


      WinSpool.OpenPrinter(@Device, hPrint, nil);

      size := sizeof( Data2 );
       if( not GetPrinter( hPrint, 2, nil, 0, @needed ) ) then
      begin
         //GetMem( Data2, needed );
         Data2 := AllocMem( needed );
         try
            if( GetPrinter( hPrint, 2, Data2, needed, @needed ) ) then
            begin
               //Data2.pPortName := PChar(Listbox1.Items[ ListBox1.ItemIndex ]);

               if( not Winspool.SetPrinter( hPrint, 2, Data2, 0 ) ) then
               begin
                  MessageDlg( 'Error setting new Port. Error: ' + IntToStr(GetLastError), mtError,[mbok], 0 );
               end;


            end;

         finally
            FreeMem( Data2 );
           //GlobalFree( Data2 );


         end;
      end;

      //GlobalUnlock( hDeviceMode );
      WinSpool.ClosePrinter( hPrint );
   end;
end;
wenn ich diesen code so ausführe, dann bekomme ich bei SetPrinter immer den Windowsfehler 5 "Zugriff verweigert".

Weis jemand warum ich hier immer diesen Fehler bekomme? Beispiele, die ich im Internet gefunden habe machen das auch nicht anders und es scheint zu funktionieren.

danke
sim
  Mit Zitat antworten Zitat