Die Konstante PRINTER_ATTRIBUTE_DEFAULT wird nur von Win9x/ME entsprechend gesetzt und der Code funktioniert daher nur unter diesen Beitriebssystemen (aber auch nur dann, wenn man in SelectDefaultPrinter() auf Gleichheit (nicht Ungleichheit!) mit #PRINTER_ATTRIBUTE_DEFAULT prüftshadow hat geschrieben: Aber irgendwie klappt das nicht, d. h. es wird kein Drucker mit dem Attribut PRINTER_ATTRIBUTE_DEFAULT gefunden.

http://msdn2.microsoft.com/en-us/library/ms536023.aspxMSDN hat geschrieben: PRINTER_ATTRIBUTE_DEFAULT Windows 95/98/Me: Indicates the printer is the default printer in the system.
Aber warum alles so kompliziert machen? gnozal hat im englischen Forum bereits 2004 ein Beispiel veröffentlicht, das sowohl alle installierten Drucker als auch den Default-Drucker unter allen Windows-Betriebssystemen ermittelt:
http://www.purebasic.fr/english/viewtop ... 83&start=2
Hier ist sein an PB 4 angepaßter Code (LinkedList als global definiert):
Code: Alles auswählen
Global NewList Imprimantes.s()
Procedure.l GetInstalledPrinters() ; in linked list Imprimantes()
ClearList(Imprimantes())
Buffersize.l = 8102
*Buffer = GlobalAlloc_(#GMEM_FIXED | #GMEM_ZEROINIT, Buffersize)
TempPrinter.s = Space(1024)
If GetProfileString_("devices", 0, "", *Buffer, Buffersize)
TempString.s = PeekS(*Buffer)
Length.l = Len(TempString)
While TempString <> ""
GetPrivateProfileString_("devices", TempString, "", TempPrinter, 1024, "Win.Ini")
; Debug "Device : " + TempString
; Debug "Driver : " + StringField(TempPrinter,1,",")
; Debug "Port : " + StringField(TempPrinter,2,",")
AddElement(Imprimantes())
Imprimantes() = TempString
TempString = PeekS(*Buffer + Length + 1)
Length = Length + Len(TempString) + 1
Wend
EndIf
GlobalFree_(*Buffer)
ProcedureReturn CountList(Imprimantes())
EndProcedure
;
Procedure.s GetDefaultPrinter()
STDPrinterName$ = Space(260)
If GetPrivateProfileString_("WINDOWS","DEVICE","", @STDPrinterName$, 260, "Win.Ini")
ImprimanteParDefaut.s = StringField(STDPrinterName$, 1,",")
EndIf
ProcedureReturn ImprimanteParDefaut
EndProcedure
Debug "Anzahl Drucker: " + Str(GetInstalledPrinters())
ForEach Imprimantes()
Debug Imprimantes()
Next
Debug "-----"
Debug "Default-Drucker: " + GetDefaultPrinter()
