我有一个Visual Basic 6.0应用程序需要识别用户何时通过控制面板更改Windows默认打印机。
现在,当应用程序启动时,“Printer.DeviceName”包含该默认打印机名称... easy。
如果您通过控制面板更改了Windows默认打印机,则Visual Basic应用程序在重新启动之前将无法识别新的默认打印机。
有没有办法以某种方式刷新Visual Basic Printer对象,因此您的应用程序可以识别更改?
答案 0 :(得分:9)
有一种更简单的方法。当您的应用程序启动时,只需将Printer
对象的TrackDefault
属性设置为True
。
Public Sub Main()
Printer.TrackDefault = True
End Sub
当TrackDefault
属性为True
时,Printer
对象将自动跟踪通过“控制面板”对默认打印机所做的更改。
答案 1 :(得分:3)
我找到了解决方案。使用API调用如下;
Private Declare Function GetProfileString Lib "kernel32.dll" 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 Function GetDefaultPrinter() As Printer
Dim strBuffer As String * 254
Dim iRetValue As Long
Dim strDefaultPrinterInfo As String
Dim tblDefaultPrinterInfo() As String
Dim objPrinter As Printer
' Retreive current default printer information
iRetValue = GetProfileString("windows", "device", ",,,", strBuffer, 254)
strDefaultPrinterInfo = Left(strBuffer, InStr(strBuffer, Chr(0)) - 1)
tblDefaultPrinterInfo = Split(strDefaultPrinterInfo, ",")
For Each objPrinter In Printers
If objPrinter.DeviceName = tblDefaultPrinterInfo(0) Then
' Default printer found !
Exit For
End If
Next
' If not found, return nothing
If objPrinter.DeviceName <> tblDefaultPrinterInfo(0) Then
Set objPrinter = Nothing
End If
Set GetDefaultPrinter = objPrinter
End Function
答案 2 :(得分:0)
您可以在表单上添加一个Timer对象,并使用10秒触发器检查打印机是否已更改。