/// <summary> /// Look up the preview handler associated with the file extension /// </summary> /// <returns></returns> private PreviewHandlerInfo LookupPreviewHandler() { RegistrationData data = PreviewHandlerRegistryAccessor.LoadRegistrationInformation(); var extension = data.Extensions.FirstOrDefault(x => HasExtension(_filePath, x.Extension) && (x.Handler != null)); return(extension?.Handler); }
/// <summary> /// 1) Look up the preview handler associated with the file extension /// 2) Create an instance of the handler using its CLSID and reflection /// 3) Check if it is a file or stream handler /// 4) Initialize with File or Stream using Initialize from the appropriate interface /// 5) Call SetWindow passing in a handle to this control and the bounds of the control /// 6) Call DoPreview /// </summary> private void GeneratePreview() { lblMessage.Visible = false; if (_comInstance != null) { ((IPreviewHandler)_comInstance).Unload(); } RECT r; r.top = 0; r.bottom = this.Height; r.left = 0; r.right = this.Width; RegistrationData data = PreviewHandlerRegistryAccessor.LoadRegistrationInformation(); PreviewHandlerInfo handler = null; foreach (ExtensionInfo ei in data.Extensions) { if (_filePath.ToUpper().EndsWith(ei.Extension.ToUpper())) { handler = ei.Handler; if (handler != null) { break; } } } if (handler == null) { lblMessage.Visible = true; lblMessage.Text = "No Preview Available"; return; } Type comType = Type.GetTypeFromCLSID(new Guid(handler.ID)); try { // Create an instance of the preview handler _comInstance = Activator.CreateInstance(comType); // Check if it is a stream or file handler if (_comInstance is IInitializeWithFile) { ((IInitializeWithFile)_comInstance).Initialize(_filePath, 0); } else if (_comInstance is IInitializeWithStream) { if (File.Exists(_filePath)) { StreamWrapper stream = new StreamWrapper(File.Open(_filePath, FileMode.Open)); ((C4F.DevKit.PreviewHandler.PreviewHandlerFramework.IInitializeWithStream)_comInstance).Initialize(stream, 0); } else { throw new Exception("File not found"); } } ((IPreviewHandler)_comInstance).SetWindow(this.Handle, ref r); ((IPreviewHandler)_comInstance).DoPreview(); } catch (Exception ex) { _comInstance = null; lblMessage.Visible = true; lblMessage.Text = "Preview Generation Failed - " + ex.Message; } }