Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Не отрабатывает функция обновления скрипта

Ответить
Настройки темы
[решено] Не отрабатывает функция обновления скрипта

Ветеран


Сообщения: 903
Благодарности: 161


Конфигурация

Профиль | Отправить PM | Цитировать


Есть код:

читать дальше »
Код: Выделить весь код
#include <ButtonConstants.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#Include <WinAPIEx.au3>

Global $hKey, $sKey, $hSubKey, $sData, $tData, $aCreateNew, $aList1, $sList1 ='', $aList2, $sList2 ='', $Count = 1
Dim $aKey[1]
Global $hKeySR, $hKeyRR

Opt("GUIOnEventMode", 1)


#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate('Редактирование меню "Создать"', 505, 355, 236, 233)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
$Group_Delete = GUICtrlCreateGroup("Удалить из меню", 8, 8, 489, 201)
$ListView_New = GUICtrlGetHandle(GUICtrlCreateListView("Расширение|Путь к ShellNew...", 16, 26, 377, 172, -1, BitOR($WS_EX_CLIENTEDGE, $LVS_EX_CHECKBOXES, $LVS_EX_FULLROWSELECT)))
_GUICtrlListView_SetColumnWidth(-1, 0, 80)
_GUICtrlListView_SetColumnWidth(-1, 1, 272)
$Button_SelectAllNew = GUICtrlCreateButton("Выделить Все", 400, 26, 89, 39, BitOR($BS_MULTILINE,$WS_GROUP))
GUICtrlSetOnEvent(-1, '_SelectAllNew')
$Button_UnSelectAllNew = GUICtrlCreateButton("Отменить", 400, 78, 89, 39, BitOR($BS_MULTILINE,$WS_GROUP))
GUICtrlSetOnEvent(-1, '_UnSelectAllNew')
$Button_CleanNew = GUICtrlCreateButton("Удалить", 400, 160, 89, 39, BitOR($BS_MULTILINE,$WS_GROUP))
GUICtrlSetOnEvent(-1, '_CleanNew')
$Button_RefreshNew = GUICtrlCreateButton("Обновить", 400, 305, 89, 39, BitOR($BS_MULTILINE,$WS_GROUP))
GUICtrlSetOnEvent(-1, '_RefreshNew')

#EndRegion ### END Koda GUI section ###
_ArCreateNew()

GUISetState()


While 1
    Sleep(100)
WEnd


Func CLOSEClicked()
   Exit
EndFunc


Func _ArCreateNew()

