Tipp 5.17 - Standarddrucker ermitteln
Wie kann ich den Standarddrucker betriebssystem-abhängig ermitteln?
Mit dieser Funktion können Sie den Standarddrucker betriebssystem-abhängig ermitteln. Kopieren Sie einfach nachfolgenden Quellcode in die Zwischenablage und fügen Sie anschließend den Inhalt der Zwischenablage in ein neues Modul ein. Die Aufrufparameter finden Sie im Quellcode beschrieben.
Verwendete Win32-Api-Aufrufe und Typen: GetProfileString, RegOpenKey, RegQueryValueEx, RegCloseKey, GetDefaultPrinter, GetVersionEx - OSVERSIONINFO
Beispiel:
Option Explicit Public Type OSVERSIONINFO dwOSVersionInfoSize As Long dwMajorVersion As Long dwMinorVersion As Long dwBuildNumber As Long dwPlatformID As Long szCSDVersion As String * 128 End Type Public Declare Function GetProfileString _ Lib "kernel32" Alias _ "GetProfileStringA" _ (ByVal lpAppName As String, _ ByVal lpKeyName As String, _ ByVal lpDefault As String, _ ByVal lpReturnedString As String, _ ByVal nSize As Long) As Long Public Declare Function RegOpenKey _ Lib "advapi32.dll" Alias _ "RegOpenKeyA" _ (ByVal hKey As Long, _ ByVal lpSubKey As String, _ phkResult As Long) As Long Public Declare Function RegQueryValueEx _ Lib "advapi32.dll" Alias _ "RegQueryValueExA" _ (ByVal hKey As Long, _ ByVal sValue As String, _ ByVal lReserved As Long, _ lType As Long, _ ByVal sData As String, _ lcbData As Long) As Long Public Declare Function RegCloseKey _ Lib "advapi32.dll" _ (ByVal hKey As Long) As Long Public Declare Function GetDefaultPrinter _ Lib "winspool.drv" Alias _ "GetDefaultPrinterA" _ (ByVal pszBuffer As String, _ pcchBuffer As Long) As Long Public Declare Function GetVersionEx _ Lib "kernel32" Alias _ "GetVersionExA" _ (lpVersionInformation As OSVERSIONINFO) As Long Public Function vbGetDefaultPrinter() As String '// ----------------------------------------------------- '// Methode: | Standarddrucker betriebssystemabhängig '// | ermitteln; benötigt Hilfsfunktionen '// | ReadWIniSetting und GetSettingString '// ----------------------------------------------------- '// Parameter: | - '// ----------------------------------------------------- '// Rückgabe: | Standarddrucker '// ----------------------------------------------------- '// Autor: | Stefan Kulpa '// | EDV Innovation & Consulting - Dormagen '// ----------------------------------------------------- '// Alternativ:| ?Printer.DeviceName (nur in VB) '// ----------------------------------------------------- Const HKEY_CURRENT_CONFIG As Long = &H80000005 Dim sSection As String Dim sBuffer As String Dim sResult As String Dim sKey As String Dim lRequired As Long Dim lEntries As Long Dim cbBuffer As Long Dim lHlp As Long If IsWinNT4 Then vbGetDefaultPrinter = ReadWIniSetting("windows", _ "device") ElseIf IsWinNT5 Then sBuffer = String(1024, 0) lHlp = GetDefaultPrinter(sBuffer, Len(sBuffer)) vbGetDefaultPrinter = VBA.Left(sBuffer, _ InStr(sBuffer, vbNullChar) - 1) Else vbGetDefaultPrinter = GetSettingString _ (HKEY_CURRENT_CONFIG, _ "System\CurrentControlSet\Control\Print\Printers", _ "Default") End If End Function Public Function ReadWIniSetting(sSection As String, _ sKey As String) As String Dim sBuffer As String sBuffer = VBA.String(1024, 0) If GetProfileString(sSection, sKey, _ vbNullString, sBuffer, Len(sBuffer)) Then ReadWIniSetting = VBA.Left(sBuffer, _ InStr(sBuffer, vbNullChar) - 1) End If End Function Public Function GetSettingString( _ ByVal lKey As Long, _ sPath As String, _ sValue As String, _ Optional sDefault As String = "") _ As String Const ERROR_SUCCESS As Long = 0& Const REG_DWORD As Long = 4 Const REG_SZ As Long = 1 Dim sBuffer As String Dim lCurKey As Long Dim lValueType As Long Dim lRegResult As Long Dim lDataBufferSize As Long GetSettingString = sDefault lRegResult = RegOpenKey(lKey, sPath, lCurKey) lRegResult = RegQueryValueEx(lCurKey, _ sValue, _ 0&, _ lValueType, _ ByVal 0&, _ lDataBufferSize) If lRegResult = ERROR_SUCCESS Then If lValueType = REG_SZ Then sBuffer = String(lDataBufferSize, 0) lRegResult = RegQueryValueEx(lCurKey, _ sValue, _ 0&, _ 0&, _ ByVal sBuffer, _ lDataBufferSize) If lRegResult = ERROR_SUCCESS Then GetSettingString = _ VBA.Left(sBuffer, VBA.InStr(sBuffer, _ vbNullChar) - 1) End If End If End If lRegResult = RegCloseKey(lCurKey) End Function Public Property Get IsWinNT5() As Boolean Const VER_PLATFORM_WIN32_NT As Long = 2 Dim uOSVer As OSVERSIONINFO uOSVer.dwOSVersionInfoSize = Len(uOSVer) GetVersionEx uOSVer IsWinNT5 = (uOSVer.dwPlatformID = _ VER_PLATFORM_WIN32_NT) And _ (uOSVer.dwMajorVersion = 5) End Property Public Property Get IsWinNT4() As Boolean Const VER_PLATFORM_WIN32_NT As Long = 2 Dim uOSVer As OSVERSIONINFO uOSVer.dwOSVersionInfoSize = Len(uOSVer) GetVersionEx uOSVer IsWinNT4 = (uOSVer.dwPlatformID = _ VER_PLATFORM_WIN32_NT) And _ (uOSVer.dwMajorVersion = 4) End Property