代码之家  ›  专栏  ›  技术社区  ›  Stuart Helwig

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

  •  1
  • Stuart Helwig  · 技术社区  · 17 年前

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

    现在,当应用程序启动时,“Printer.DeviceName”包含默认的打印机名称…很简单。

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

    是否有办法以某种方式刷新Visual Basic打印机对象,以便应用程序能够识别更改?

    3 回复  |  直到 12 年前
        1
  •  9
  •   Mike Spross Alex Martelli    17 年前

    有一个更简单的方法。当应用程序启动时,只需设置 Printer TrackDefault 财产 True .

    Public Sub Main()
    
        Printer.TrackDefault = True
    
    End Sub
    

    当 轨迹默认值 财产是 这个 打印机 对象将自动跟踪通过控制面板对默认打印机所做的更改。

        2
  •  3
  •   Stuart Helwig    17 年前

    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

        3
  •  0
  •   Manuel Ferreria    17 年前

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