Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def excelWindowObjectFromWindow(windowHandle):
try:
pDispatch=oleacc.AccessibleObjectFromWindow(windowHandle,winUser.OBJID_NATIVEOM,interface=comtypes.automation.IDispatch)
except (COMError,WindowsError):
return None
return comtypes.client.dynamic.Dispatch(pDispatch)
"""Get an active COM object, handling privilege issues.
This is similar to comtypes.client.GetActiveObject
except that it can retrieve objects from normal processes when NVDA is running with uiAccess.
"""
if appModule:
if not appModule.helperLocalBindingHandle:
raise ValueError("appModule does not have a binding handle")
import NVDAHelper
p=ctypes.POINTER(comtypes.IUnknown)()
res=NVDAHelper.localLib.nvdaInProcUtils_getActiveObject(appModule.helperLocalBindingHandle,progid,ctypes.byref(p))
if res!=0:
raise ctypes.WinError(res)
if not p:
raise RuntimeError("NULL IUnknown pointer")
if dynamic:
return comtypes.client.dynamic.Dispatch(p.QueryInterface(IDispatch))
else:
return comtypes.client.GetBestInterface(p)
try:
return comtypes.client.GetActiveObject(progid, dynamic=dynamic)
except WindowsError as e:
if e.winerror not in (MK_E_UNAVAILABLE, CO_E_CLASSSTRING):
# This isn't related to privileges.
raise
p = subprocess.Popen((config.SLAVE_FILENAME, "comGetActiveObject", progid, "%d" % dynamic),
stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
try:
try:
lres = int(p.stdout.readline())
except ValueError:
raise RuntimeError("Helper process unable to get object; see log for details")
o = oleacc.ObjectFromLresult(lres, 0,
def _getPpObjectModelFromWindow(self,windowHandle):
"""
Fetches the Powerpoint object model from a given window.
"""
try:
pDispatch=oleacc.AccessibleObjectFromWindow(windowHandle,winUser.OBJID_NATIVEOM,interface=comtypes.automation.IDispatch)
return comtypes.client.dynamic.Dispatch(pDispatch)
except:
log.debugWarning("Could not get MS Powerpoint object model",exc_info=True)
return None
# Only one interface implemented, use that (even if
# not marked as default).
index = 0
href = tinfo.GetRefTypeOfImplType(index)
tinfo = tinfo.GetRefTypeInfo(href)
except comtypes.COMError:
logger.debug("Does NOT implement IProvideClassInfo/IProvideClassInfo2")
try:
pdisp = punk.QueryInterface(comtypes.automation.IDispatch)
except comtypes.COMError:
logger.debug("No Dispatch interface: %s", punk)
return punk
try:
tinfo = pdisp.GetTypeInfo(0)
except comtypes.COMError:
pdisp = comtypes.client.dynamic.Dispatch(pdisp)
logger.debug("IDispatch.GetTypeInfo(0) failed: %s" % pdisp)
return pdisp
typeattr = tinfo.GetTypeAttr()
logger.debug("Default interface is %s", typeattr.guid)
try:
punk.QueryInterface(comtypes.IUnknown, typeattr.guid)
except comtypes.COMError:
logger.debug("Does not implement default interface, returning dynamic object")
return comtypes.client.dynamic.Dispatch(punk)
itf_name = tinfo.GetDocumentation(-1)[0] # interface name
tlib = tinfo.GetContainingTypeLib()[0] # typelib
# import the wrapper, generating it on demand
mod = GetModule(tlib)
# Python interface class
def CreateInstance(self, punkouter=None, interface=None, dynamic=False):
if dynamic:
if interface is not None:
raise ValueError("interface and dynamic are mutually exclusive")
realInterface = comtypes.automation.IDispatch
elif interface is None:
realInterface = comtypes.IUnknown
else:
realInterface = interface
obj = ctypes.POINTER(realInterface)()
self.__com_CreateInstance(punkouter, realInterface._iid_, ctypes.byref(obj))
if dynamic:
return comtypes.client.dynamic.Dispatch(obj)
elif interface is None:
# An interface was not specified, so return the best.
return comtypes.client.GetBestInterface(obj)
# An interface was specified and obj is already that interface.
return obj
except comtypes.COMError:
logger.debug("No Dispatch interface: %s", punk)
return punk
try:
tinfo = pdisp.GetTypeInfo(0)
except comtypes.COMError:
pdisp = comtypes.client.dynamic.Dispatch(pdisp)
logger.debug("IDispatch.GetTypeInfo(0) failed: %s" % pdisp)
return pdisp
typeattr = tinfo.GetTypeAttr()
logger.debug("Default interface is %s", typeattr.guid)
try:
punk.QueryInterface(comtypes.IUnknown, typeattr.guid)
except comtypes.COMError:
logger.debug("Does not implement default interface, returning dynamic object")
return comtypes.client.dynamic.Dispatch(punk)
itf_name = tinfo.GetDocumentation(-1)[0] # interface name
tlib = tinfo.GetContainingTypeLib()[0] # typelib
# import the wrapper, generating it on demand
mod = GetModule(tlib)
# Python interface class
interface = getattr(mod, itf_name)
logger.debug("Implements default interface from typeinfo %s", interface)
# QI for this interface
# XXX
# What to do if this fails?
# In the following example the engine.Eval() call returns
# such an object.
#
# engine = CreateObject("MsScriptControl.ScriptControl")