Jak odczytać adres IP drukarki sieciowej ?

0

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;
0
grzegorz_so napisał(a):

pięknie otrzymuję adres sieciowy drukarki.

Chyba "otrzymuję pole opisowe, które akurat w tym przypadku zawiera adres sieciowy"

Jak odczytać adres IP drukarki sieciowej ?

W celu ?

(Pomiędzy WMI a rejestrem widnows bym próbował, ale nigdy nie stanąłem wobez takiej potzreby)

Sądzę, że o ile są "jakieś" szanse odczytania danych dla "Portu drukarki" w jakimś co bardziej standarowej wersji, to gdy producenci dodają specyficzne dla siebie implementacje "Portu drukarki" , myślę ze nie ma ogólnego rozwiazania

0

Chyba "otrzymuję pole opisowe, które akurat w tym przypadku zawiera adres sieciowy"

Dostaję "human-readable" stringa który jest tekstową reprezentacją 32 bitowego adresu IP :)
Ps. czepiasz się rzeczy nieistotnych

Sądzę, że o ile są "jakieś" szanse odczytania danych dla "Portu drukarki" w jakimś co bardziej standarowej wersji, to gdy producenci dodają specyficzne dla siebie implementacje "Portu drukarki" , myślę >ze nie ma ogólnego rozwiazania

Mam drukarkę sieciową, komunikacja działa na standardowym porcie 9100. Z poziomu aplikacji wyszukuję drukarkę po nazwie na liście printer.printers i potrzebuję określić jej adres IP.
Moje pytanie jest takie... dlaczego pierwszy kod(przykład) działa a a drugi kod(przykład) nie działa ?

0

https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/win32-tcpipprinterport

(nie używałem, ale jakbym musiał grzebać,to w tym kierunku)

0
AnyKtokolwiek napisał(a):

https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/win32-tcpipprinterport

(nie używałem, ale jakbym musiał grzebać,to w tym kierunku)

Przyjrzę się temu. Póki co chciał bym uzyskać pożądany rezultat przy pomocy klasy Tprinter

0
grzegorz_so napisał(a):

chciał bym uzyskać pożądany rezultat

Czyli jaki i w jakim nadrzędnym celu ?

Ja nie widzę w tym ekonomii, jakaś rzeźba o tylko częsciowej skutecznosci

0
AnyKtokolwiek napisał(a):

Czyli jaki i w jakim nadrzędnym celu ?

Ja nie widzę w tym ekonomii, jakaś rzeźba o tylko częsciowej skutecznosc

Swoje teksty o "ekonomii", "rzeźbie" i "skuteczności" zachowaj dla siebie !!
Potrzebuję odczytać adres IP drukarki sieciowej i nie wiedzę powodu aby się przed tobą spowiadać "dlaczego" :)

0

Czyli jaki i w jakim nadrzędnym celu ?

Zaspokoję Twoją ciekowość :) Chcę sprawdzić czy drukarka jest dostępna w sieci. W tym celu muszę znać jej adres IP.
Wystarczy takie wyjaśnienie ?
Czy też dalej, nie mając wiele do powiedzenia w temacie, będziesz drążył temat "w jakim celu" ?? :)

0

adres ip drukarki znajdziesz na routerze

0
grzegorz_so napisał(a):

Czyli jaki i w jakim nadrzędnym celu ?

Zaspokoję Twoją ciekowość :) Chcę sprawdzić czy drukarka jest dostępna w sieci. W tym celu muszę znać jej adres IP.
Wystarczy takie wyjaśnienie ?
Czy też dalej, nie mając wiele do powiedzenia w temacie, będziesz drążył temat "w jakim celu" ?? :)

Żałuj że nie przestudiowałeś podanego linka
Żegnam.

0

adres ip drukarki znajdziesz na routerze

Dobre ... :) nie zrozumiałeś problemu !!

0

koledzy maja racje pytajac co chcesz zrobic

0
krzychu82a napisał(a):

koledzy maja racje pytajac co chcesz zrobić

