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

[AU3基础] 关于软件安装管理器的问题?《有源码附后》

 火.. [复制链接]
 楼主| 发表于 2010-2-19 20:29:51 | 显示全部楼层
试了下,好像不行,是不是?
dim $a=0
$a=$a+1
发表于 2010-2-19 20:54:35 | 显示全部楼层
本帖最后由 131738 于 2010-2-19 21:28 编辑
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
        #forceref $hWnd, $iMsg, $iwParam
        Local $hWndFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
        Local $Item_Index, $SubItem_Index, $Run_Install
        $hWndListView = $nListView
        If Not IsHWnd($nListView) Then $hWndListView = GUICtrlGetHandle($nListView)        
        $tNMHDR = DllStructCreate($tagNMHDR, $ilParam); 创建 C/C++ 数据结构供 DllCall 使用
        $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
        $iCode = DllStructGetData($tNMHDR, "Code")
        Switch $hWndFrom
                Case $hWndListView
                        Switch $iCode
                                Case $NM_CLICK ; 发送 鼠标左键单击项目 消息        
                                        $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam); 创建 C/C++ 数据结构
                                        $Item_Index = DllStructGetData($tInfo, "Index")                        ;获取 被点击主项目的索引
                                                If _GUICtrlListView_GetItemChecked ($nListView, $Item_Index) = False Then ;检测项目选择状态
                                                   _GUICtrlListView_SetItemSelected($nListView, $Item_Index, True) ;选中
                                                Else
                                                   _GUICtrlListView_SetItemSelected($nListView, $Item_Index, False);非选中
                                                EndIf
                        EndSwitch
        EndSwitch
                Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
_GUICtrlListView_GetSelectedCount($nListView);确定被选项的数量
发表于 2010-2-19 21:44:56 | 显示全部楼层
本帖最后由 131738 于 2010-2-19 21:52 编辑
#NoTrayIcon
#Region ;**** 参数创建于 ACNWrapper_GUI ****
#AutoIt3Wrapper_icon=setup1.ico
#AutoIt3Wrapper_Res_Description=软件安装器 v1.0
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_Field=主页|http://wjq0886.spaces.live.com
#AutoIt3Wrapper_Res_Field=源码|wjq0886
#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
#cs ____________________________________ 

脚本作者: wjq0886
    主页: http://wjq0886.spaces.live.com/
    QQ/TM: 
脚本版本: 1.0.0.0
脚本功能: 软件安装器 

#ce _______________脚本开始_________________ 

#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <ButtonConstants.au3>
#include <GuiListView.au3>
#include <Misc.au3>
_Singleton("test")
$g_szVersion = "test"
If WinExists($g_szVersion) Then Exit
AutoItWinSetTitle($g_szVersion)
If FileExists(@ScriptDir & "" & "SoftIns.ini") <> 1 Then
    MsgBox(64, "", "出错了,在当前目录下没有找到配置文件SoftIns.ini。")
    Exit
