private void Build() { // Basic data _data = new UIAutomationPatternInfo { pProgrammaticName = _programmaticName, guid = _patternGuid, clientInterfaceId = _clientInterfaceId, providerInterfaceId = _providerInterfaceId, pPatternHandler = _patternHandler, cMethods = (uint)_methods.Count }; // Build the list of methods if (_data.cMethods > 0) { _data.pMethods = Marshal.AllocCoTaskMem((int)(_data.cMethods * Marshal.SizeOf(typeof(UIAutomationMethodInfo)))); var methodPointer = _data.pMethods; for (var i = 0; i < _data.cMethods; ++i) { Marshal.StructureToPtr(_methods[i].Data, methodPointer, false); methodPointer = (IntPtr)(methodPointer.ToInt64() + Marshal.SizeOf(typeof(UIAutomationMethodInfo))); } } else { _data.pMethods = IntPtr.Zero; } // Build the list of properties _data.cProperties = (uint)_properties.Count; if (_data.cProperties > 0) { _data.pProperties = Marshal.AllocCoTaskMem((int)(_data.cProperties * Marshal.SizeOf(typeof(UIAutomationPropertyInfo)))); var propertyPointer = _data.pProperties; for (var i = 0; i < _data.cProperties; ++i) { Marshal.StructureToPtr(_properties[i].Data, propertyPointer, false); propertyPointer = (IntPtr)(propertyPointer.ToInt64() + Marshal.SizeOf(typeof(UIAutomationPropertyInfo))); } } else { _data.pProperties = IntPtr.Zero; } // Build the list of events _data.cEvents = (uint)_events.Count; if (_data.cEvents > 0) { _data.pEvents = Marshal.AllocCoTaskMem((int)(_data.cEvents * Marshal.SizeOf(typeof(UIAutomationEventInfo)))); var eventPointer = _data.pEvents; for (var i = 0; i < _data.cEvents; ++i) { Marshal.StructureToPtr(_events[i].Data, eventPointer, false); eventPointer = (IntPtr)(eventPointer.ToInt64() + Marshal.SizeOf(typeof(UIAutomationEventInfo))); } } else { _data.pEvents = IntPtr.Zero; } _built = true; }
private void Build() { // Basic data _data = new UIAutomationPatternInfo { pProgrammaticName = _programmaticName, guid = _patternGuid, clientInterfaceId = _clientInterfaceId, providerInterfaceId = _providerInterfaceId, pPatternHandler = _patternHandler, cMethods = (uint) _methods.Count }; // Build the list of methods if (_data.cMethods > 0) { _data.pMethods = Marshal.AllocCoTaskMem((int) (_data.cMethods*Marshal.SizeOf(typeof (UIAutomationMethodInfo)))); var methodPointer = _data.pMethods; for (var i = 0; i < _data.cMethods; ++i) { Marshal.StructureToPtr(_methods[i].Data, methodPointer, false); methodPointer = (IntPtr) (methodPointer.ToInt64() + Marshal.SizeOf(typeof (UIAutomationMethodInfo))); } } else { _data.pMethods = IntPtr.Zero; } // Build the list of properties _data.cProperties = (uint) _properties.Count; if (_data.cProperties > 0) { _data.pProperties = Marshal.AllocCoTaskMem((int) (_data.cProperties*Marshal.SizeOf(typeof (UIAutomationPropertyInfo)))); var propertyPointer = _data.pProperties; for (var i = 0; i < _data.cProperties; ++i) { Marshal.StructureToPtr(_properties[i].Data, propertyPointer, false); propertyPointer = (IntPtr) (propertyPointer.ToInt64() + Marshal.SizeOf(typeof (UIAutomationPropertyInfo))); } } else { _data.pProperties = IntPtr.Zero; } // Build the list of events _data.cEvents = (uint) _events.Count; if (_data.cEvents > 0) { _data.pEvents = Marshal.AllocCoTaskMem((int) (_data.cEvents*Marshal.SizeOf(typeof (UIAutomationEventInfo)))); var eventPointer = _data.pEvents; for (var i = 0; i < _data.cEvents; ++i) { Marshal.StructureToPtr(_events[i].Data, eventPointer, false); eventPointer = (IntPtr) (eventPointer.ToInt64() + Marshal.SizeOf(typeof (UIAutomationEventInfo))); } } else { _data.pEvents = IntPtr.Zero; } _built = true; }