检测安装在桌面上的应用程序

时间:2018-09-11 07:45:39

标签: vb.net

当前,我有一个项目需要检测计算机上已安装的应用程序是否大于1。 示例:我已经安装了Adobe Reader DC和Adobe Reader 11。

通过连续打印,在启动Adobe Reader之前,将注册表设置“ 1”设置为“ bprintSetPageSize”。 (意味着选择“根据PDF页面大小选择纸张”)

关于此,如果PC同时包含Adobe Acrobat 11和Adobe Reader DC, 要设置注册表的子项名称可能与外壳中实际启动的Adobe Reader版本不匹配,并且 用户预先检查即使消失,也有可能消失,因此纸张尺寸不稳定。

我的问题是,是否可以像上面的示例一样检测应用程序?

为了解决主要问题“纸张尺寸不稳定”。如何检测该PDF文件上需要的应用程序及其要使用的子项名称/注册表?

我有此代码仅用于获取Acrobat Reader的版本。 但是如果我有2个Acrobat版本,那么如何在循环中使用它,并使用最兼容的Reader进行连续打印并解决页面中的问题。

    Dim AcroVer As String = ""
    Dim strwTmp() As String = Nothing
    Dim numKey As Integer : numKey = -1
    Dim bEx As Boolean
    Dim i As Integer
    SubKey = "Software\Adobe\Acrobat Reader"

    ret = WMIsubkey(SubKey, strwTmp, numKey)
    bEx = False
    If numKey > -1 Then
        For i = 0 To numKey
            If IsNumeric(strwTmp(i)) Then
                If CShort(strwTmp(i)) >= 11 Then bEx = True
            Else
                If strwTmp(i) = "DC" Then bEx = True

            End If
            If bEx Then
                AcroVer = strwTmp(i)
                g_RdVer = IIf(IsNumeric(AcroVer), AcroVer, 12)
                Exit For
            End If
        Next i
    End If
    If Not bEx Then
        MsgBox("バージョン11以降のアクロバットリーダーでないとダメです。最新バージョンをインストールしてください。")
        Exit Function
    End If

    '■セット Set
    Dim lngValue As Integer

    'キーオープン【AVGeneral】 Key Open
    SubKey = "Software\Adobe\Acrobat Reader\" & AcroVer & "\AVGeneral"

    Dim regkey As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(SubKey, True) '16.10.15

    ret = RegOpenKeyEx(HKEY_CURRENT_USER, SubKey, 0, KEY_SET_VALUE, nHandle)
    '有無のチェック Close the Key
    If ret <> 0 Then
        MsgBox("Software\Adobe\Acrobat Readerの印刷設定を開けませんでした")
        Exit Function
    End If
    Select Case intMode
        Case 1 : lngValue = 1 ' Actual size
        Case 2 : lngValue = 2 ' match
    End Select
    regkey.SetValue("iprintScaling", lngValue)
    Select Case intMode
        Case 1 : lngValue = 0
        Case 2 : lngValue = 1
    End Select
    Call RegCloseKey(nHandle)

0 个答案:

没有答案