找回密码
 加入
搜索
查看: 11783|回复: 25

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

[复制链接]
发表于 2009-4-2 14:21:41 | 显示全部楼层 |阅读模式
如何获取添加删除里的 所有的程序
不要用 打开控制面板 再获取控件信息来获取。。
有没有办法能隐式的获取。。
发表于 2009-4-7 15:49:41 | 显示全部楼层

==你描述的是这样的吗?

#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)="" 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-4-2 17:42:19 | 显示全部楼层
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.CreateTextFile("c:\software.tsv", True)
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colSoftware = objWMIService.ExecQuery _
    ("Select * from Win32_Product")
objTextFile.WriteLine "Caption" & vbtab & _
    "Description" & vbtab & "Identifying Number" & vbtab & _
    "Install Date" & vbtab & "Install Location" & vbtab & _
    "Install State" & vbtab & "Name" & vbtab & _
    "Package Cache" & vbtab & "SKU Number" & vbtab & "Vendor" & vbtab _
        & "Version"
For Each objSoftware in colSoftware
    objTextFile.WriteLine objSoftware.Caption & vbtab & _
    objSoftware.Description & vbtab & _
    objSoftware.IdentifyingNumber & vbtab & _
    objSoftware.InstallDate2 & vbtab & _
    objSoftware.InstallLocation & vbtab & _
    objSoftware.InstallState & vbtab & _
    objSoftware.Name & vbtab & _
    objSoftware.PackageCache & vbtab & _
    objSoftware.SKUNumber & vbtab & _
    objSoftware.Vendor & vbtab & _
    objSoftware.Version
Next
objTextFile.Close
在c:\software.tsv文件里,自己修改一下。
发表于 2009-4-2 18:52:44 | 显示全部楼层
也可以用 RegEnumKey 查询注册表键来获取
 楼主| 发表于 2009-4-7 09:30:29 | 显示全部楼层

回复 2# ddx13 的帖子

我能问下你这是 VB script吗??还是别的语言啊?? 如何用autoit  编写啊??那些函数都没有啊
谢谢!
发表于 2009-4-7 09:47:06 | 显示全部楼层

回复发表人

seominho , 我不太明白你的问题==,能够用英文描述吗?是不是startup program?
 楼主| 发表于 2009-4-7 10:22:12 | 显示全部楼层

回复 5# techbytnt 的帖子

控制面板-〉添加删除程序     里头不是列出了已经安装的程序吗。。。 我想用数组获取那些程序然后列出那些程序。
发表于 2009-4-7 12:21:18 | 显示全部楼层

@_@

