先OpenPrinter然后用GetPrinter获取Printer的信息,level用2,结构自然就是PRINTER_INFO_2,然后将结构中的Attribute设为PRINTER_ATTRIBUTE_DEFAULT就可以SetPrinter了。

解决方案 »

  1.   

    晕~~~~~~~~~~
    有直接的打印函数;
    可以直接调用获得默认的打印机;

    先获得所有打印机,在指定默认的打印机;
    delphi5开发人员指南上边有的;
      

  2.   

    to prometheusphinx(白日梦) 能举个例子吗?我太笨了,还是不会用。
      

  3.   


    用修改WIN.INI文件中Device项的方法
    举个例子:
    procedure TMainForm.cbPrintersChange(Sender:TObject);
    var
        IniFile:TInifile;
        TempStr1,TempStr2:String;
    begin
        with Printer do
        begin
             PrinterIndex:=cbPrinters.ItemIndex;//cbPrinters:TCombobox
             TemStr1:=Printers[PrinterIndex];
             System.Delete(TempStr1,Pos('on',TempStr1),Length(TempStr1));
             IniFile:=TIniFile.Create('WIN.INI');
             try
                TempStr2:=IniFile.ReadString('Devices',TempStr1,'');
                Inifile.WriteString('Windows','Device',TempStr1+''+TempStr2);
             finally
                IniFile.Free;
             end;
         end;
         lblPrinter.Caption:=Printer.Printers[Printer.PrinterIndex];//lblPrinter:TLabel
    end;
      

  4.   

    WIN9X中可以这样
    procedure TForm1.Button1Click(Sender: TObject);
    var
      hPrinter: THandle;
      dwSize: DWORD;
      pi: PRINTER_INFO_2;
    begin
      if OpenPrinter('PrinterName', hPrinter, nil) then
      begin
        GetPrinter(hPrinter, 2, @pi, 0, @dwSize);
        GetPrinter(hPrinter, 2, @pi, dwSize, @dwSize);
        pi.Attributes := PRINTER_ATTRIBUTE_DEFAULT;
        SetPrinter(hPrinter, 2, @pi, 0);
        ClosePrinter(hPrinter);
      end;
    end;
    但是NT应该象 nkzgj(和曦) 那样。
      

  5.   

    nkzgj(和曦) 这个例子我也有,在MyBase中查到的。但是不好使
      

  6.   

    to prometheusphinx(白日梦) 
    我运行这段程序会出错?!
      

  7.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      hPrinter: THandle;
      dwSize: DWORD;
      pi: PPrinterInfo2;
    begin
      if OpenPrinter('Epson ActionLaser 1600', hPrinter, nil) then
      begin
        GetPrinter(hPrinter, 2, nil, 0, @dwSize);
        try
          GetMem(pi, dwSize);
          try
            GetPrinter(hPrinter, 2, pi, dwSize, @dwSize);
            pi^.Attributes := PRINTER_ATTRIBUTE_DEFAULT;
            SetPrinter(hPrinter, 2, pi, 0);
          finally
            FreeMem(pi);
          end;
        finally
          ClosePrinter(hPrinter);
        end;
      end;
    end;