Что нового

как получить список автозагрузки

fobos13

Новичок
Сообщения
2
Репутация
1
Не нашел на форуме похожей темы, может плохо искал... В справке похожего или аналогичного нет. Как быть? Стандартные методы RegRead не имею догадок как заставить работать.
Код:
For $i = 1 to 100
   $sKey = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", $i)
   if @error <> 0 Then ExitLoop
   $sValue = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", $sKey)
   MsgBox(4096, "Value Name #" & $i, $sKey & @CRLF & $sValue)
Next


P.S. нашел все-таки и подправил под нужды свои, только не все ключи сканирует, но это сделаю сам. Если есть мысли/наработки буду рад 8)
 

AZJIO

Меценат
Меценат
Сообщения
2,903
Репутация
1,200
Код:
Local $AutoStart
$AutoStart &= '------HKLM------'& @CRLF& @CRLF
$AutoStart &= _ReadRegistry("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run")
$AutoStart &= @CRLF&'------HKCU------'& @CRLF& @CRLF
$AutoStart &= _ReadRegistry("HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run")
MsgBox(0, 'Сообщение', $AutoStart)

Func _ReadRegistry($key) ; чтение автозагрузки реестра
	Local $aPathexe, $AutoStart, $i, $Pathexe1, $ValName, $Value
	$i = 0
	While 1
		$i += 1
		$ValName = RegEnumVal($key, $i)
		If @error Then ExitLoop
		$Value = RegRead($key, $ValName)
		If @error Then ContinueLoop
		$aPathexe = StringRegExp($Value, "(?i)(^.*)exe(.*)$", 3)
		If @error Then ContinueLoop
		$Pathexe1 = StringReplace($aPathexe[0], '"', '')
		If StringInStr($Pathexe1, '\') = 0 Then
			If FileExists(@SystemDir & '\' & $Pathexe1 & 'exe') Then $Pathexe1 = @SystemDir & '\' & $Pathexe1
		EndIf
		If FileExists($Pathexe1 & 'exe') Then $AutoStart &= $Pathexe1 & 'exe' & @CRLF
	WEnd
	Return $AutoStart
EndFunc
 

sngr

AutoIT Гуру
Сообщения
1,015
Репутация
411
Код:
$obj = ObjGet("WinMgmts:\\.\root\cimv2:Win32_StartupCommand")
$res=''
For $o In $obj.instances_
$res&=$o.description&' = '&$o.user&' = '&$o.location&@CRLF
Next
MsgBox(0,'',$res)
 

AZJIO

Меценат
Меценат
Сообщения
2,903
Репутация
1,200
Код:
#include <File.au3>
Local $AutoStart
$AutoStart &= '------Все------'& @CRLF& @CRLF
$AutoStart &= _AutoStartLnk(@StartupCommonDir)
$AutoStart &= @CRLF&'------Юзер------'& @CRLF& @CRLF
$AutoStart &= _AutoStartLnk(@StartupDir)
MsgBox(0, 'Сообщение', $AutoStart)

Func _AutoStartLnk($Path) ; чтение автозагрузки ярлыков
	Local $aLNK, $FileList, $AutoPath
	$FileList = _FileListToArray($Path, '*.lnk', 1)
	If @error Then Return SetError(1, 0, '')
	For $i = 1 To $FileList[0]
		$aLNK = FileGetShortcut($Path&'\'&$FileList[$i])
		; If @error Then ContinueLoop
		If FileExists($aLNK[0]) Then $AutoPath &= $aLNK[0] & @CRLF
	Next
	Return $AutoPath
EndFunc
 
Автор
F

fobos13

Новичок
Сообщения
2
Репутация
1
Отличные примеры! Большое спасибо! :ok:


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

Выявились неточности (у меня, на моем ПК) касательно следующего кода:

Код:
Local $aPathexe, $AutoStart, $i, $Pathexe1, $ValName, $Value
Local $key = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"

$i = 0
While 1
        $i += 1

        $ValName = RegEnumVal($key, $i)
        If @error Then ExitLoop

        $Value = RegRead($key, $ValName)
        If @error Then ContinueLoop

        $aPathexe = StringRegExp($Value, "(?i)(^.*)exe(.*)$", 3)
        If @error Then ContinueLoop

        $Pathexe1 = StringReplace($aPathexe[0], '"', '')

        If StringInStr($Pathexe1, '\') = 0 Then
           If FileExists(@SystemDir & '\' & $Pathexe1 & 'exe') Then $Pathexe1 = @SystemDir & '\' & $Pathexe1
EndIf

If FileExists($Pathexe1 & 'exe') Then $AutoStart = $Pathexe1 & 'exe' & @CRLF
MsgBox(4096, "Value Name #" & $i, $ValName & @CRLF & $AutoStart)
WEnd


Не читает (просто пропускает) вот такой параметр и значение в реестре :scratch:

AsioReg = REGSVR32 /S CTASIO.DLL

Мое мнение что-то не то в конструкции:

Код:
StringRegExp($Value, "(?i)(^.*)exe(.*)$", 3)


Не разобрался пока еще с шаблонами StringRegExp :stars:

Есть мысли по данному поводу?
 
Верх