protected override bool TryCreateViewer(FileInfo fileInfo, out HandlerResult?handlerResult) { var pcchOut = 0u; var riid = typeof(IPreviewHandler).GUID.ToString("B"); if (PInvoke.AssocQueryString(ASSOCF.ASSOCF_INIT_DEFAULTTOSTAR, ASSOCSTR.ASSOCSTR_SHELLEXTENSION, fileInfo.Extension, riid, Span <char> .Empty, ref pcchOut).Failed) { handlerResult = default; return(false); } var shellFileControl = new ShellFileControl(); using (shellFileControl.Initialize()) { shellFileControl.Loaded += (_, _) => shellFileControl.Open(fileInfo); } handlerResult = new HandlerResult { Viewer = shellFileControl }; return(true); }
// ReSharper disable once InconsistentNaming private static bool TryGetPreviewHandlerCLSID(FileInfo fileInfo, out Guid clsid) { var pcchOut = 40u; Span <char> pszOut = stackalloc char[(int)pcchOut]; var riid = typeof(IPreviewHandler).GUID.ToString("B"); if (PInvoke.AssocQueryString(ASSOCF.ASSOCF_INIT_DEFAULTTOSTAR, ASSOCSTR.ASSOCSTR_SHELLEXTENSION, fileInfo.Extension, riid, pszOut, ref pcchOut).Failed) { clsid = Guid.Empty; return(false); } clsid = Guid.Parse(pszOut[..(int)(pcchOut - 1)]);