Windows 11 Drucker auslesen

Deutschsprachiges X#-Forum – German language forum

Moderator: wriedmann

Tudorf
Posts: 50
Joined: Wed Feb 08, 2023 3:43 pm

Windows 11 Drucker auslesen

Post by Tudorf »

Hallo

Ich habe bis jetzt meine installierten Drucker über eine INI-Klasse ausgelesen. Das funktioniert unter Windows 11 nicht mehr. Statt 6 Drucker erhalte ich ca. 25, die nicht alle funktionieren.

Wie und wo kann ich die Drucker auslesen?

Code: Select all

CLASS WinIniFile INHERIT IniFileSpec

CONSTRUCTOR () 
	LOCAL cBuffer   AS STRING
	LOCAL ptrBuffer AS PTR
	
	ptrBuffer := MemAlloc (2048)
	GetWindowsDirectory (ptrBuffer, 2048)
	cBuffer := Trim (Psz2String (ptrBuffer))
	MemFree (ptrBuffer)

	SUPER:init (cBuffer + "\win.ini")

END CLASS
Danke Martin
jfsoft
Posts: 1
Joined: Thu May 15, 2025 2:29 pm
Location: Deutschland

Re: Windows 11 Drucker auslesen

Post by jfsoft »

Hallo Martin, versuch dies mal:

METHOD DruckerEin() CLASS Auslesen
LOCAL aStapel:={} AS ARRAY
LOCAL aPrint:={} AS ARRAY
LOCAL i AS INT

//Umweg über ReportPro
LOCAL oReport AS RpReport

oReport:=RpReport {self,WorkDir()+"IRGENDEINERPT.RPT"}
aPrint:=oReport:PrinterDevice:GetPrinters()

AAdd(AStapel,"DRUCKERDIALOG"+Repl(" ",37))
AAdd(aStapel,"DEFAULT"+Repl(" ",43))
FOR i=1 TO ALen(aPrint)
AAdd(aStapel,SubStr(aPrint[i,1]+Repl(" ",60),1,50))
NEXT

RETURN aStapel

Funktioniert bei mir seit Jahren und auch unter Win11.
Gruß
Jochen
Luc
Posts: 29
Joined: Sat Apr 30, 2016 7:31 pm
Location: Belgium

Re: Windows 11 Drucker auslesen

Post by Luc »

Hi Martin,

I marked my getprinters code (reading from wini.ini) with
// this will actually read in the registry: HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices

so you might check and read it from there directly.

I did not check on win11 yet,

Luc
Bernhard Mayer
Posts: 64
Joined: Thu Oct 06, 2016 3:00 pm
Location: Austria

Re: Windows 11 Drucker auslesen

Post by Bernhard Mayer »

Hi Martin,

what about using the.NET classes? I suppose they know how to read their own settings. :-)

Code: Select all

// using System.Drawing.Printing
LOCAL aPrinters AS PrinterSettings.StringCollection
aPrinters := PrinterSettings.InstalledPrinters


I think the other code was taken from the famous Ivo Wessel book - but we had to abandom this method years ago when using new versions of Windows OS.

BR,
Bernhard
Tudorf
Posts: 50
Joined: Wed Feb 08, 2023 3:43 pm

Re: Windows 11 Drucker auslesen

Post by Tudorf »

Hallo Bernhard

Stimmt, ich benutze seit VO1.0 Routinen von IVO

Ich habe deinen Aufruf probiert und erhalte folgenden Fehler:
error XS0246: The type or namespace name 'PrinterSettings' could not be found (are you missing a using directive or an assembly reference?)

Ich muss bestimmt noch irgendwas einbinden. Was, ich bin überfragt <s>

Danke für deine Hilfe.
Martin
FFF
Posts: 1743
Joined: Fri Sep 25, 2015 4:52 pm
Location: Germany

Re: Windows 11 Drucker auslesen

Post by FFF »

Martin,

Code: Select all

 USING System.Drawing.Printing
FUNCTION Start( ) AS VOID
	System.Console.WriteLine("Hello x#!")
	LOCAL aPrinters AS PrinterSettings.StringCollection
	aPrinters := PrinterSettings.InstalledPrinters
FOREACH  x AS STRING IN  aPrinters
? x
NEXT
RETURN
/*UND in den References System.Drawing.Printing hinzufügen, dann gehts. */
EDIT: UND in den References System.Drawing hinzufügen, dann gehts.

Man fällt immer mal wieder rein: "Using" ist NUR eine Schreibabkürzung, damit Du nicht im Code immer
"System.Drawing.Printing.PrinterSettings.StringCollection"
schreiben mußt, es bedeutet NICHT, dass automatisch die zugehörige DLL im Programm zur Verfügung steht...
Last edited by FFF on Fri May 16, 2025 7:51 am, edited 1 time in total.
Regards
Karl
(on Win8.1/64, Xide32 2.20, X#2.20.0.3)
Tudorf
Posts: 50
Joined: Wed Feb 08, 2023 3:43 pm

Re: Windows 11 Drucker auslesen

Post by Tudorf »

Hallo

Danke. Klappt aber nicht. Wo finde ich die System.Drawing.Printing ?

Image

Wie kann ich ein Bild hochladen. Ich hatte den link https://ibb.co/spSXSjc3 zwischen img und /img eingefügt. Sehe aber kein Bild.

Martin
FFF
Posts: 1743
Joined: Fri Sep 25, 2015 4:52 pm
Location: Germany

Re: Windows 11 Drucker auslesen

Post by FFF »

Sorry, Schreibfehler:
Du musst "System.Drawing" in der Referenzliste auswählen. Die Klasse "Printing" ist in der Dll "System.Drawing" drin...

Für Anhänge unten im Editor bei Attachments -> Add Files - Place inline
Regards
Karl
(on Win8.1/64, Xide32 2.20, X#2.20.0.3)
Tudorf
Posts: 50
Joined: Wed Feb 08, 2023 3:43 pm

Re: Windows 11 Drucker auslesen

Post by Tudorf »

Hallo

Danke. Es läuft und mir werden die Drucker angezeigt.

Schönes Wochenende
Martin
Tudorf
Posts: 50
Joined: Wed Feb 08, 2023 3:43 pm

Re: Windows 11 Drucker auslesen

Post by Tudorf »

Hallo

Sorry. Bekomme ich auch den aktuellen Standarddrucker raus ?

// Aktueller Standarddrucker
cPrinter := _oWinIni:GetString ("Windows", "Device"," ")

Danke

Martin
Post Reply