Mega Code Archive

 
Categories / Delphi / Printing
 

Getting the Printer driver and port name from TPrinters

Title: Getting the Printer driver and port name from TPrinter's Question: How can I get the Printer driver and port name from TPrinter's GetPrinter() method? Answer: Sometimes, these parameters will return blank string. You can use the Windows API function GetProfileString() to retrieve the associated driver and port from the Windows.ini file. Example: uses Printers; {$IFNDEF WIN32} const MAX_PATH = 144; {$ENDIF} procedure TForm1.Button1Click(Sender: TObject); var pDevice : pChar; pDriver : pChar; pPort : pChar; hDMode : THandle; begin if PrintDialog1.Execute then begin GetMem(pDevice, cchDeviceName); GetMem(pDriver, MAX_PATH); GetMem(pPort, MAX_PATH); Printer.GetPrinter(pDevice, pDriver, pPort, hDMode); if lStrLen(pDriver) = 0 then begin GetProfileString('Devices', pDevice, '', pDriver, MAX_PATH); pDriver[pos(',', pDriver) - 1] := #0; end; if lStrLen(pPort) = 0 then begin GetProfileString('Devices', pDevice, '', pPort, MAX_PATH); lStrCpy(pPort, @pPort[lStrLen(pPort)+2]); end; Memo1.Lines.Add('Device := ' + StrPas(pDevice)); Memo1.Lines.Add('Driver := ' + StrPas(pDriver)); Memo1.Lines.Add('Port := ' + StrPas(pPort)); FreeMem(pDevice, cchDeviceName); FreeMem(pDriver, MAX_PATH); FreeMem(pPort, MAX_PATH); end; end;