Что нового

[Реестр] Сброс паролей пользователей Windows

glax24

Знающий
Сообщения
72
Репутация
14
AutoIt: 3.3.8.1
Версия: 0.1.0.12

Категория: Автоматизация, Система / Реестр

Описание: Программа для сброса паролей пользователей Windows из под LiveCD.

Возможности:
Сброс паролей пользователей Windows из под LiveCD

Код/Пример:
Исходники: ResetPassword_src.7z

Файл: ResetPassword.7z

Снимок:


История версий:
v.0.1.0.7 Первый релиз
v.0.1.0.10 - Исправлена ошибка при повторном выборе каталога Windows
v.0.1.0.12 - Подсветка красным пользователей с паролем

Источник: autoit-script.ru
Автор(ы): glax24
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
протестил. есть замечание.
при повторном выборе системной папки программа забивает в свое окно те же имена. надо исключить либо повтор путей либо очищать список имен, либо ограничить однократным выбором дериктории.
тут же выплыл косяк: выбрал два раза одну и ту же системную папку. появились два списка имен. естественно они похожи. выбираю имя жму сброс и
Код:
Error: Array variable has incorrect number of subscripts or subscript dimension range exceeded
скрипт вывалился.
запустил повторно прогу, загрузил список пользователей. выбрал пользователя, сделал сброс пароля. все получилось. тут я тебя поздравляю. по большому - прога работает. делал сброс из-под Live CD. система, в которой сбрасывал пароль пользователя - Windows 7.
так что, осталось исправить указанный баг и все. по крайней мере других пока не заметил.
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
  • Очистить ListView перед добавлением новых.
Код:
GUICtrlSendMsg($ListViewUsers, $LVM_DELETEALLITEMS, 0, 0)


  • Тексты в MsgBox и в строке состояния повторяется, почему бы не сделать временную переменную?
Код:
MsgBox(16, "RegRead", "Не корректные данные структуры V.", 0, $hForm)
GUICtrlSetData($LabelInfo, "Не корректные данные структуры V.")

заменить на
Код:
$tmp = "Не корректные данные структуры V."
MsgBox(16, "RegRead", $tmp, 0, $hForm)
GUICtrlSetData($LabelInfo, $tmp)


  • Главное меню выглядит излишним. Пункт "Выход" - он же крестик, пункт выбора папки сделать кнопкой, кликов будет меньше.

  • Выравнивание
Код:
;Выравнивание столбцов по тексту
    For $i = 0 To $aUsersRID[0][0] - 1
        $aItem = _GUICtrlListView_GetItem($ListViewUsers, 0, $i)
        _GUICtrlListView_SetColumnWidth($ListViewUsers, $i, $LVSCW_AUTOSIZE)
    Next

Заменить на
Код:
; Колонка то одна, с индексом 0, поэтому зачем цикл?
	GUICtrlSendMsg($ListViewUsers, $LVM_SETCOLUMNWIDTH, 0, $LVSCW_AUTOSIZE)
	GUICtrlSendMsg($ListViewUsers, $LVM_SETCOLUMNWIDTH, 0, $LVSCW_AUTOSIZE_USEHEADER)


  • Почему $hForm не объявленная переменная, а $iFileMenu объявлена.

  • Зачем включено столько #include? У меня запускается с 3-мя
Код:
#include <Reg.au3>
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>


  • Windows содержит 5 пользователей, значит высота списка превышает в 2 раза число возможных пользователей.


  • Можно использовать только нативные функции.
Код:
For $i = 1 To $aUsersRID[0][0]
		$sUserName = $aUsersRID[$i][0]
		_GUICtrlListView_AddItem($ListViewUsers, $sUserName)
	Next

заменить на
Код:
For $i = 1 To $aUsersRID[0][0]
		GUICtrlCreateListViewItem($aUsersRID[$i][0], $ListViewUsers)
	Next


  • В функции SetSystemRoot используется WinSetOnTop, но при отмене выбора, он кстати может быть в связи с пробой на текущей системе, происходит Return, и окно остаётся "Поверх всех окон". И для чего это нужно? Разве выбор требует поверх всех окон?
 
Автор
G

glax24

Знающий
Сообщения
72
Репутация
14
а как тогда получить индекс выделенного пункта в листе?
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
glax24 сказал(а):
как ... получить индекс выделенного пункта в листе?
Если вы про ListView то:
Код:
_GUICtrlListView_GetSelectedIndices



Добавлено:
Сообщение автоматически объединено:

и где кстати взять UDF reg.au3
 
Автор
G

glax24

Знающий
Сообщения
72
Репутация
14
сейчас эта функция и используется но если речь идет про нативные функции то может есть такая.
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Автор
G

glax24

Знающий
Сообщения
72
Репутация
14
индекс нужен для обращения к массиву для получения rid. а считывать имя и затем искать его в массиве не очень.
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
glax24
Ну вот так написано в UDF. В принципе тот же поиск, только внешне ты его не видишь. Ну там на самом деле посложней, я для нативного варианта вырезал.
Код:
$idx = -1
$iCount =GUICtrlSendMsg($ListView, $LVM_GETITEMCOUNT, 0, 0)
For $i = 0 To $iCount - 1
	$iRet = GUICtrlSendMsg($ListView, $LVM_GETITEMSTATE, $i, $LVIS_SELECTED)
	If $iRet Then
		$idx = $i
		ExitLoop
	EndIf
Next
MsgBox(0, 'Сообщение', $idx)



А ещё я думаю надо пометить как то аккаунты с паролем. И когда пароль сброшен пометить как сброшенный. Например иконкой или цветом.
 
Автор
G

glax24

Знающий
Сообщения
72
Репутация
14
на счет как то пометить я тоже думал, сегодня выложу с исправленной ошибкой и твоими пожеланиями. с цветом сделаю позже.


Добавлено:
Сообщение автоматически объединено:

Обновил
 
Автор
G

glax24

Знающий
Сообщения
72
Репутация
14
Обновил. Подсветка красным пользователей с паролем
 
Верх