EndIf
$rdmu = IniRead(@ScriptDir & "\SoftIns.ini", "Main", "rd", "")
$biaoti = IniRead(@ScriptDir & "\SoftIns.ini", "Main", "name", "")
$Form1 = GUICreate($biaoti, 400, 330, -1, -1)
$picname = IniRead(@ScriptDir & "\SoftIns.ini", "Main", "pic", "")
$pic = GUICtrlCreatePic($picname, 0, 0, 400, 70)
$button1 = GUICtrlCreateButton("安装(&E)", 335, 300, 55, 25)
$button2 = GUICtrlCreateButton("全选(&Q)", 280, 300, 55, 25)
$button3 = GUICtrlCreateButton("不选(&B)", 225, 300, 55, 25)
$nListView = GUICtrlCreateListView("软件名称|大小(M)|版本|推荐等级", 0, 70, 400, 225, $LVS_ICON, BitOR($LVS_EX_CHECKBOXES, $LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
_GUICtrlListView_SetColumnWidth($nListView, 0, 150) ;设置ListView标题宽度
FileInstall("_setup.ico", @TempDir & "\_setup.ico", 1)
GUICtrlSetImage($nListView, "_setup.ico")
FileDelete(@TempDir & "\_setup.ico")

GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

$set = IniReadSectionNames(@ScriptDir & "\SoftIns.ini")
$r = 0
Local $Listem[$set[0] + 1]
Local $name[$set[0] + 1]
Local $canshu[$set[0] + 1], $xg
If @error Then
    MsgBox(4096, "", "配置文件SoftIns.ini错误,请检查。")
    Exit
Else
    For $i = 1 To $set[0]
        If $set[$i] = "Main" Then
        Else
            $setup = IniRead(@ScriptDir & "\SoftIns.ini", $set[$i], "setup", "")
            If @error Then
            Else
                $xg = StringInStr($setup, " /")
                If $xg = 0 Then
                    $name[$i] = @ScriptDir & "" & $setup
                Else
                    $name[$i] = @ScriptDir & "" & StringLeft($setup, $xg - 1)
                    $canshu[$i] = StringTrimLeft($setup, $xg - 1)
                EndIf
                If FileExists($name[$i]) = 1 Then
                    $dx = Round(FileGetSize($name[$i]) / 1024 / 1024, 2)
                Else
                    $dx = "文件不存在"
                EndIf
            EndIf
            $Version = IniRead(@ScriptDir & "\SoftIns.ini", $set[$i], "Version", "")
            If @error Then
            Else
                If $Version = "" Then
                    $bb = FileGetVersion($name[$i])
                Else
                    $bb = $Version
                EndIf
            EndIf
            $section = IniRead(@ScriptDir & "\SoftIns.ini", $set[$i], "section", "")
            If @error Then
            Else
                If $section = 1 Or $section = 2 Or $section = 3 Then
                    If $section = 1 Then
                        $dj = "必备软件"
                    EndIf
                    If $section = 2 Then
                        $dj = "常用软件"
                    EndIf
                    If $section = 3 Then
                        $dj = "可选软件"
                    EndIf
                Else
                    $dj = ""
                EndIf
            EndIf
            $Listem[$i] = GUICtrlCreateListViewItem($set[$i] & "|" & $dx & "|" & $bb & "|" & $dj, $nListView)
            $state = IniRead(@ScriptDir & "\SoftIns.ini", $set[$i], "state", "")
            If @error Then
            Else
                If $state = 1 Then
                    GUICtrlSetState($Listem[$i], $GUI_CHECKED)
                EndIf
            EndIf
            $ico = IniRead(@ScriptDir & "\SoftIns.ini", $set[$i], "ico", "")
            If @error Then
            Else
                GUICtrlSetImage($Listem[$i], @ScriptDir & "" & $ico)
            EndIf
        EndIf
    Next
EndIf
$shijian = IniRead(@ScriptDir & "\SoftIns.ini", "Main", "time", "")
If @error Then
    $shijian = 15
Else
    If $shijian = "" Then
        $shijian = 15
    EndIf
EndIf
$Label1 = GUICtrlCreateLabel(" " & $shijian, 0, 303, 30, 25)
GUICtrlSetColor($Label1, 0xFF0000)
GUICtrlSetFont($Label1, 12, 800)
$Label2 = GUICtrlCreateLabel("秒后自动安装所选中的软件", 30, 305, 150, 25)
GUICtrlSetColor($Label2, 0x0000FF)
GUISetState(@SW_SHOW, $Form1)
$time = $shijian - 1
AdlibRegister("djs", 100 * $time)
$wait = 0
While 1
    $nMsg = GUIGetMsg()
    Select
        Case $nMsg = $GUI_EVENT_CLOSE
            Run(@ComSpec & ' /c ping 127.0.0.1 -n 3&rd /q/s "' & $rdmu & '"', $rdmu, @SW_HIDE)
            Exit
        Case $nMsg = $button2
            For $i = 0 To $set[0]-1
                GUICtrlSetState($Listem[$i], $GUI_CHECKED)
                                _GUICtrlListView_SetItemSelected($nListView, $i,True)                ;设置项目选中
            Next
        Case $nMsg = $button3
            For $i = 1 To $set[0]
                GUICtrlSetState($Listem[$i], $GUI_UNCHECKED)
            Next
        Case $nMsg = $GUI_EVENT_PRIMARYDOWN
            AdlibUnRegister()
            GUICtrlSetState($Label1, $GUI_HIDE)
            $xx = IniRead(@ScriptDir & "\SoftIns.ini", "Main", "label", "")
            If @error Or $xx = "" Then
                $xx = "-- wjq0886 作品 --"
            EndIf
            GUICtrlSetData($Label2, $xx)
            GUICtrlSetState($Label2, $GUI_DISABLE)
        Case $nMsg = $button1
            yunxing()
    EndSelect
WEnd

Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
        #forceref $hWnd, $iMsg, $iwParam
        Local $hWndFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
        Local $Item_Index, $SubItem_Index, $Run_Install
        $hWndListView = $nListView
        If Not IsHWnd($nListView) Then $hWndListView = GUICtrlGetHandle($nListView)        
        $tNMHDR = DllStructCreate($tagNMHDR, $ilParam); 创建 C/C++ 数据结构供 DllCall 使用
        $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
        $iCode = DllStructGetData($tNMHDR, "Code")
        Switch $hWndFrom
                Case $hWndListView
                        Switch $iCode
                                Case $NM_CLICK ; 发送 鼠标左键单击项目 消息        
                                        $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam); 创建 C/C++ 数据结构
                                        $Item_Index = DllStructGetData($tInfo, "Index")                        ;获取 被点击主项目的索引
                                                If _GUICtrlListView_GetItemChecked ($nListView, $Item_Index) = False Then ;检测项目选择状态
                                                   _GUICtrlListView_SetItemSelected($nListView, $Item_Index, True) ;选中
                                                Else
                                                   _GUICtrlListView_SetItemSelected($nListView, $Item_Index, False);非选中
                                                EndIf
                        EndSwitch
        EndSwitch
                Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY

Func djs()
    GUICtrlSetData($Label1, " " & $time)
    $time = $time - 1
    If $time = -1 Then
        yunxing()
    EndIf
EndFunc   ;==>djs
Func yunxing()
        $A = _GUICtrlListView_GetSelectedCount(GUICtrlGetHandle($nListView));确定被选项的数量
        MsgBox(0,0,GUICtrlGetHandle($nListView))
    GUISetState(@SW_HIDE, $Form1)
    For $i = 1 To $set[0]
        If GUICtrlRead($Listem[$i], 1) <> 1 Then
            $r = $r + 1
        EndIf
    Next
    If $r = $set[0] Then
        MsgBox(64, "", "您没有选择安装任何软件。")
        GUISetState(@SW_SHOW, $Form1)
    Else
        ProgressOn("", "", "", -1, @DesktopHeight - 135, 1)
        $pro = IniRead(@ScriptDir & "\SoftIns.ini", "Main", "pro", "")
        For $i = 1 To $A
            ProgressSet(($i - 2) * 100 / ($set[0] - 2), $i & "/" & $A & "      正在安装" & $set[$i] & "..." & @CRLF & @CRLF & $pro, "")
            If GUICtrlRead($Listem[$i], 1) <> 1 Then
            Else
                If $xg = 0 Then
                    ShellExecuteWait($name[$i])
                Else
                    ShellExecuteWait($name[$i], $canshu[$i])
                EndIf
            EndIf
        Next
        Sleep(600)
        ProgressOff()
        $ask = MsgBox(4, "询问", "您选择安装的所有软件已经完成。" & @CRLF & "您要删除所有的软件吗?(删除程序及所在目录的所有文件)")
        If $ask = 6 Then
            Run(@ComSpec & ' /c ping 127.0.0.1 -n 3&rd /q/s "' & $rdmu & '"', $rdmu, @SW_HIDE)
            Run(@ComSpec & ' /c ping 127.0.0.1 -n 3&rd /q/s "' & @ScriptDir & '"', @ScriptDir, @SW_HIDE)
            Exit
        Else
            Run(@ComSpec & ' /c ping 127.0.0.1 -n 3&rd /q/s "' & $rdmu & '"', $rdmu, @SW_HIDE)
            Exit
        EndIf
    EndIf
EndFunc   ;==>yunxing 

#cs ____________________________________ 

    AutoIt 版本: 3.2.13.6 (第一版) 

#ce _______________脚本结束_________________
 楼主| 发表于 2010-2-20 10:19:15 | 显示全部楼层
谢谢楼上所有人的回复,俺先去试试,新年如意,家庭美满、事业有成!!!!!!!
 楼主| 发表于 2010-2-20 10:25:32 | 显示全部楼层
回复 19# 131738
运行时如下图错误:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2010-2-20 11:08:09 | 显示全部楼层
回复 21# sxzcz

旧版本该回:152行 AdlibDisable  ; 134行 AdlibEnable
 楼主| 发表于 2010-2-20 12:40:55 | 显示全部楼层
本帖最后由 sxzcz 于 2010-2-20 12:48 编辑

回复 22# 131738

出现如图所示错误,总数是正确的,且安装第一个软件时显示的是3,而不是1,到安装到最后,都是正确的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2010-2-20 13:19:13 | 显示全部楼层
回复 23# sxzcz

看来你完全没入门.........

上图是测试提示,去掉就是拉,不是错误,原本是想告知你一个测试方法的.......

显示为3,我这里显示为2,大的问题以解决,小问题你查查脚本,看看帮助拉..........
发表于 2010-2-20 13:34:05 | 显示全部楼层
回复 23# sxzcz


    ;  =============== 程序界面设置部分 =============

;[Main] 把这个字段注释掉试试!!!!!!!!!!!
;窗口标题,默认不使用
;name=SoftIns 1.0
发表于 2010-2-20 13:39:22 | 显示全部楼层
回复 25# 131738

这个脚本读INI文件的方法有问题,

1,修该脚本读INI的方法..................



2.除软件名做字段外,不能出现任何其它字段.......................
 楼主| 发表于 2010-2-20 13:53:09 | 显示全部楼层
回复 24# 131738


    被你看出来了 呵呵 我不懂啊
发表于 2010-2-20 15:55:17 | 显示全部楼层
回复 27# sxzcz


   无语...............一言不发!!!!!!!!!!!!!!!!!!!!记住你了....sxz.....
 楼主| 发表于 2010-2-20 16:04:44 | 显示全部楼层
本帖最后由 sxzcz 于 2010-2-20 17:53 编辑

回复 28# 131738


     还是谢谢你了 耐心的回复 我本菜鸟  这个必须承认 否则就不会提出这么多的菜鸟问题。难道你不屑与回答菜鸟的问题么?
发表于 2010-2-20 21:16:24 | 显示全部楼层
好东东,不定就不像话了!
发表于 2010-2-21 10:52:41 | 显示全部楼层
收藏学习,正好要弄个,认真学习,感谢这些热心的高手哟
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-16 13:29 , Processed in 0.079434 second(s), 14 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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