温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Delphi 设置系统默认打印机

发布时间:2020-07-03 08:11:10 来源:网络 阅读:5168 作者:kindao 栏目:软件技术

获取默认打印机名:

function TForm1.GetDefaultPrinterName: string; var   iSize: Integer;   sIniFile, sSection, sKeyName: PChar; begin   iSize := 256;   sIniFile := 'win.ini';   sSection := 'windows';   sKeyName := 'device';   SetLength(Result, iSize);   GetPrivateProfileString(sSection, sKeyName, nil, PChar(Result), iSize, sIniFile);   Result := Copy(Result, 0, Pos(',', Result) - 1); end;

更改默认打印机:需要Uses WinSpool

procedure ChangeDefaultPrinter(const Name: string); var   W2KSDP: function(pszPrinter: PChar): Boolean; stdcall;   H: THandle;   Size, Dummy: Cardinal;   PI: PPrinterInfo2; begin   if (Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion >= 5) then   begin     @W2KSDP := GetProcAddress(GetModuleHandle(winspl), 'SetDefaultPrinterA');     if @W2KSDP = nil then RaiseLastOSError;     if not W2KSDP(PChar(Name)) then RaiseLastOSError;   end   else   begin     if not OpenPrinter(PChar(Name), H, nil) then RaiseLastOSError;     try       GetPrinter(H, 2, nil, 0, @Size);       if GetLastError <> ERROR_INSUFFICIENT_BUFFER then RaiseLastOSError;       GetMem(PI, Size);       try         if not GetPrinter(H, 2, PI, Size, @Dummy) then RaiseLastOSError;         PI^.Attributes := PI^.Attributes or PRINTER_ATTRIBUTE_DEFAULT;         if not SetPrinter(H, 2, PI, PRINTER_CONTROL_SET_STATUS) then RaiseLastOSError;       finally         FreeMem(PI);       end;     finally       ClosePrinter(H);     end;   end; end; //ChangeDefaultPrinter
ChangeDefaultPrinter函数 在D7下使用SetDefaultPrinterA,在Delphi2010以上版本使用SetDefaultPrinterW
procedure TDM.ChangeDefaultPrinter(const Name: string); 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;   I: Integer; begin   for I := 0 to Printer.Printers.Count - 1 do     if Printer.Printers.Strings[I] = name then     begin       Printer.PrinterIndex := I;       Break;     end;   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;//这个函数也可以更改打印机,效果没有上面的好


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI