当前,我有一个项目需要检测计算机上已安装的应用程序是否大于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)