#NoTrayIcon<br />
#include <GuiListView.au3><br />
#include <GuiConstantsEx.au3><br />
#include <WindowsConstants.au3><br />
<br />
Opt("GUIOnEventMode", 1)<br />
DIM $_REG,$_REG_DP="DisplayName",$_REG_DI="DisplayIcon",$_REG_US="UninstallString",$X=0<br />
DIM $_REG_String="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"<br />
<br />
$GUI=GUICreate("添加删除程序",820,400,-1,-1)<br />
$Label_01=GUICtrlCreateLabel("添加删除程序",10,20,800,40,0x01)<br />
$Button_01=GUICtrlCreateButton("卸载",10,370,150,20)<br />
$Button_02=GUICtrlCreateButton("退出",660,370,150,20)<br />
$Lv=GUICtrlGetHandle(GUICtrlCreateListView("",10,50,800,315, BitOR($LVS_REPORT,$LVS_SHOWSELALWAYS),$WS_EX_CLIENTEDGE))<br />
_GUICtrlListView_SetExtendedListViewStyle($Lv,BitOR($LVS_EX_GRIDLINES,$LVS_EX_FULLROWSELECT,$LVS_EX_SUBITEMIMAGES))<br />
_GUICtrlListView_AddColumn($Lv, "", 20)<br />
_GUICtrlListView_AddColumn($Lv, "列表",400)<br />
_GUICtrlListView_AddColumn($Lv, "路径",355)<br />
<br />
<br />
GUICtrlSetBkColor($Label_01, $GUI_BKCOLOR_TRANSPARENT)<br />
GUICtrlSetOnEvent($Button_01,"_Uninstall")<br />
GUICtrlSetOnEvent($Button_02,"_EXIT")<br />
GUISetOnEvent($GUI_EVENT_CLOSE,"_EXIT")<br />
GUISetOnEvent($GUI_EVENT_MINIMIZE,"_MINIMIZE")<br />
GUISetOnEvent($GUI_EVENT_RESTORE,"_RESTORE")<br />
GUISetState()<br />
<br />
<br />
for $i=1 to 1000<br />
$_REG=RegEnumKey($_REG_String,$i)<br />
If @error <> 0 then ExitLoop<br />
if RegRead($_REG_String&$_REG,$_REG_DP)="" OR StringLeft($_REG,1)="{" Then<br />
Else<br />
_GUICtrlListView_AddItem($Lv,$x+1,$x)<br />
_GUICtrlListView_AddSubItem($Lv,$x,RegRead($_REG_String&$_REG,$_REG_DP),1)<br />
_GUICtrlListView_AddSubItem($Lv,$x,RegRead($_REG_String&$_REG,$_REG_US),2)<br />
$x=$x+1<br />
EndIf<br />
Next<br />
<br />
While 1<br />
sleep(10)<br />
WEnd<br />
<br />
func _EXIT()<br />
Exit<br />
EndFunc<br />
<br />
func _MINIMIZE()<br />
GUISetState(@SW_MINIMIZE)<br />
EndFunc<br />
<br />
func _RESTORE()<br />
GUISetState(@SW_RESTORE)<br />
EndFunc<br />
<br />
func _Uninstall()<br />
if _GUICtrlListView_GetItemText($LV,_GUICtrlListView_GetSelectedIndices($lv),2)="" then<br />
MsgBox(16,"添加删除程序","文件不存在 !")<br />
Else<br />
if MsgBox(1,"添加删除程序",_GUICtrlListView_GetItemText($LV,_GUICtrlListView_GetSelectedIndices($lv),1)&@CRLF&@CRLF&"您确定要卸载此程序?")=1 then Run(_GUICtrlListView_GetItemText($LV,_GUICtrlListView_GetSelectedIndices($lv),2))<br />
EndIf<br />
EndFunc
发表于 2009-4-7 12:44:07 | 显示全部楼层
不懂是不是你所要的== 不过我也是写爽而已 =D
 楼主| 发表于 2009-4-7 14:46:44 | 显示全部楼层

回复 7# techbytnt 的帖子

谢谢, 这程序能获取一些不过获取的程序不到 添加删除程序里的一半。。。。。
33行   "{"   ------- 很多以这个开头的程序也在添加删除程序里头,所以很多程序没列出来。。。。
 楼主| 发表于 2009-4-8 09:03:09 | 显示全部楼层

回复 10# techbytnt 的帖子

问题就出在这里   如果不判断   "{"  这个的话  很多程序是不在 添加删除程序里的。。。
所以 要是这么得到的程序  很多是不应该得到的。。。。
 楼主| 发表于 2009-4-8 14:54:32 | 显示全部楼层
原帖由 techbytnt 于 2009-4-7 09:47 发表
seominho , 我不太明白你的问题==,能够用英文描述吗?是不是startup program?

如何让程序运行以后自动添加到 startup program 里啊??
发表于 2009-4-9 10:16:32 | 显示全部楼层

回复 12#

RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run","MyProgram","REG_SZ",@scriptfullpath)

RegWrite("HKEY_Current_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run","MyProgram","REG_SZ",@scriptfullpath)

"MyProgram"=程序名
@scriptfullpath=程序路径
 楼主| 发表于 2009-4-13 13:42:24 | 显示全部楼层
我用打开控制面板然后获取控件信息获取了程序列表,,
请教高手能否隐式的获取只有在添加删除程序里的程序。。。
发表于 2009-4-13 21:25:09 | 显示全部楼层
原帖由 seominho 于 2009-4-7 09:30 发表
我能问下你这是 VB script吗??还是别的语言啊?? 如何用autoit  编写啊??那些函数都没有啊
谢谢!

au3 wmi
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-26 15:10 , Processed in 0.081624 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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