第三个错了!
http://www.csdn.net/expert/topic/559/559463.xml?temp=.9695246
http://www.csdn.net/expert/topic/559/559463.xml?temp=.9695246
解决方案 »
- 如何通过拖动鼠标改变TreeView的宽度?
- 循环后汇总,急
- webbrowser自动提交表单问题:怎样在设置表单域的Value值时同时触发其onchange、onkeyup等事件
- 如何获取 "SQLServer注册" 名称?
- vb如何用可插入对象编程?
- 前面的问题,可能大家误会我意思了。再问一次。
- 我是VB盲,想问大家一个比较简单的问题?
- 急急,如何在VB中用其它表的列来更新源表的列(100)
- 求救大侠:哪儿有《Beginning Visual Basic》英文书 下载????高分100
- 如何获得一个ActiveX控件的版本号??
- 我想将字节数组里的一个一个字节按顺序写入数据库的表中,该怎么实现呢??
- 怎样弹出关机画面?
Public 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.
里面都是 每个软件安装 及 反安装工具 的信息和 路径.
你只要 读出这些值,
照着 里面 的反安装键值 调用程序即可.
我记得袁飞api工具里有个例子
再如下使用:
'从 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall'读取 软件安装信息.
'以 QQ2000 为例.
Dim strReturn As String '返回 QQ 卸载程序路径 及 运行此程序的参数
strReturn = GetKeyValue(HKEY_LOCAL_MACHINE,"QQ2000","UninstallString")
'运行 卸载 QQ2000 .
Shell strReturn
如下例,先用RegOpenKey打开相关注册表键的路径,再用RegQueryValueEx根据键名称查询键值,结果存储在该函数第五个参数szData指定的buffer中。Option Explicit
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" ( _
ByVal hKey As Long, _
ByVal lpSubKey As String, _
ByVal ulOptions As Long, _
ByVal samDesired As Long, _
phkResult As Long) As LongPrivate Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" ( _
ByVal hKey As Long, _
ByVal lpValueName As String, _
ByVal lpReserved As Long, _
ByVal lpType As Long, _
ByVal lpData As String, _
lpcbData As Long _
) As LongPrivate Declare Function RegCloseKey Lib "advapi32.dll" ( _
ByVal hKey As Long _
) As LongPrivate szData As String * 255
Private Const REG_SZ = 1
Private Const KEY_CREATE_LINK = &H20
Private Const KEY_CREATE_SUB_KEY = &H4
Private Const KEY_ENUMERATE_SUB_KEYS = &H8
Private Const STANDARD_RIGHTS_ALL = &H1F0000
Private Const KEY_QUERY_VALUE = &H1
Private Const KEY_SET_VALUE = &H2
Private Const KEY_NOTIFY = &H10
Private Const SYNCHRONIZE = &H100000Private Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or _
KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or _
KEY_CREATE_LINK) And (Not SYNCHRONIZE))Private Const HKEY_CURRENT_USER = &H80000001
Private Const HKEY_LOCAL_MACHINE = &H80000002Private Sub Command1_Click() Dim RetVal As Integer
Dim szValue As String
Dim hKey As Long
Dim sType As Long
RetVal = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{005F0409-6759-11D5-A54F-0090278A1BB8}", 0&, KEY_ALL_ACCESS, hKey)
If ((RegQueryValueEx(hKey, "DisplayName", 0, sType, szData, Len(szData))) <> 0) Then
' Error Handling ---- Something Wrong
MsgBox "regQuery error"
Else
' Error Handling ---- Nothing Wrong
Text1.Text = szData '这是您需要的值。
End If
RetVal = RegCloseKey(hKey)End Sub关于与注册表有关的函数请参考:
Registry Functions
http://msdn.microsoft.com/library/en-us/sysinfo/regapi_59mb.asp您可以从以下链接中通过注册表获得打印机信息的例子中获得感兴趣的信息。
Q143274 HOWTO: Retrieve Printer Name from Windows95/98/Me Registry in VB
http://support.microsoft.com/support/kb/articles/q143/2/74.asp- 微软全球技术中心 VB技术支持本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款
(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
为了为您创建更好的讨论环境,请参加我们的用户满意度调查
(http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。
不是就某一项!而且我不知道具体是哪一个!
==================================================================
Const ERROR_NO_MORE_ITEMS = 259&
Const HKEY_CURRENT_CONFIG = &H80000005
Const HKEY_LOCAL_MACHINE = &H80000002
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
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 RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, ByVal lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As Any) As Long
Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As LongPrivate Sub Form_Load()
Dim hKey As Long, Cnt As Long, sName As String, sData As String, Ret As Long, RetData As Long
Const BUFFER_SIZE As Long = 255
'Set the forms graphics mode to persistent
Me.AutoRedraw = True
Me.Print "RegEnumKeyEx"
Ret = BUFFER_SIZE
Cnt = 0
'Open a registry key
If RegOpenKey(HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\Uninstall", hKey) = 0 Then
'initialize
sName = Space(BUFFER_SIZE)
sData = Space(BUFFER_SIZE)
Ret = BUFFER_SIZE
RetData = BUFFER_SIZE
'enumerate the values
While RegEnumValue(hKey, Cnt, sName, Ret, 0, ByVal 0&, ByVal sData, RetData) <> ERROR_NO_MORE_ITEMS
'show data
If RetData > 0 Then Me.Print " " + Left$(sName, Ret) + "=" + Left$(sData, RetData - 1)
'prepare for next value
Cnt = Cnt + 1
sName = Space(BUFFER_SIZE)
sData = Space(BUFFER_SIZE)
Ret = BUFFER_SIZE
RetData = BUFFER_SIZE
Wend
'Close the registry key
RegCloseKey hKey
Else
Me.Print " Error while calling RegOpenKey"
End If
End Sub
================================================================== 对遍历结果,你可以 存储于 数组中,在用前面所说的方法 一个一个的读出 相关信息. 注意, 对于 一般软件, 它的 反安装 键名为:UninstallString .
但也有例外, 如:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\ShockwaveFlash
它的反安装键名是:QuietUninstallString
当然,它是个Ocx ,你可以不删除它.
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 RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
枚举项和键值用下面的api:
Private Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, ByVal cbName As Long) As Long
Private Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, ByVal lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As FILETIME) As Long
Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long
ok?
给分吧!谢谢!
我想这样:我观察了UNINTALL下面的键值,发现有的东西不提供卸载,所以,我觉得应该判断一下,
UnIntallString和DisPlayName都存在的话,可以删除;只有一个存在,不可删除!对吗?