找回密码
 加入
搜索
楼主: seominho

[系统综合] 如何获取控制面板添加/删除程序里的所有程序

[复制链接]
 楼主| 发表于 2009-4-15 11:25:11 | 显示全部楼层

回复 2# ddx13 的帖子

按照这个获得的是注册表里的全部程序,,,而我想得到的是只有在添加删除程序里显示的那些程序啊。。。。。。。。。
发表于 2009-9-1 12:55:16 | 显示全部楼层
如何获取添加删除里的 所有的程序
不要用 打开控制面板 再获取控件信息来获取。。
有没有办法能隐式的获取。。
seominho 发表于 2009-4-2 14:21

楼主到底是什么意思,那个枚举是全部程序,把不想要的踢出去就行了,那几段读取注册表的是一般方法,剩下的代码,根据自己所需增删了
发表于 2009-9-2 10:44:23 | 显示全部楼层
可以通过WMI来实现
具体思路是读取HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\中的键值,其中包含了所有的安装软件和系统更新文件。
发表于 2009-9-28 16:45:03 | 显示全部楼层
晕还没有高手搞定我正好需要这
发表于 2009-9-28 20:52:47 | 显示全部楼层
不错,学习一下。。
发表于 2009-10-1 10:55:02 | 显示全部楼层
本帖最后由 netegg 于 2009-10-1 11:09 编辑

$i  = 1
do
$key = regenumkey("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", $i)
if Regread("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"&$key, "displayname") <> "" then
  consolewrite(Regread("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"&$key, "displayname")  & @crlf)
endif
$i+=1
until $key = ""
发表于 2009-10-1 12:59:08 | 显示全部楼层
#NoTrayIcon
#include
#include
#include

Opt("GUIOnEventMode", 1)
DIM $_REG,$_REG_DP="DisplayName",$_REG_DI="DisplayIcon",$_REG_US="UninstallString",$X=0
DIM $_REG_String="HKEY_LOCAL_MACHINE\ ...
techbytnt 发表于 2009-4-7 12:21


整理一下:
#NoTrayIcon
#include <GuiListView.au3>
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>

Opt("GUIOnEventMode", 1)
DIM $_REG,$_REG_DP="DisplayName",$_REG_DI="DisplayIcon",$_REG_US="UninstallString",$X=0
DIM $_REG_String="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"

$GUI=GUICreate("添加删除程序",820,400,-1,-1)
$Label_01=GUICtrlCreateLabel("添加删除程序",10,20,800,40,0x01)
$Button_01=GUICtrlCreateButton("卸载",10,370,150,20)
$Button_02=GUICtrlCreateButton("退出",660,370,150,20)
$Lv=GUICtrlGetHandle(GUICtrlCreateListView("",10,50,800,315, BitOR($LVS_REPORT,$LVS_SHOWSELALWAYS),$WS_EX_CLIENTEDGE))
_GUICtrlListView_SetExtendedListViewStyle($Lv,BitOR($LVS_EX_GRIDLINES,$LVS_EX_FULLROWSELECT,$LVS_EX_SUBITEMIMAGES))
_GUICtrlListView_AddColumn($Lv, "", 20)
_GUICtrlListView_AddColumn($Lv, "列表",400)
_GUICtrlListView_AddColumn($Lv, "路径",355)


GUICtrlSetBkColor($Label_01, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetOnEvent($Button_01,"_Uninstall")
GUICtrlSetOnEvent($Button_02,"_EXIT")
GUISetOnEvent($GUI_EVENT_CLOSE,"_EXIT")
GUISetOnEvent($GUI_EVENT_MINIMIZE,"_MINIMIZE")
GUISetOnEvent($GUI_EVENT_RESTORE,"_RESTORE")
GUISetState()


for $i=1 to 1000
$_REG=RegEnumKey($_REG_String,$i)
If @error <> 0 then ExitLoop
if RegRead($_REG_String&$_REG,$_REG_DP)="" OR StringLeft($_REG,1)="{" Then
Else
_GUICtrlListView_AddItem($Lv,$x+1,$x)
_GUICtrlListView_AddSubItem($Lv,$x,RegRead($_REG_String&$_REG,$_REG_DP),1)
_GUICtrlListView_AddSubItem($Lv,$x,RegRead($_REG_String&$_REG,$_REG_US),2)
$x=$x+1
EndIf
Next

While 1
sleep(10)
WEnd

func _EXIT()
Exit
EndFunc

func _MINIMIZE()
GUISetState(@SW_MINIMIZE)
EndFunc

func _RESTORE()
GUISetState(@SW_RESTORE)
EndFunc

func _Uninstall()
if _GUICtrlListView_GetItemText($LV,_GUICtrlListView_GetSelectedIndices($lv),2)="" then
MsgBox(16,"添加删除程序","文件不存在 !")
Else
if MsgBox(1,"添加删除程序",_GUICtrlListView_GetItemText($LV,_GUICtrlListView_GetSelectedIndices($lv),1)&@CRLF&@CRLF&"您确定要卸载此程序?")=1 then Run(_GUICtrlListView_GetItemText($LV,_GUICtrlListView_GetSelectedIndices($lv),2))
EndIf
EndFunc
发表于 2009-10-1 14:27:28 | 显示全部楼层
22# lpxx

先不问别的,要是有1001个程序呢
发表于 2010-7-12 16:58:26 | 显示全部楼层
回复 22# lpxx


  刚刚看到这个贴,这两天也在研究如何在添加删除里去选择删除的程序,另一贴(http://www.autoitx.com/forum.php ... E%B3%FD%B3%CC%D0%F2)已被afan说明为无法删除了.
但看了这个贴,难道不能在取出的表中直接删除吗?我试运行了代码,里面有卸载键,但对每一个程序似乎使用窗口工具也无法一一取值,请赐教.谢谢.
发表于 2010-7-12 18:29:55 | 显示全部楼层
全都回答了,看来不用了
发表于 2022-9-8 06:55:59 | 显示全部楼层

虽然时间比较远,但是源码依旧很强悍!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-3-29 13:53 , Processed in 0.068655 second(s), 13 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表