$tData = DllStructCreate('wchar[260]')
$hKey = _WinAPI_RegOpenKey($HKEY_CLASSES_ROOT, '', $KEY_READ)
While 1
    $sData = ''

    $sKey = _WinAPI_RegEnumKey($hKey, $Count)
    If @error Then
        ExitLoop
    EndIf
    $Count += 1

    $hSubKey = _WinAPI_RegOpenKey($hKey, $sKey & '\ShellNew', $KEY_READ)
    If @error Then
        If StringLeft($sKey, 1) <> '.' Then
            ContinueLoop
        EndIf
        $hSubKey = _WinAPI_RegOpenKey($hKey, $sKey, $KEY_READ)
        If @error Then
            ContinueLoop
        EndIf
        If _WinAPI_RegQueryValue($hSubKey, '', $tData) Then
            $sData = DllStructGetData($tData, 1)
        Else
            $sData = ''
        EndIf
        _WinAPI_RegCloseKey($hSubKey)
        If Not $sData Then
            ContinueLoop
        EndIf
        $hSubKey = _WinAPI_RegOpenKey($hKey, $sKey & '\' & $sData & '\ShellNew', $KEY_READ)
        If @error Then
            ContinueLoop
        EndIf
    EndIf

    If (_WinAPI_RegQueryValue($hSubKey, 'NullFile', $tData)) Or (_WinAPI_RegQueryValue($hSubKey, 'Command', $tData)) Or (_WinAPI_RegQueryValue($hSubKey, 'FileName', $tData)) Or (_WinAPI_RegQueryValue($hSubKey, 'ItemName', $tData)) Then
        $sList1 &= StringRegExpReplace('HKEY_CLASSES_ROOT\' & $sKey & '\' & $sData, '\\*\Z', '') & '\ShellNew' & '|'
	    $sList2 &= $sKey & '|'
	EndIf
    _WinAPI_RegCloseKey($hSubKey)
WEnd
    _WinAPI_RegCloseKey($hKey)

    $aList1 = StringSplit(StringTrimRight($sList1, 1), '|', 2)
    $aList2 = StringSplit(StringTrimRight($sList2, 1), '|', 2)

    Dim $aCreateNew [UBound($aList2)][2]
  For $n = 0 To UBound($aList2) - 1
    $aCreateNew [$n][0]=$aList2[$n]
	$aCreateNew [$n][1]=$aList1[$n]
  Next
    _GUICtrlListView_AddArray($ListView_New, $aCreateNew)
EndFunc

Func _SelectAllNew() ; Выделить Все
	_GUICtrlListView_SetItemChecked($ListView_New, -1)
EndFunc

Func _UnSelectAllNew() ; Отменить
    _GUICtrlListView_SetItemChecked($ListView_New, -1, False)
EndFunc

Func _CleanNew()  ; Удалить
	For $p =1 To _GUICtrlListView_GetItemCount($ListView_New)
		If _GUICtrlListView_GetItemChecked($ListView_New, $p)=1 Then
			RegDelete(_GUICtrlListView_GetItemText($ListView_New, $p, 1))
		Endif
	Next
	_GUICtrlListView_DeleteAllItems($ListView_New)
	_ArCreateNew()
EndFunc

Func _RefreshNew() ; Обновить
	  GUICtrlSetState($Button_RefreshNew, $GUI_DISABLE)
	 _GUICtrlListView_DeleteAllItems($ListView_New)
	_ArCreateNew()
	sleep(1000)
	GUICtrlSetState($Button_RefreshNew, $GUI_ENABLE)
EndFunc


Скрипт не отрабатывает при попытке обновить информацию (кнопка "Обновить"+ в кнопке "Удалить" тоже есть функция обновления) в окне вывода ListViewNew, т.е. при удалении того/иного элемента (item) информация в окне обновляется только после перезагрузке всего скрипта....

PS Система XP SP3, autoit 3 +

-------
мы рождены, чтоб сказку сделать былью


Отправлено: 11:47, 19-10-2010

 

Ветеран


Сообщения: 903
Благодарности: 161

Профиль | Отправить PM | Цитировать


Все оказалось просто до безобразия. Надо было просто переместить декларирование нескольких переменных непосредственно в функцию. Переменные:
Global $sList1 ='', $sList2 ='', $Count = 1

Т.о. работающий код:
читать дальше »
Код: Выделить весь код
#include <ButtonConstants.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#Include <WinAPIEx.au3>

Global $hKey, $sKey, $hSubKey, $sData, $tData, $aCreateNew, $aList1, $aList2, 
Dim $aKey[1]
Global $hKeySR, $hKeyRR

Opt("GUIOnEventMode", 1)


#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate('Редактирование меню "Создать"', 505, 355, 236, 233)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
$Group_Delete = GUICtrlCreateGroup("Удалить из меню", 8, 8, 489, 201)
$ListView_New = GUICtrlGetHandle(GUICtrlCreateListView("Расширение|Путь к ShellNew...", 16, 26, 377, 172, -1, BitOR($WS_EX_CLIENTEDGE, $LVS_EX_CHECKBOXES, $LVS_EX_FULLROWSELECT)))
_GUICtrlListView_SetColumnWidth(-1, 0, 80)
_GUICtrlListView_SetColumnWidth(-1, 1, 272)
$Button_SelectAllNew = GUICtrlCreateButton("Выделить Все", 400, 26, 89, 39, BitOR($BS_MULTILINE,$WS_GROUP))
GUICtrlSetOnEvent(-1, '_SelectAllNew')
$Button_UnSelectAllNew = GUICtrlCreateButton("Отменить", 400, 78, 89, 39, BitOR($BS_MULTILINE,$WS_GROUP))
GUICtrlSetOnEvent(-1, '_UnSelectAllNew')
$Button_CleanNew = GUICtrlCreateButton("Удалить", 400, 160, 89, 39, BitOR($BS_MULTILINE,$WS_GROUP))
GUICtrlSetOnEvent(-1, '_CleanNew')
$Button_RefreshNew = GUICtrlCreateButton("Обновить", 400, 305, 89, 39, BitOR($BS_MULTILINE,$WS_GROUP))
GUICtrlSetOnEvent(-1, '_RefreshNew')

#EndRegion ### END Koda GUI section ###
_ArCreateNew()

GUISetState()


While 1
    Sleep(100)
WEnd


Func CLOSEClicked()
   Exit
EndFunc


Func _ArCreateNew()
Local $sList1 ='', $sList2 ='', $Count = 1
$tData = DllStructCreate('wchar[260]')
$hKey = _WinAPI_RegOpenKey($HKEY_CLASSES_ROOT, '', $KEY_READ)
While 1
    $sData = ''

    $sKey = _WinAPI_RegEnumKey($hKey, $Count)
    If @error Then
        ExitLoop
    EndIf
    $Count += 1

    $hSubKey = _WinAPI_RegOpenKey($hKey, $sKey & '\ShellNew', $KEY_READ)
    If @error Then
        If StringLeft($sKey, 1) <> '.' Then
            ContinueLoop
        EndIf
        $hSubKey = _WinAPI_RegOpenKey($hKey, $sKey, $KEY_READ)
        If @error Then
            ContinueLoop
        EndIf
        If _WinAPI_RegQueryValue($hSubKey, '', $tData) Then
            $sData = DllStructGetData($tData, 1)
        Else
            $sData = ''
        EndIf
        _WinAPI_RegCloseKey($hSubKey)
        If Not $sData Then
            ContinueLoop
        EndIf
        $hSubKey = _WinAPI_RegOpenKey($hKey, $sKey & '\' & $sData & '\ShellNew', $KEY_READ)
        If @error Then
            ContinueLoop
        EndIf
    EndIf

    If (_WinAPI_RegQueryValue($hSubKey, 'NullFile', $tData)) Or (_WinAPI_RegQueryValue($hSubKey, 'Command', $tData)) Or (_WinAPI_RegQueryValue($hSubKey, 'FileName', $tData)) Or (_WinAPI_RegQueryValue($hSubKey, 'ItemName', $tData)) Then
        $sList1 &= StringRegExpReplace('HKEY_CLASSES_ROOT\' & $sKey & '\' & $sData, '\\*\Z', '') & '\ShellNew' & '|'
        $sList2 &= $sKey & '|'
    EndIf
    _WinAPI_RegCloseKey($hSubKey)
WEnd
    _WinAPI_RegCloseKey($hKey)

    $aList1 = StringSplit(StringTrimRight($sList1, 1), '|', 2)
    $aList2 = StringSplit(StringTrimRight($sList2, 1), '|', 2)

    Dim $aCreateNew [UBound($aList2)][2]
  For $n = 0 To UBound($aList2) - 1
    $aCreateNew [$n][0]=$aList2[$n]
    $aCreateNew [$n][1]=$aList1[$n]
  Next
    _GUICtrlListView_AddArray($ListView_New, $aCreateNew)
EndFunc

Func _SelectAllNew() ; Выделить Все
    _GUICtrlListView_SetItemChecked($ListView_New, -1)
EndFunc

Func _UnSelectAllNew() ; Отменить
    _GUICtrlListView_SetItemChecked($ListView_New, -1, False)
EndFunc

Func _CleanNew()  ; Удалить
    For $p =1 To _GUICtrlListView_GetItemCount($ListView_New)
        If _GUICtrlListView_GetItemChecked($ListView_New, $p)=1 Then
            RegDelete(_GUICtrlListView_GetItemText($ListView_New, $p, 1))
        Endif
    Next
    _GUICtrlListView_DeleteAllItems($ListView_New)
    _ArCreateNew()
EndFunc

Func _RefreshNew() ; Обновить
      GUICtrlSetState($Button_RefreshNew, $GUI_DISABLE)
     _GUICtrlListView_DeleteAllItems($ListView_New)
    _ArCreateNew()
    sleep(1000)
    GUICtrlSetState($Button_RefreshNew, $GUI_ENABLE)
EndFunc

-------
мы рождены, чтоб сказку сделать былью


Отправлено: 15:30, 19-10-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Не отрабатывает функция обновления скрипта

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Некоректно отрабатывает функция создания ListView из файла-источника saavaage AutoIt 1 06-10-2010 15:21
[решено] Не отрабатывает кнопка "Обновить" у скрипта saavaage AutoIt 3 09-09-2010 23:27
Как отрабатывает setupldr.bin ??? vol_k Автоматическая установка Windows 2000/XP/2003 17 11-01-2010 10:21
Доступ - Не отрабатывает перенаправление папок на клиентской Vista snake-as Microsoft Windows NT/2000/2003 7 10-09-2008 03:26
Не отрабатывает одна прога из старт-ап скрипта Dirk Diggler Microsoft Windows NT/2000/2003 4 08-06-2007 08:32




 
Переход