获取默认打印机名:
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以上版本使用SetDefaultPrinterWprocedure 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 (@)); 结束;//这个函数也可以更改打印机,效果没有上面的好
德尔福设置系统默认打印机