德尔福设置系统默认打印机

  

获取默认打印机名:

function  TForm1.GetDefaultPrinterName:,字符串;   var   ,,iSize:整数;   ,,sIniFile, sSection,, sKeyName:, PChar;   开始   iSize 才能;:=,256;   sIniFile 才能;:=,“win.ini”;   sSection 才能;:=,“窗户”;   sKeyName 才能;:=,“设备”;   SetLength才能(结果,iSize);   GetPrivateProfileString才能(sSection, sKeyName,, nil,, PChar(结果),iSize,, sIniFile);   Result 才能;:=,副本(0,因此,还以为;Pos(', ',,结果),安康;1);   结束;

更改默认打印机:需要使用WinSpool

procedure  ChangeDefaultPrinter(名称:const 字符串);   var   ,,W2KSDP:函数(pszPrinter: PChar):,布尔;,stdcall;   ,,H: THandle;   大小,才能,假:,红衣主教;   PI:才能,PPrinterInfo2;   开始   if 才能;(Win32Platform =, VER_PLATFORM_WIN32_NT),以及(Win32MajorVersion 祝辞=,5),   ,开始   ,,,@W2KSDP :=, GetProcAddress (GetModuleHandle (winspl),“SetDefaultPrinterA”);   ,,,if  @W2KSDP =, nil  then  RaiseLastOSError;   ,,,if  not  W2KSDP (PChar(名字)),then  RaiseLastOSError;   ,结束   其他的才能   ,开始   ,,,if  not  OpenPrinter (PChar(名字),H, nil), then  RaiseLastOSError;   ,,,试一试   ,,,,,GetPrinter (H,, 2,, nil,, 0,, @);   ,,,,,if  GetLastError  & lt;祝辞,ERROR_INSUFFICIENT_BUFFER  then  RaiseLastOSError;   ,,,,,GetMem(π,大小);   ,,,,,试一试   ,,,,,,,if  not  GetPrinter (H,, 2,,π,,,,@Dummy), then  RaiseLastOSError;   ,,,,,,,π^ .Attributes :=,π^ .Attributes 或是PRINTER_ATTRIBUTE_DEFAULT;   ,,,,,,,if  not  SetPrinter (H,, 2,,π,,PRINTER_CONTROL_SET_STATUS), then  RaiseLastOSError;   ,,,,最后   ,,,,,,,内存管理(π);   ,,,,,结束;   最后,,,   ,,,,,ClosePrinter (H);   ,,,,   结束才能;   之前结束,,//ChangeDefaultPrinter ChangeDefaultPrinter函数,在D7下使用SetDefaultPrinterA,在Delphi2010以上版本使用SetDefaultPrinterW procedure  TDM.ChangeDefaultPrinter(名称:const 字符串);   var   设备才能:array [0 . . 255], of 字符;   ,,司机:array [0 . . 255], of 字符;   ,,端口:array [0 . . 255], of 字符;   s 才能:数组[0 . . 255],of 字符;   ,,hDeviceMode: THandle;   ,,我:整数;   开始   for 才能;小姐::=,0,用Printer.Printers.Count 作用;1,   ,,,if  Printer.Printers.Strings[我],=name 然后   ,才能开始   ,,,,,Printer.PrinterIndex :=,我;   ,,,,,休息;   ,,,,   Printer.GetPrinter 才能;(设备,司机,港口,hDeviceMode);   StrCopy 才能;(s),设备);   StrCat 才能;(年代,,‘,’);   StrCat 才能;(s),司机);   StrCat 才能;(年代,,‘,’);   StrCat 才能;(年代,端口);   WriteProfileString 才能;(“窗口”,“设备”,,s);   StrCopy 才能;(年代,“窗口”);   SendMessage 才能;(HWND_BROADCAST, WM_WININICHANGE,, 0,, LongInt (@));   结束;//这个函数也可以更改打印机,效果没有上面的好


德尔福设置系统默认打印机