@krzychu82a
Potrzebuję odczytać adres IP drukarki sieciowej.
Problem dość jasno opisałem publikując dwa proste kody. Jeden działa, drugi nie działa. Dlaczego tak jest ?
Zero merytorycznych odpowiedzi.

1

a wiesz co to problem x/y?

0
ehhhhh napisał(a):

a wiesz co to problem x/y?

@ehhhhh

wiem !!!

0
ehhhhh napisał(a):

a wiesz co to problem x/y?

@ehhhhh
to nie jest problem X/Y

0

Witam
nie wiem czemu nie działa
ale kiedyś użyłem czegoś takiego :

function Get_Printerport(Printername: String): string;
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  with Reg do
  begin
    RootKey := HKEY_LOCAL_MACHINE;
     if OpenKey('\System\CurrentControlSet\Control\Print\printers\' + Printername + '\', True) then
       if ValueExists('port') then
       Result := Readstring('port');
      CloseKey;
  end;
end;

może sie przyda.

0

a wiesz co to problem x/y?

@ehhhhh

gdzie tu widzisz problem XY ?

0

a tak z innej beczki, jak Twoje zmagania z Androidem ?? bo chyba na innym forum odpowiadałem Ci jak to robię.

1

po to sie ciebie pytają po co to bo wygląda jak problem x/y którego docelowy efekt można osiągnąć innym, prostszym rozwiązaniem.

0

@grzegorz_so: tylko otwarty umysł pozwoli spojrzeć trochę z boku aby obiektywnie ocenić czy to X/Y czy nie.

A co do kodu który podałeś to są subtelne różnice w kodzie pomiedzy ustawieniem drukarki w PrintDialog1.Execute a printer.PrinterIndex

0
ehhhhh napisał(a):

po to sie ciebie pytają po co to bo wygląda jak problem x/y którego docelowy efekt można osiągnąć innym, prostszym rozwiązaniem.

Czy dającym pełne pokrycie, a nie tylko przy szczególnie przyjaznym zbiegu okoliczności.

Byłem ostatnio przy instalacji nowych drukarek sieciowych (nie HP, Minolta itd). Żadna się nie zainstalowała z żadnym stringiem podobnym do 1.2.3.4 a raczej wszystko się nazywa "Our the best printer X/Y/Z-123/A/B/C"

0

@AnyKtokolwiek:

Żadna się nie zainstalowała z żadnym stringiem podobnym do 1.2.3.

Problem o którym piszę, dotyczy drukarek sieciowych firmy TSC, które zawsze instaluję na "Standard TCP/IP port", np, "192.168.0.110"

0
JarekZ napisał(a):

a tak z innej beczki, jak Twoje zmagania z Androidem ?? bo chyba na innym forum odpowiadałem Ci jak to robię.

apka na Androida, zrobiona w Delphi, już działa na produkcji

0
grzegorz_so napisał(a):

apka na Androida, zrobiona w Delphi, już działa na produkcji

Tak więc gratuluję ... precyzyjnego stawiania tematu od pierwszego postu.

0

@JarekZ : a tak z innej beczki, jak Twoje zmagania z Androidem ?? bo chyba na innym forum odpowiadałem Ci jak to robię.
@grzegorz_so apka na Androida, zrobiona w Delphi, już działa na produkcji

@AnyKtokolwiek Tak więc gratuluję ... precyzyjnego stawiania tematu od pierwszego postu.

@AnyKtokolwiek: "Tak więc gratuluję ..." ... dobre :) Wzajemnie gratuluję niezrozumienia treści dość prostego postu. Nie rozumiesz że to była odpowiedź na pytanie Off-topic .. !

0

A co do kodu który podałeś to są subtelne różnice w kodzie pomiedzy ustawieniem drukarki w PrintDialog1.Execute a printer.PrinterIndex

Widzę że są różnice, tylko nie rozumiem jakie ..
Kiedy potrzebuję skierować wydruk do żądanej drukarki , ustawienie printer.PrinterIndex=jakisindex sprawdza się bez zarzutu

1 użytkowników online, w tym zalogowanych: 0, gości: 1