def CreateObject(progid, # which object to create clsctx=None, # how to create the object machine=None, # where to create the object interface=None): # the interface we want """Create a COM object from 'progid', and try to QueryInterface() it to the most useful interface, generating typelib support on demand. A pointer to this interface is returned. 'progid' may be a string like "InternetExplorer.Application", a string specifying a clsid, a GUID instance, or an object with a _clsid_ attribute which should be any of the above. 'clsctx' specifies how to create the object, use the CLSCTX_... constants. 'machine' allows to specify a remote machine to create the object on. You can also later request to receive events with GetEvents(). """ clsid = comtypes.GUID.from_progid(progid) logger.debug("%s -> %s", progid, clsid) if interface is None: interface = getattr(progid, "_com_interfaces_", [None])[0] if machine is None: logger.debug("CoCreateInstance(%s, clsctx=%s, interface=%s)", clsid, clsctx, interface) obj = comtypes.CoCreateInstance(clsid, clsctx=clsctx, interface=interface) else: logger.debug("CoCreateInstanceEx(%s, clsctx=%s, interface=%s, machine=%s)", clsid, clsctx, interface, machine) obj = comtypes.CoCreateInstanceEx(clsid, clsctx=clsctx, interface=interface, machine=machine) return _manage(obj, clsid, interface=interface)
def CreateObject( progid, # which object to create clsctx=None, # how to create the object machine=None, # where to create the object interface=None, # the interface we want dynamic=False, # use dynamic dispatch pServerInfo=None): # server info struct for remoting """Create a COM object from 'progid', and try to QueryInterface() it to the most useful interface, generating typelib support on demand. A pointer to this interface is returned. 'progid' may be a string like "InternetExplorer.Application", a string specifying a clsid, a GUID instance, or an object with a _clsid_ attribute which should be any of the above. 'clsctx' specifies how to create the object, use the CLSCTX_... constants. 'machine' allows to specify a remote machine to create the object on. 'interface' allows to force a certain interface 'dynamic=True' will return a dynamic dispatch object 'pServerInfo', if used, must be a pointer to a comtypes.COSERVERINFO instance This supercedes 'machine'. You can also later request to receive events with GetEvents(). """ clsid = comtypes.GUID.from_progid(progid) logger.debug("%s -> %s", progid, clsid) if dynamic: if interface: raise ValueError("interface and dynamic are mutually exclusive") interface = comtypes.automation.IDispatch elif interface is None: interface = getattr(progid, "_com_interfaces_", [None])[0] if machine is None and pServerInfo is None: logger.debug("CoCreateInstance(%s, clsctx=%s, interface=%s)", clsid, clsctx, interface) obj = comtypes.CoCreateInstance(clsid, clsctx=clsctx, interface=interface) else: logger.debug( "CoCreateInstanceEx(%s, clsctx=%s, interface=%s, machine=%s,\ pServerInfo=%s)", clsid, clsctx, interface, machine, pServerInfo) if machine is not None and pServerInfo is not None: msg = "You can notset both the machine name and server info." raise ValueError(msg) obj = comtypes.CoCreateInstanceEx(clsid, clsctx=clsctx, interface=interface, machine=machine, pServerInfo=pServerInfo) if dynamic: return comtypes.client.dynamic.Dispatch(obj) return _manage(obj, clsid, interface=interface)