seominho 发表于 2009-4-15 11:25:11

回复 2# ddx13 的帖子

按照这个获得的是注册表里的全部程序,,,而我想得到的是只有在添加删除程序里显示的那些程序啊。。。。。。。。。

netegg 发表于 2009-9-1 12:55:16

如何获取添加删除里的 所有的程序
不要用 打开控制面板 再获取控件信息来获取。。
有没有办法能隐式的获取。。
seominho 发表于 2009-4-2 14:21 http://www.autoitx.com/images/common/back.gif
楼主到底是什么意思,那个枚举是全部程序,把不想要的踢出去就行了,那几段读取注册表的是一般方法,剩下的代码,根据自己所需增删了

clshuai 发表于 2009-9-2 10:44:23

可以通过WMI来实现
具体思路是读取HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\中的键值,其中包含了所有的安装软件和系统更新文件。

xz00311 发表于 2009-9-28 16:45:03

晕还没有高手搞定我正好需要这

menfan 发表于 2009-9-28 20:52:47

不错,学习一下。。

netegg 发表于 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 = ""

lpxx 发表于 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 http://www.autoitx.com/images/common/back.gif

整理一下:#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

netegg 发表于 2009-10-1 14:27:28

22# lpxx

先不问别的,要是有1001个程序呢

oksy 发表于 2010-7-12 16:58:26

回复 22# lpxx


刚刚看到这个贴,这两天也在研究如何在添加删除里去选择删除的程序,另一贴(http://www.autoitx.com/forum.php?mod=viewthread&tid=16595&highlight=%CC%ED%BC%D3%2B%C9%BE%B3%FD%B3%CC%D0%F2)已被afan说明为无法删除了.
但看了这个贴,难道不能在取出的表中直接删除吗?我试运行了代码,里面有卸载键,但对每一个程序似乎使用窗口工具也无法一一取值,请赐教.谢谢.

rikthhpgf2005 发表于 2010-7-12 18:29:55

全都回答了,看来不用了

zpmc123 发表于 2022-9-8 06:55:59

techbytnt 发表于 2009-4-7 15:49


虽然时间比较远,但是源码依旧很强悍!
页: 1 [2]
查看完整版本: 如何获取控制面板添加/删除程序里的所有程序