Visual Basic 應用程式版,7.1 版
我想:
- 在名稱包含字串“P3005”的所有可用列印機串列中搜索
- 將 activeprinter 更改為名稱包含“P3005”的列印機
很容易找到可用列印機名稱的串列,并選擇我正在搜索的(我使用了Filter()命令)。但是activeprinter還需要指定Ne:埠號,我找不到
uj5u.com熱心網友回復:
NE:每臺計算機上的數字都會發生變化。您可以從注冊表中讀取。
Software\Microsoft\Windows NT\CurrentVersion\Devices
這是一個讀取所有列印機名稱的函式:
Global Const HKEY_CURRENT_USER = &H80000001
Global Const HKEY_LOCAL_MACHINE = &H80000002
Global Const KEY_READ = &H20019
Global Const REG_OPTION_NON_VOLATILE = &H0
Global Const strPrinterKeyPath = "Software\Microsoft\Windows NT\CurrentVersion\Devices"
Declare PtrSafe Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" ( _
ByVal hKey As LongPtr, ByVal lpSubKey As String, ByVal ulOptions As Long, _
ByVal samDesired As Long, phkResult As LongPtr) As Long
Declare PtrSafe Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" ( _
ByVal hKey As LongPtr, ByVal lpValueName As String, ByVal lpReserved As LongPtr, _
lpType As Long, lpData As Any, lpcbData As Long) As Long
Declare PtrSafe Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As LongPtr) As Long
Public Sub DebugPrintAllPrinters()
Dim oReg As Object, i As Long
Dim strKeyPath As String, strValue As String, Msg As String
Dim arrPrinter As Variant
Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
strKeyPath = "Software\Microsoft\Windows NT\CurrentVersion\Devices"
oReg.EnumValues HKEY_CURRENT_USER, strKeyPath, arrPrinter
For i = 0 To UBound(arrPrinter)
oReg.GetStringValue HKEY_CURRENT_USER, strKeyPath, arrPrinter(i), strValue
Msg = Msg & arrPrinter(i) & Replace(strValue, "winspool,", " auf ") & vbCr
Next
Set oReg = Nothing
Debug.Print Msg
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/449921.html
上一篇:如果列有值,如何隱藏2列?
