Autor Beitrag
Peti
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: Fr 04.04.03 09:47 
Hallo zusammen,

kann mir jemand von Euch sagen, wie ich weitergehende Informationen zu verfügbaren Druckern, insbesondere bei Netzwerkdruckern, herausbekomme:
Status, Typ, Standort usw. ,
also die Angaben, die im PrintDialog auch auftauchen?

Im Typ TPrinter scheinen diese Infos nicht zu Verfügung zu stehen:

Vielen Dank schonmal,
Gruß,
Peti
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Fr 04.04.03 10:00 
Hallo,

über die API-Funktion GetPrinter und der Info-Struktur (Rekord) PRINTER_INFO_2 kannst Du dir die Infos geben lassen!

Das Rekord ist wie folgt aufgebaut:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
typedef struct _PRINTER_INFO_2 { 
  LPTSTR    pServerName; 
  LPTSTR    pPrinterName; 
  LPTSTR    pShareName; 
  LPTSTR    pPortName; 
  LPTSTR    pDriverName; 
  LPTSTR    pComment; 
  LPTSTR    pLocation; 
  LPDEVMODE pDevMode; 
  LPTSTR    pSepFile; 
  LPTSTR    pPrintProcessor; 
  LPTSTR    pDatatype; 
  LPTSTR    pParameters; 
  PSECURITY_DESCRIPTOR pSecurityDescriptor; 
  DWORD     Attributes; 
  DWORD     Priority; 
  DWORD     DefaultPriority; 
  DWORD     StartTime; 
  DWORD     UntilTime; 
  DWORD     Status; 
  DWORD     cJobs; 
  DWORD     AveragePPM; 
} PRINTER_INFO_2, *PPRINTER_INFO_2;


Gruß
Tino
Peti Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: Fr 04.04.03 10:37 
Titel: Aber...
Super, scheint mir genau das zu sein, was ich brauche.

Leider habe ich noch Probleme damit.... Könnte mir jemand noch ein kurzes Code-Beispiel geben? Ich habe bisher noch nicht mit API-Calls gearbeitet...

Danke für die Mühe,
Peti
Peti Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: Di 08.04.03 12:13 
Falls es noch jeman anderen interessieren sollte - ich habe folgendes rausgefunden...

Folgende Routine gibt einige Infos zu den Drucker heraus:

ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
procedure GetPrinterInfos;
VAR pcbNeed:DWord;
    Buffer: Pointer;
    hPrinter:THandle;
    Device : array[0..255] of char;
    Driver : array[0..255] of char;
    Port   : array[0..255] of char;
    hDeviceMode: THandle;
Begin
  With WordPrinterForm do
  Begin
    Printer.PrinterIndex:=Combobox1.ItemIndex;
    Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
    if WinSpool.OpenPrinter(@Device, hPrinter, nil) then
    Begin
      GetPrinter(hPrinter, 2, nil,0,@pcbNeed);  // return false, Don't Care
      GetMem(Buffer, pcbNeed);
      if GetPrinter(hPrinter, 2, Buffer, pcbNeed, @pcbNeed) then
      Begin
        Status:=TPrinterInfo2A(Buffer^).Status;
        if TPrinterInfo2A(Buffer^).pDriverName <> nil then
          DriverName:=TPrinterInfo2A(Buffer^).pDriverName;
        if TPrinterInfo2A(Buffer^).pLocation <> nil then
          Location:=TPrinterInfo2A(Buffer^).pLocation;
        if (TPrinterInfo2A(Buffer^).pPortName <> nil) then
          Portname:=TPrinterInfo2A(Buffer^).pPortName;
        if TPrinterInfo2A(Buffer^).pComment <> nil then
          Comment:=TPrinterInfo2A(Buffer^).pComment
      End;
      FreeMem(Buffer, pcbNeed);
    End;
  End;
End;


Gruß,
Peti