Potrzebuję pobrać z systemu adres IP drukarki sieciowej.
Wybierając drukarkę za pomocą PrintDialog1.excute pięknie otrzymuję adres sieciowy drukarki.
Poniżej kod..
procedure TForm1.Button2Click(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);
Memo1.Lines.Clear;
Memo1.Lines.Add('Printer index=' + inttostr(printer.PrinterIndex)); ->
Memo1.Lines.Add('Drukarka= ' + pDevice);
Memo1.Lines.Add('Port := ' + pPort);
FreeMem(pDevice, cchDeviceName);
FreeMem(pDriver, MAX_PATH);
FreeMem(pPort, MAX_PATH);
end;
end;
Problem pojawia się kiedy określam drukarkę przez przypisanie indeksu drukarki, np. printer.PrinterIndex=0
.
Wtedy pPort wsazuje na pusty string.
Poniżej kod ....
procedure TForm1.Button1Click(Sender: TObject);
var
pDevice: PChar;
pDriver: PChar;
pPort: PChar;
hDMode: THandle;
begin
GetMem(pDevice, cchDeviceName);
GetMem(pDriver, MAX_PATH);
GetMem(pPort, MAX_PATH);
printer.PrinterIndex := 0;
printer.GetPrinter(pDevice, pDriver, pPort, hDMode);
Memo1.Lines.Clear;
Memo1.Lines.Add('Printer index=' + inttostr(printer.PrinterIndex));
Memo1.Lines.Add('Drukarka= ' + pDevice);
Memo1.Lines.Add('Port := ' + pPort);
FreeMem(pDevice, cchDeviceName);
FreeMem(pDriver, MAX_PATH);
FreeMem(pPort, MAX_PATH);
end;