hallo community!
Ich benutze die Funktion _GetRegValues von BugFix .... leider hab ich ein Problem, welches ich einfach nicht reproduzieren konnte, ausser auf dem Rechner eines Freundes per Teamviewer.
Ich habe keine ahnung warum er dort immer wieder mit folgender fehlermeldung crashte:
http://puu.sh/2FDJJ.jpg (Error: Variable must be type object)
ich benötige tipps wie ich das ganze am glücklichsten abfange, da ich nicht erwarte, dass jemand einen fehler in dieser funktion bzw an dieser stelle ausmachen kann und andererseits auch keinen fehler beim
abfangen des fehlers machen möchte.
der Ursprung für dem Fehlermeldung liegt genau in der Zeile:
Local $oReg = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
hier benutze ich die Funktion um _GetRegValues aufzurufen:
[autoit]Func _add_to_autostart_Taskplaner()
$taskname = StringReplace(@ScriptFullPath,"\","")
$taskname = StringReplace($taskname,":","")
$taskname = _Crypt_HashData($taskname, $CALG_MD5)
$regkeys = _GetRegSubKeys("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks")
for $z = 0 to UBound($regkeys) -1
$regvalues = _GetRegValues("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks\"&$regkeys[$z])
$regentryfound = _ArraySearch($regvalues, "\"&$taskname)
if $regentryfound >= 0 Then Return 1
Next
$result000 = ShellExecute("schtasks.exe",'/create /sc ONLOGON /tn '&'"'&$taskname&'"'&' /rl HIGHEST /tr '&'"\"'&@ScriptFullPath&'\"',"","",@SW_HIDE)
EndFunc
;========================================================================================
; Function Name: _GetRegValues($HKEY)
; Description: Ermittelt alle Namen, Typen und Werte in einem gegebenen Schlüssel
; Parameter(s): $HKEY der Registryschlüssel
; Return Value(s): Erfolg Array[0] = Name
; Array[1] = Typ
; Array[2] = Wert
; Fehler Leerstring (Schlüssel existiert nicht oder ist ohne Einträge)
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;========================================================================================
Func _GetRegValues($HKEY)
Local $oMyError = ObjEvent("AutoIt.Error","MyErrFunc")
If StringInStr($HKEY, '\') Then
If StringRight($HKEY, 1) = '\' Then
$HKEY = StringTrimRight($HKEY, 1)
Local $strKeyPath = ''
Else
Local $strKeyPath = StringRight($HKEY, StringLen($HKEY)-StringInStr($HKEY, '\') )
$HKEY = StringLeft($HKEY, StringInStr($HKEY, '\')-1)
EndIf
Else
Local $strKeyPath = ''
EndIf
Select
Case $HKEY = "HKEY_LOCAL_MACHINE" Or $HKEY = "HKLM"
$HKEY = 0x80000002
Case $HKEY = "HKEY_USERS" Or $HKEY = "HKU"
$HKEY = 0x80000003
Case $HKEY = "HKEY_CURRENT_USER" Or $HKEY = "HKCU"
$HKEY = 0x80000001
Case $HKEY = "HKEY_CLASSES_ROOT" Or $HKEY = "HKCR"
$HKEY = 0x80000000
Case $HKEY = "HKEY_CURRENT_CONFIG" Or $HKEY = "HKCC"
$HKEY = 0x80000005
EndSelect
Local $oReg = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv") ;hier cracht es!
Local $arrValueNames, $arrValueTypes, $strValue
$oReg.EnumValues($HKEY, $strKeyPath, $arrValueNames, $arrValueTypes)
$OEvent = ObjEvent($oReg, "EnumValues")
If Not IsArray($arrValueNames) Then Return ''
Local $arOut[UBound($arrValueNames)][3]
For $i = 0 To UBound($arrValueNames) -1
$arOut[$i][0] = $arrValueNames[$i]
Switch $arrValueTypes[$i]
Case 1
$arOut[$i][1] = 'REG_SZ'
$oReg.GetStringValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
Case 2
$arOut[$i][1] = 'REG_EXPAND_SZ'
$oReg.GetExpandedStringValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
Case 3
$arOut[$i][1] = 'REG_BINARY'
$oReg.GetBinaryValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
Case 4
$arOut[$i][1] = 'REG_DWORD'
$oReg.GetStringValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
Case 7
$arOut[$i][1] = 'REG_MULTI_SZ'
$oReg.GetMultiStringValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
EndSwitch
$arOut[$i][2] = $strValue
Next
Return $arOut
EndFunc ;==>_GetRegValues
Func MyErrFunc()
Return
Endfunc