如何判断IE的版本?
如何判断是否安装了某一程序?版本多少?
如何判断是否安装了某一程序?版本多少?
解决方案 »
- 新的一年,发布一个自己用VB写的表格控件的测试版,
- 100分~~~请教关于DBGrid控件的问题
- HH:MM (输入时间用的,只要时和分)控制成这样格式的输入要什么控件啊
- 如何让MSHFlexGrid中的单元格里显示不同的颜色
- vb中如何运行命令行提示符的命令
- 使用VB6的安装打包向导,可以让卸载图标出现,但是桌面图标没有出现?~?~~在重新编译Setup1.Exe时出错~!!!提示gstrDIR_DEST变量未定
- 有哪位大家如何知道类似于电子盖章系统那样能检测到word文档的变化?
- 这两个问题如何解决啊....VB中调用图片的问题
- 我怎么能得到这个vsflexgrid控件呢,加那个部件呢??
- VB怎么截取两个不同字符串中的内容
- 关于窗口的问题?
- ★★★★★代码的诱惑: 这个问题您会吗? 顶,有分相送~~~~~~~★★★★
判断IE的版本,判断是否安装了某一程序,版本多少。然后我才能决定安装哪些组件。
还有
HKEY_LOCAL_MACHINE\Software\Microsoft\IE Setup\Setup\OldIEVersion
主要用
HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Version
还有
HKEY_LOCAL_MACHINE\Software\Microsoft\IE Setup\Setup\OldIEVersion
主要用
HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Version
如果注册表中的内容如下: 名称 类型 数据
(默认) REG_SZ 2.7.143.556我该如何引用名称?
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long ' Note that if you declare the lpData parameter as String, you must pass it By Value.
Private Const HKEY_LOCAL_MACHINE = &H80000002Private Sub Command1_Click()
Dim REG As Long, Value As String, lValue As Long
RegOpenKey HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Internet Explorer", REG
Value = String(255, Chr(0))
lValue = 256
RegQueryValueEx REG, "Version", 0, ByVal 0, ByVal Value, lValue
Value = Left(Value, InStr(Value, Chr(0)))
MsgBox "IE版本号: " & Value
End Sub
(默认) REG_SZ 6.0.5153.29我该如何引用名称?
'
' Form Code
'
'------------------------------------------------------------------------------Option Explicit'Identifies the platform for which the DLL was built.
Private Const DLLVER_PLATFORM_WINDOWS As Long = &H1 'Windows 95
Private Const DLLVER_PLATFORM_NT As Long = &H2 'Windows NTPrivate Type DllVersionInfo
cbSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformID As Long
End TypePrivate Type VS_FIXEDFILEINFO
dwSignature As Long
dwStrucVersion As Long
dwFileVersionMS As Long
dwFileVersionLS As Long
dwProductVersionMS As Long
dwProductVersionLS As Long
dwFileFlagsMask As Long
dwFileFlags As Long
dwFileOS As Long
dwFileType As Long
dwFileSubtype As Long
dwFileDateMS As Long
dwFileDateLS As Long
End Type
Private Declare Function DllGetVersion Lib "shlwapi" _
(dwVersion As DllVersionInfo) As Long
Private Declare Function GetSystemDirectory Lib "kernel32" _
Alias "GetSystemDirectoryA" _
(ByVal lpBuffer As String, _
ByVal nSize As Long) As LongPrivate Declare Function GetFileVersionInfoSize Lib "version.dll" _
Alias "GetFileVersionInfoSizeA" _
(ByVal lptstrFilename As String, _
lpdwHandle As Long) As LongPrivate Declare Function GetFileVersionInfo Lib "version.dll" _
Alias "GetFileVersionInfoA" _
(ByVal lptstrFilename As String, _
ByVal dwHandle As Long, _
ByVal dwLen As Long, _
lpData As Any) As Long
Private Declare Function VerQueryValue Lib "version.dll" _
Alias "VerQueryValueA" _
(pBlock As Any, _
ByVal lpSubBlock As String, _
FI As Any, nVerSize As Long) As LongPrivate Declare Sub CopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" _
(Destination As Any, _
Source As Any, _
ByVal Length As Long)
Private Declare Function lstrcpyA Lib "kernel32" _
(ByVal RetVal As String, ByVal Ptr As Long) As Long
Private Declare Function lstrlenA Lib "kernel32" _
(ByVal Ptr As Any) As Long
Private Sub Command1_Click() Dim DVI As DllVersionInfo
Call GetIEVersion(DVI)
Frame1.Caption = GetIEVersionString()
Label2(0).Caption = DVI.dwMajorVersion
Label2(1).Caption = DVI.dwMinorVersion
Label2(2).Caption = DVI.dwBuildNumber
Label2(3).Caption = DVI.dwPlatformID
Label2(4).Caption = GetDLLPlatformName(DVI.dwPlatformID)
Label2(5).Caption = GetIECypherVersion()
End Sub
Private Function GetIECypherVersion() As String Dim FI As VS_FIXEDFILEINFO
Dim sBuffer() As Byte
Dim nBufferSize As Long
Dim lpBuffer As Long
Dim nVerSize As Long
Dim nUnused As Long
Dim tmpVer As String
Dim sBlock As String
Dim sDLLFile As String
Dim sSysPath As String
sSysPath = GetSystemDir() If sSysPath > "" Then 'set file that has the encryption level
'info and call to get required size
sDLLFile = sSysPath & "\schannel.dll"
nBufferSize = GetFileVersionInfoSize(sDLLFile, nUnused)
ReDim sBuffer(nBufferSize)
If nBufferSize > 0 Then
'get the version info
Call GetFileVersionInfo(sDLLFile, 0&, nBufferSize, sBuffer(0))
Call VerQueryValue(sBuffer(0), "\", lpBuffer, nVerSize)
Call CopyMemory(FI, ByVal lpBuffer, Len(FI))
If VerQueryValue(sBuffer(0), "\VarFileInfo\Translation", lpBuffer, nVerSize) Then
If nVerSize Then
tmpVer = GetPointerToString(lpBuffer, nVerSize)
tmpVer = Right("0" & Hex(Asc(Mid(tmpVer, 2, 1))), 2) & _
Right("0" & Hex(Asc(Mid(tmpVer, 1, 1))), 2) & _
Right("0" & Hex(Asc(Mid(tmpVer, 4, 1))), 2) & _
Right("0" & Hex(Asc(Mid(tmpVer, 3, 1))), 2)
sBlock = "\StringFileInfo\" & tmpVer & "\FileDescription"
'Get predefined version resources
If VerQueryValue(sBuffer(0), sBlock, lpBuffer, nVerSize) Then
If nVerSize Then
'get the file description string
tmpVer = GetStrFromPtrA(lpBuffer)
'File versions for 40 and 128-bit releases can
'be the same, so we have to do a string search
'to determine the encryption level. If the file
'description contains the line:
'PCT/SSL Security Provider (Export Version), its 40-bit.
'If it contains the line:
'PCT/SSL Security Provider (US and Canada Use Only), its 128-bit.
Select Case InStr(1, tmpVer, "(US and Canada Use Only)", vbTextCompare)
Case 0: GetIECypherVersion = "40-bit normal encryption"
Case Else: GetIECypherVersion = "128-bit strong encryption"
End Select
End If 'If nVerSize
End If 'If VerQueryValue
End If 'If nVerSize
End If 'If VerQueryValue
Else
GetIECypherVersion = "schannel.dll is not in the system folder."
End If 'If nBufferSize
End If 'If sSysPathEnd FunctionPrivate Function GetPointerToString(lpString As Long, nBytes As Long) As String Dim Buffer As String
If nBytes Then
Buffer = Space(nBytes)
CopyMemory ByVal Buffer, ByVal lpString, nBytes
GetPointerToString = Buffer
End If
End Function
Private Function GetStrFromPtrA(ByVal lpszA As Long) As String GetStrFromPtrA = String$(lstrlenA(ByVal lpszA), 0)
Call lstrcpyA(ByVal GetStrFromPtrA, ByVal lpszA)
End Function
Private Function GetSystemDir() As String Dim nSize As Long
Dim tmp As String
tmp = Space$(256)
nSize = Len(tmp)
Call GetSystemDirectory(tmp, nSize)
GetSystemDir = TrimNull(tmp)
End Function
Private Function TrimNull(item As String) Dim pos As Integer
'double check that there is a chr$(0) in the string
pos = InStr(item, Chr$(0))
If pos Then
TrimNull = Left$(item, pos - 1)
Else: TrimNull = item
End If
End Function
Private Function GetIEVersion(DVI As DllVersionInfo) As Long
DVI.cbSize = Len(DVI)
Call DllGetVersion(DVI)
GetIEVersion = DVI.dwMajorVersion
End Function
Private Function GetDLLPlatformName(dwPlatform As Long) As String
Select Case dwPlatform
Case DLLVER_PLATFORM_WINDOWS: GetDLLPlatformName = "DLL built for Windows 95"
Case DLLVER_PLATFORM_NT: GetDLLPlatformName = "DLL built for Windows NT"
End SelectEnd Function
Private Function GetIEVersionString() As String
Dim DVI As DllVersionInfo
DVI.cbSize = Len(DVI)
Call DllGetVersion(DVI) GetIEVersionString = "Internet Explorer " & DVI.dwMajorVersion & "." & _
DVI.dwMinorVersion & "." & _
DVI.dwBuildNumber
End Function
其实就是把名称部分传成“空串”就可以了。
把
RegQueryValueEx REG, "Version", 0, ByVal 0, ByVal Value, lValue
改成
RegQueryValueEx REG, "", 0, ByVal 0, ByVal Value, lValue
其实就是把名称部分传成“空串”就可以了。
把
RegQueryValueEx REG, "Version", 0, ByVal 0, ByVal Value, lValue
改成
RegQueryValueEx REG, "", 0, ByVal 0, ByVal Value, lValue
谢谢你!!
以下是我读注册表模块中的代码:
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal Hkey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal Hkey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal Hkey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As LongConst ERROR_SUCCESS = 0&
Const REG_SZ = 1
Const REG_DWORD = 4
Const REG_EXPAND_SZ = 2Public Enum HKeyTypes
HKEY_CLASSES_ROOT = &H80000000
HKEY_CURRENT_USER = &H80000001
HKEY_LOCAL_MACHINE = &H80000002
HKEY_USERS = &H80000003
HKEY_PERFORMANCE_DATA = &H80000004
End EnumFunction GetString(Hkey As HKeyTypes, strPath As String, strValue As String)
Dim keyhand As Long
Dim datatype As Long
Dim lRegResult As Long
Dim strBuf As String
Dim lDataBufSize As Long
Dim intZeroPos As Integer
Dim lValueType As Long
lRegResult = RegOpenKey(Hkey, strPath, keyhand)
lRegResult = RegQueryValueEx(keyhand, strValue, 0&, lValueType, ByVal 0&, lDataBufSize)
intZeroPos = InStr(strbuffer, Chr$(0)) If lValueType = REG_SZ Or REG_EXPAND_SZ Then
strBuf = String(lDataBufSize, " ")
lResult = RegQueryValueEx(keyhand, strValue, 0&, 0&, ByVal strBuf, lDataBufSize)
If lResult = ERROR_SUCCESS Then
intZeroPos = InStr(strBuf, Chr$(0))
If intZeroPos > 0 Then
GetString = Left$(strBuf, intZeroPos - 1)
Else
GetString = strBuf
End If
End If
End If
End Function我用空字符串时却不返回值,为什么?
这行怎么回事?倒数第二个参数应该是个字符串缓冲区。intZeroPos = InStr(strbuffer, Chr$(0)) 这行中的 strbuffer 也没声明。
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long' 注册表数据类型...
Const REG_SZ = 1 ' 字符串值
Const REG_EXPAND_SZ = 2 ' 可扩充字符串值
Const REG_BINARY = 3 ' 二进制值
Const REG_DWORD = 4 ' DWORD值
Const REG_MULTI_SZ = 7 ' 多字符串值' 注册表关键字根类型...
Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_USERS = &H80000003
Const HKEY_PERFORMANCE_DATA = &H80000004
Const HKEY_CURRENT_CONFIG = &H80000005
Const HKEY_DYN_DATA = &H80000006'---------------------------------------------------------------
'- 获得已存在的注册表关键字的值...
'- 如果 ValueName="" 则返回 KeyName 项的默认值...
'- 如果指定的注册表关键字不存在, 则返回空串...
'---------------------------------------------------------------
Public Function GetKeyValue(KeyRoot As Long, KeyName As String, ValueName As String, Optional ValueType As Long) As String
Dim i As Long ' 循环变量
Dim REG As Long ' 注册表打开项的句柄
Dim TempValue As String ' 注册表关键字的临时值
Dim Value As String ' 注册表关键字的值
Dim ValueSize As Long ' 注册表关键字的值的实际长度
TempValue = Space(1024) ' 存储注册表关键字的临时值的缓冲区
ValueSize = 1024 ' 设置注册表关键字的值的默认长度
'------------------------------------------------------------
'- 打开一个已存在的注册表关键字...
'------------------------------------------------------------
RegOpenKeyEx KeyRoot, KeyName, 0, KEY_ALL_ACCESS, REG
'------------------------------------------------------------
'- 获得已打开的注册表关键字的值...
'------------------------------------------------------------
RegQueryValueEx REG, ValueName, 0, ValueType, ByVal TempValue, ValueSize
'------------------------------------------------------------
'- 返回注册表关键字的的值...
'------------------------------------------------------------
Select Case ValueType ' 通过判断关键字的类型, 进行处理
Case REG_SZ, REG_MULTI_SZ, REG_EXPAND_SZ
TempValue = Left$(TempValue, ValueSize - 1) ' 去掉TempValue尾部空格
Value = TempValue
Case REG_DWORD
ReDim dValue(3) As Byte
RegQueryValueEx REG, ValueName, 0, REG_DWORD, dValue(0), ValueSize
For i = 3 To 0 Step -1
Value = Value + String(2 - Len(Hex(dValue(i))), "0") + Hex(dValue(i)) ' 生成长度为8的十六进制字符串
Next i
Value = Format("&h" + Value) ' 将十六进制的 Value 转换为十进制
Case REG_BINARY
If ValueSize > 0 Then
ReDim bValue(ValueSize - 1) As Byte ' 存储 REG_BINARY 值的临时数组
RegQueryValueEx REG, ValueName, 0, REG_BINARY, bValue(0), ValueSize
For i = 0 To ValueSize - 1
Value = Value + String(2 - Len(Hex(bValue(i))), "0") + Hex(bValue(i)) + " " ' 将数组转换成字符串
Next i
End If
End Select
'------------------------------------------------------------
'- 关闭注册表关键字...
'------------------------------------------------------------
RegCloseKey REG
GetKeyValue = Trim(Value) ' 返回函数值
End Function