procedure TForm1.Button1Click(Sender: TObject);
var
  WinIni : TIniFile;
  WinIniFileName : array[0..MAX_PATH] of char;
  s : array[0..64] of char;begin
  GetWindowsDirectory(WinIniFileName, sizeof(WinIniFileName));
  StrCat(WinIniFileName, '\win.ini');
  WinIni := TIniFile.Create(WinIniFileName);
  try 
    WinIni.WriteString('windows',
                       'device',
                       'HP LaserJet Series II,HPPCL,LPT1:');
  finally
    WinIni.Free;
  end;  StrCopy(S, 'windows');
  SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, LongInt(@S));
end;

解决方案 »

  1.   

    uses  printers, IniFiles;窗体上有个TComBox,命名为cb1
    窗体名为Form1procedure TForm1.FormCreate(Sender: TObject);
    begin
      cb1.items.assign(printer.printers);
    end;procedure TForm1.Button1Click(Sender: TObject);
    var LPrinter:string;
        PrinIniFile:Tinifile;
        LStr:string;
    begin
      LStr:=printer.Printers[cb1.itemindex];
      delete(Lstr,pos(' on ',Lstr),Length(LStr));
      PrinIniFile:=TIniFile.Create('WIN.ini');
      try
        LPrinter:=PrinIniFile.ReadString('Devices',LStr,'');
        PrinIniFile.writestring('windows','device',LStr+','+LPrinter);
      finally
        PrinIniFile.free;
      end;
    end;
      

  2.   

    如果你想要改变Windows的缺省打印机,你必须在Windows的WIN.INI中改变设备键。发送一条 WM_WININICHANGE 消息:var
    strIni: array[0..MAX_PATH] of Char;
    arrWindows: array[0..64] of Char;
    begin
    GetWindowsDirectory(strIni, SizeOf(strIni));
    StrCat(strIni, '\win.ini');
    with TIniFile.Create(strIni) do
    try
    WriteString('windows', 'device', 'HP LaserJet 4 Plus,HPPCL5MS,LPT1:');
    finally
    Free;
    end;StrCopy(arrWindows, 'windows');
    SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, LongInt(@arrWindows));
    end;
      

  3.   

    怎么都是操作win.ini文件啊,这个方法在98下可以,在NT和2000下不行啊,
    NT和2000的win.ini文件中没有关于默认打印机的设置,是在注册表中设置的。
      

  4.   

    在窗体中加入combobox和两个button
    你自己TRY!
    我测试通过!procedure TForm1.Button1Click(Sender: TObject);
    begin
      ComboBox1.Items := Printer.Printers; {populates ComboBox}
      ComboBox1.ItemIndex := Printer.PrinterIndex; {sets display to current printer}
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      Device: array[0..255] of Char;
      Driver: array[0..255] of char;
      Port: array[0..255] of char;
      s : array[0..255] of Char;
      hDeviceMode: THandle;begin  Printer.PrinterIndex := ComboBox1.ItemIndex;
      Printer.GetPrinter (Device, Driver, Port, hDeviceMode);
      StrCopy (s, Device);
      StrCat (s, ',');
      StrCat (s, Driver);
      StrCat (s, ',');
      StrCat (s, Port);
      WriteProfileString ('windows', 'device', s);
      StrCopy (s, 'windows');
      SendMessage (HWND_BROADCAST, WM_WININICHANGE, 0, LongInt(@s));end;
      

  5.   

    Tprinter.printers.count可以得到打印机数
    Tprinter.printers可以得到打印机列表
    Tprinter.printerINDEX可以设当前打印机
    Tprinter.printerINDEX:=-1可以恢复默认打印机
      

  6.   

    我上面的方法是在2K NT下更改注册表的
    你自己试下哟,我下午遇到同样的这个问题,现在解决了!