如何识别用户在Visual Basic 6.0中更改Windows默认打印机的时间?

时间:2009-03-30 01:42:24

标签: vb6 printing

我有一个Visual Basic 6.0应用程序需要识别用户何时通过控制面板更改Windows默认打印机。

现在,当应用程序启动时,“Printer.DeviceName”包含该默认打印机名称... easy。

如果您通过控制面板更改了Windows默认打印机,则Visual Basic应用程序在重新启动之前将无法识别新的默认打印机。

有没有办法以某种方式刷新Visual Basic Printer对象,因此您的应用程序可以识别更改?

3 个答案:

答案 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 

感谢http://www.andreavb.com/tip070005.html

答案 2 :(得分:0)

您可以在表单上添加一个Timer对象,并使用10秒触发器检查打印机是否已更改。