#include-once OnAutoItExitRegister("__RegisterActiveObject_OnAutoItExit") Global $pdwRegister = 0 ; #FUNCTION# ============================================================================= ; Name ..........: __RegisterActiveObject ; Parameters ....: $o_Object - Object ; $o_DCLSID - to return correct CLSID ; $dwFlags - ACTIVEOBJECT_STRONG / ACTIVEOBJECT_WEAK [optional] ; Return values..: Object ; Author ........: jugador ; ======================================================================================== Func __RegisterActiveObject($o_Object, ByRef $o_DCLSID, $dwFlags = 0) If $o_Object = Default Then $o_Object = ObjCreate( "Scripting.Dictionary" ) If Not IsObj($o_Object) Then Return SetError(1) $o_DCLSID = ((ObjName($o_Object, 6) = '') ? ObjName($o_Object, 7) : ObjName($o_Object, 6)) If $o_DCLSID = '' Then Return SetError(2) Local $tCLSID = DllStructCreate( "dword;word;word;byte[8]" ) Local $HRESULT = DllCall( "ole32.dll", "long", "CLSIDFromString", "wstr", $o_DCLSID, "struct*", $tCLSID ) If @error Or $HRESULT[0] <> 0 Then Return SetError(3) Local $punk = ptr($o_Object) Local $ACTIVEOBJECT_STRONG = 0 Local $ACTIVEOBJECT_WEAK = 1 If $dwFlags <> $ACTIVEOBJECT_STRONG Then $dwFlags = $ACTIVEOBJECT_WEAK Local $HRESULT = DllCall("OleAut32.dll", "long", "RegisterActiveObject", "ptr", $punk, "struct*", $tCLSID, "DWORD", $dwFlags, "DWORD*", 0) If @error Or $HRESULT[0] <> 0 Then Return SetError(4) $pdwRegister = $HRESULT[4] Local $_Re_ActiveObject = ObjGet("", $o_DCLSID) If Not IsObj($_Re_ActiveObject) Then Return SetError(5) Return $_Re_ActiveObject EndFunc ; #FUNCTION# ============================================================================= ; Name ..........: __RevokeActiveObject ; Author ........: jugador ; ======================================================================================== Func __RevokeActiveObject() If $pdwRegister = 0 Then Return Local $HRESULT = DllCall("OleAut32.dll", "long", "RevokeActiveObject", "DWORD", $pdwRegister, "ptr", 0) If @error Or $HRESULT[0] <> 0 Then Return SetError(1) $pdwRegister = 0 EndFunc ; #FUNCTION# ============================================================================= ; Name ..........: __RegisterActiveObject_OnAutoItExit ; ======================================================================================== Func __RegisterActiveObject_OnAutoItExit() __RevokeActiveObject() Exit EndFunc