Lubitel Softa
Новичок
- Сообщения
- 2
- Репутация
- 1
Всем доброго дня. Пишу маленький скриптик для установки обновлений Windows 7 и застрял на таком моменте: как в ListView выделить строку с нужным мне значением? В моём конкретном случае, в списке должна выделяться строка с именем обновления, которое устанавливается в текущий момент. Помогите, пожалуйста, разобраться.
Код:
#NoTrayIcon
#RequireAdmin
If WinExists (@ScriptName) Then Exit
AutoItWinSetTitle (@ScriptName)
#include <File.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Include <GuiListView.au3>
AutoItSetOption ("MustDeclareVars", 1)
Global $tValue = DllStructCreate ("dword")
Global $search_upd, $sFPath, $aFiles, $iFiles, $msg, $iPrecent, $counter, $updates, $Form1, $Reboot, $Install, $Cancell, $Exit, _
$Silent_Checkbox, $ListView, $ProgressBar, $Label_Copyright, $nMsg, $FileSize, $FileSizeText, $ImenaObnov, $iPrecent
Global $msu = "msu"
Global $cab = "cab"
;Если установщик запущен не под 7, то выдаётся уведомление и работа завершается
If @OSVersion <> "WIN_7" Then
MsgBox (48, "Установщик © StaforceBonus - Windows 7", "Программа рассчитана на работу только в среде Windows 7")
Exit
EndIf
;В зависимости от разрядности ОС выбирается папка с обновлениями и все обновы считываются в массив
Select
Case @OSArch = "X86"
FileChangeDir (@ScriptDir & "\x86")
$sFPath = (@ScriptDir & "\x86")
$search_upd = FileFindFirstFile ("*.*")
Case @OSArch = "X64"
DllCall ("kernel32.dll", "int", "Wow64DisableWow64FsRedirection", "ptr", DllStructGetPtr ($tValue))
Sleep (2000)
FileChangeDir (@ScriptDir & "\x64")
$sFPath = (@ScriptDir & "\x64")
$search_upd = FileFindFirstFile ("*.*")
EndSelect
$aFiles = _FileListToArray ($sFPath, "*.*", 1)
If FileExists ($sFPath) = 0 Then
MsgBox (16, "Установщик © StaforceBonus - Windows 7", "В текущем расположении отсутствуют папки x86/x64")
Exit
EndIf
If IsArray ($aFiles) = 0 And FileExists ($sFPath) = 1 Then
MsgBox (16, "Установщик © StaforceBonus - Windows 7", "В папке " & $sFPath & " не обнаружены обновления для Windows 7 " & @OSArch)
Exit
EndIf
$iFiles = $aFiles[0]
;Графический интерфейс
$Form1 = GUICreate ("Установщик © StaforceBonus - Windows 7", 410, 412, 333, 344)
GUISetIcon ("C:\Windows\Icons\Applications\App 03.ico", -1)
$Reboot = GUICtrlCreateCheckbox ("Перезагрузка в конце", 8, 352, 137, 25)
GUICtrlSetState (-1, $GUI_CHECKED)
$Install = GUICtrlCreateButton ("Установить всё", 5, 313, 121, 33)
$Cancell = GUICtrlCreateButton ("Прервать установку", 145, 313, 121, 33)
$Exit = GUICtrlCreateButton ("Выход", 283, 313, 121, 33)
$Silent_Checkbox = GUICtrlCreateCheckbox ("Установка фоном", 160, 352, 113, 25)
GUICtrlSetState (-1, $GUI_CHECKED)
$ListView = GUICtrlCreateListView ("Пакеты обновления|Размер", 0, 0, 409, 281, $LVS_SHOWSELALWAYS, $LVS_EX_FULLROWSELECT)
_GUICtrlListView_SetColumnWidth ($ListView, 0, 300)
_GUICtrlListView_SetColumnWidth ($ListView, 1, 92)
$ProgressBar = GUICtrlCreateProgress (0, 285, 409, 17, $PBS_SMOOTH)
$Label_Copyright = GUICtrlCreateLabel ("© StaforceTEAM - Lubitel Softa", 127, 392, 155, 17)
GUICtrlSetFont (-1, 8, 400, 0, "Tahoma")
GUISetState (@SW_SHOW)
;Заполнение имён обновлений и их размеров в ListBox
For $i = 1 To $aFiles[0]
If FileGetSize ($aFiles[$i]) >= 1048576 Then
$FileSize = Round (FileGetSize ($aFiles[$i]) / 1048576, 2)
$FileSizeText = $FileSize & " МБ"
Else
$FileSize = Round (FileGetSize ($aFiles[$i]) / 1024, 2)
$FileSizeText = $FileSize & " КБ"
EndIf
GUICtrlCreateListViewItem ($aFiles[$i] & "|" & $FileSizeText, $ListView)
Next
;Здесь к кнопкам привязаны действия
Do
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Exit
Exit
Case $Install
_Install()
EndSwitch
Until $nMsg = $GUI_EVENT_CLOSE
;Установка обновлений
Func _Install()
$iPrecent = 0
While $search_upd = 1
$updates = FileFindNextFile ($search_upd)
If @error Then ExitLoop
$iPrecent += (100 / $iFiles)
GUICtrlSetData ($ProgressBar, $iPrecent)
Switch StringRight ($updates, 3)
Case $msu
ShellExecuteWait ("wusa.exe", $updates & " /quiet /norestart", $sFPath, "open")
Case $cab
ShellExecuteWait ("PkgMgr.exe", "/ip /m:" & $updates & " /quiet /norestart", $sFPath, "open")
EndSwitch
If $iPrecent >= 100 Then
$nMsg = $GUI_EVENT_CLOSE
EndIf
WEnd
EndFunc
;Включение обратно перенаправления системных папок в Windows х64
If @OSArch = "X64" Then
DllCall ("kernel32.dll", "int", "Wow64RevertWow64FsRedirection", "ptr", DllStructGetPtr ($tValue))
EndIf