├── .appveyor.yml ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md └── workflows │ └── msbuild.yml ├── .gitignore ├── .gitmodules ├── Build ├── AppxManifest.xml ├── Assets │ ├── Branding │ │ ├── 1.png │ │ ├── 2.png │ │ ├── 3.png │ │ ├── 4.png │ │ ├── 5.png │ │ ├── 6.png │ │ └── 7.png │ ├── LargeTile.scale-100.png │ ├── LargeTile.scale-125.png │ ├── LargeTile.scale-150.png │ ├── LargeTile.scale-200.png │ ├── LargeTile.scale-400.png │ ├── SmallTile.scale-100.png │ ├── SmallTile.scale-125.png │ ├── SmallTile.scale-150.png │ ├── SmallTile.scale-200.png │ ├── SmallTile.scale-400.png │ ├── Square150x150Logo.scale-100.png │ ├── Square150x150Logo.scale-125.png │ ├── Square150x150Logo.scale-150.png │ ├── Square150x150Logo.scale-200.png │ ├── Square150x150Logo.scale-400.png │ ├── Square44x44Logo.altform-unplated_targetsize-16.png │ ├── Square44x44Logo.altform-unplated_targetsize-24.png │ ├── Square44x44Logo.altform-unplated_targetsize-256.png │ ├── Square44x44Logo.altform-unplated_targetsize-256.setup.png │ ├── Square44x44Logo.altform-unplated_targetsize-256.uninst.png │ ├── Square44x44Logo.altform-unplated_targetsize-32.png │ ├── Square44x44Logo.altform-unplated_targetsize-48.png │ ├── Square44x44Logo.scale-100.png │ ├── Square44x44Logo.scale-125.png │ ├── Square44x44Logo.scale-150.png │ ├── Square44x44Logo.scale-200.png │ ├── Square44x44Logo.scale-400.png │ ├── Square44x44Logo.targetsize-16.png │ ├── Square44x44Logo.targetsize-24.png │ ├── Square44x44Logo.targetsize-256.png │ ├── Square44x44Logo.targetsize-32.png │ ├── Square44x44Logo.targetsize-48.png │ ├── Wide310x150Logo.scale-100.png │ ├── Wide310x150Logo.scale-125.png │ ├── Wide310x150Logo.scale-150.png │ ├── Wide310x150Logo.scale-200.png │ ├── Wide310x150Logo.scale-400.png │ ├── storelogo.scale-100.png │ ├── storelogo.scale-125.png │ ├── storelogo.scale-150.png │ ├── storelogo.scale-200.png │ └── storelogo.scale-400.png ├── assetslayout.resfiles ├── micasetup.json ├── openssl-sign.cnf ├── priconfig.xml ├── sideload.crt ├── sideload.key └── sideload.pfx ├── CodeMaid.config ├── LICENSE-GPL.txt ├── PRIVACY.md ├── QuickLook.Installer ├── Product.wxs ├── QuickLook.Installer.wixproj └── gpl.rtf ├── QuickLook.Native ├── QuickLook.Native32 │ ├── DOpus.cpp │ ├── DOpus.h │ ├── DialogHook.cpp │ ├── DialogHook.h │ ├── DllExport.cpp │ ├── Everything.cpp │ ├── Everything.h │ ├── HelperMethods.cpp │ ├── HelperMethods.h │ ├── MultiCommander.cpp │ ├── MultiCommander.h │ ├── QuickLook.Native32.vcxproj │ ├── QuickLook.Native32.vcxproj.filters │ ├── Shell32.cpp │ ├── Shell32.h │ ├── WoW64HookHelper.cpp │ ├── WoW64HookHelper.h │ ├── dllmain.cpp │ ├── rapidxml.hpp │ ├── stdafx.cpp │ ├── stdafx.h │ └── targetver.h ├── QuickLook.Native64 │ ├── QuickLook.Native64.vcxproj │ └── QuickLook.Native64.vcxproj.filters └── QuickLook.WoW64HookHelper │ ├── QuickLook.WoW64HookHelper.cpp │ ├── QuickLook.WoW64HookHelper.h │ ├── QuickLook.WoW64HookHelper.vcxproj │ ├── QuickLook.WoW64HookHelper.vcxproj.filters │ ├── stdafx.cpp │ ├── stdafx.h │ └── targetver.h ├── QuickLook.Plugin ├── QuickLook.Plugin.AppViewer │ ├── ApkInfoPanel.xaml │ ├── ApkInfoPanel.xaml.cs │ ├── ApkPackageParser │ │ ├── ApkInfo.cs │ │ └── ApkParser.cs │ ├── AppxInfoPanel.xaml │ ├── AppxInfoPanel.xaml.cs │ ├── AppxPackageParser │ │ ├── AppxBundleReader.cs │ │ ├── AppxInfo.cs │ │ ├── AppxParser.cs │ │ └── AppxReader.cs │ ├── IAppInfoPanel.cs │ ├── IpaInfoPanel.xaml │ ├── IpaInfoPanel.xaml.cs │ ├── IpaPackageParser │ │ ├── IpaInfo.cs │ │ ├── IpaParser.cs │ │ ├── IpaReader.cs │ │ └── Plist.cs │ ├── MsiInfoPanel.xaml │ ├── MsiInfoPanel.xaml.cs │ ├── MsiPackageParser │ │ ├── MsiInfo.cs │ │ └── MsiParser.cs │ ├── Plugin.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── QuickLook.Plugin.AppViewer.csproj │ ├── Resources │ │ ├── android.png │ │ ├── ios.png │ │ └── uni-app.png │ ├── Translations.config │ ├── WgtInfoPanel.xaml │ ├── WgtInfoPanel.xaml.cs │ ├── WgtPackageParser │ │ ├── WgtInfo.cs │ │ └── WgtParser.cs │ └── WindowsThumbnailProvider.cs ├── QuickLook.Plugin.ArchiveViewer │ ├── ArchiveFileEntry.cs │ ├── ArchiveFileListView.xaml │ ├── ArchiveFileListView.xaml.cs │ ├── ArchiveInfoPanel.xaml │ ├── ArchiveInfoPanel.xaml.cs │ ├── ChardetReaderOptions.cs │ ├── Converters.cs │ ├── Extensions.cs │ ├── IconManager.cs │ ├── Plugin.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ └── QuickLook.Plugin.ArchiveViewer.csproj ├── QuickLook.Plugin.CLSIDViewer │ ├── CLSIDInfoPanel.xaml │ ├── CLSIDInfoPanel.xaml.cs │ ├── CLSIDRegister.cs │ ├── Plugin.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── QuickLook.Plugin.CLSIDViewer.csproj │ ├── RecycleBinPanel.xaml │ ├── RecycleBinPanel.xaml.cs │ ├── ThisPCPanel.xaml │ ├── ThisPCPanel.xaml.cs │ └── Translations.config ├── QuickLook.Plugin.CsvViewer │ ├── CsvViewerPanel.xaml │ ├── CsvViewerPanel.xaml.cs │ ├── Plugin.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── QuickLook.Plugin.CsvViewer.csproj │ └── app.config ├── QuickLook.Plugin.FontViewer │ ├── .gitattributes │ ├── FreeTypeApi.cs │ ├── FreeTypeDllMap.cs │ ├── Plugin.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── QuickLook.Plugin.FontViewer.csproj │ ├── Resources │ │ └── font2html.html │ └── Translations.config ├── QuickLook.Plugin.HtmlViewer │ ├── Helper.cs │ ├── NativeMethods │ │ └── ShlwApi.cs │ ├── Plugin.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── QuickLook.Plugin.HtmlViewer.csproj │ ├── Translations.config │ ├── WebpagePanel.cs │ ├── WebpagePanel.xaml │ └── WebpagePanel.xaml.cs ├── QuickLook.Plugin.ImageViewer │ ├── AnimatedImage │ │ ├── AnimatedImage.cs │ │ ├── AnimationProvider.cs │ │ └── Providers │ │ │ ├── APngProvider.cs │ │ │ ├── CursorProvider.cs │ │ │ ├── DcrawProvider.cs │ │ │ ├── GifProvider.cs │ │ │ ├── IcnsProvider.cs │ │ │ ├── ImageMagickProvider.cs │ │ │ ├── NativeProvider.cs │ │ │ ├── SvgProvider.cs │ │ │ └── WebPProvider.cs │ ├── Helper.cs │ ├── ImagePanel.xaml │ ├── ImagePanel.xaml.cs │ ├── LibAPNG.dll │ ├── LibAPNG.xml │ ├── MetaProvider.cs │ ├── NativeMethods │ │ └── ClipboardEx.cs │ ├── Plugin.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── QuickLook.Plugin.ImageViewer.csproj │ ├── Resources │ │ ├── background-b.png │ │ └── background.png │ ├── exiv2-ql-32.dll │ └── exiv2-ql-64.dll ├── QuickLook.Plugin.MailViewer │ ├── Plugin.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ └── QuickLook.Plugin.MailViewer.csproj ├── QuickLook.Plugin.MarkdownViewer │ ├── .gitattributes │ ├── GenerateEmbeddedResourcesHash.ps1 │ ├── Plugin.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── QuickLook.Plugin.MarkdownViewer.csproj │ ├── ResourceManager.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ └── Resources │ │ ├── css │ │ └── github-markdown.css │ │ ├── highlight.js │ │ ├── highlight.min.js │ │ └── styles │ │ │ ├── github-dark.min.css │ │ │ └── github.min.css │ │ ├── js │ │ ├── markdown-it.min.js │ │ └── markdownItAnchor.umd.js │ │ ├── mathjax │ │ └── tex-mml-svg.js │ │ └── md2html.html ├── QuickLook.Plugin.PDFViewer │ ├── AsyncPageToThumbnailConverter.cs │ ├── ListBoxItemStyleNoFocusedBorder.xaml │ ├── NotifyTaskCompletion.cs │ ├── PasswordControl.xaml │ ├── PasswordControl.xaml.cs │ ├── PdfDocumentWrapper.cs │ ├── PdfPageExtension.cs │ ├── PdfViewerControl.xaml │ ├── PdfViewerControl.xaml.cs │ ├── Plugin.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── QuickLook.Plugin.PdfViewer.csproj │ ├── Resources │ │ └── loading.png │ └── Translations.config ├── QuickLook.Plugin.PEViewer │ ├── FluentBorder.cs │ ├── PEImageParser │ │ ├── ImageCharacteristics.cs │ │ ├── ImageCoffHeader.cs │ │ ├── ImageDataDirectory.cs │ │ ├── ImageDataDirectoryName.cs │ │ ├── ImageDllCharacteristics.cs │ │ ├── ImageDosHeader.cs │ │ ├── ImageMachineType.cs │ │ ├── ImageOptionalHeader.cs │ │ ├── ImageOptionalHeader32.cs │ │ ├── ImageOptionalHeader64.cs │ │ ├── ImageSection.cs │ │ ├── ImageSectionFlags.cs │ │ ├── ImageSectionHeader.cs │ │ ├── ImageSubsystem.cs │ │ ├── PEImage.cs │ │ └── PEImageParseException.cs │ ├── PEInfoPanel.xaml │ ├── PEInfoPanel.xaml.cs │ ├── Plugin.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── QuickLook.Plugin.PEViewer.csproj │ ├── Translations.config │ └── WindowsThumbnailProvider.cs ├── QuickLook.Plugin.PluginInstaller │ ├── App.cs │ ├── Plugin.cs │ ├── PluginInfoPanel.xaml │ ├── PluginInfoPanel.xaml.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ └── QuickLook.Plugin.PluginInstaller.csproj ├── QuickLook.Plugin.TextViewer │ ├── Controls │ │ ├── DropDownButton.xaml │ │ └── SearchPanel.xaml │ ├── Plugin.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── QuickLook.Plugin.TextViewer.csproj │ ├── Syntax │ │ ├── Dark │ │ │ ├── Batch.xshd │ │ │ ├── C#.xshd │ │ │ ├── JSON.xshd │ │ │ └── Lyric.xshd │ │ └── Light │ │ │ ├── ANTLR.xshd │ │ │ ├── ActionScript.xshd │ │ │ ├── Ada.xshd │ │ │ ├── Assembly.xshd │ │ │ ├── AutoHotkey.xshd │ │ │ ├── Batch.xshd │ │ │ ├── Boo.xshd │ │ │ ├── C#.xshd │ │ │ ├── C++.xshd │ │ │ ├── C.xshd │ │ │ ├── CSS.xshd │ │ │ ├── Ceylon.xshd │ │ │ ├── ChucK.xshd │ │ │ ├── Clojure.xshd │ │ │ ├── Cocoa.xshd │ │ │ ├── CoffeeScript.xshd │ │ │ ├── Cool.xshd │ │ │ ├── D.xshd │ │ │ ├── Dart.xshd │ │ │ ├── Delphi.xshd │ │ │ ├── Eiffel.xshd │ │ │ ├── Elixir.xshd │ │ │ ├── Erlang.xshd │ │ │ ├── F#.xshd │ │ │ ├── Falcon.xshd │ │ │ ├── Fantom.xshd │ │ │ ├── Fortran95.xshd │ │ │ ├── Go.xshd │ │ │ ├── Goovy.xshd │ │ │ ├── Gui4Cli.xshd │ │ │ ├── HLSL.xshd │ │ │ ├── Haskell.xshd │ │ │ ├── Haxe.xshd │ │ │ ├── ILYC.xshd │ │ │ ├── INI.xshd │ │ │ ├── Icon.xshd │ │ │ ├── Io.xshd │ │ │ ├── JSON.xshd │ │ │ ├── Java.xshd │ │ │ ├── JavaScript.xshd │ │ │ ├── Julia.xshd │ │ │ ├── Just BASIC.xshd │ │ │ ├── KiXtart.xshd │ │ │ ├── Kotlin.xshd │ │ │ ├── Lean.xshd │ │ │ ├── Lisp.xshd │ │ │ ├── Lua.xshd │ │ │ ├── Nemerle.xshd │ │ │ ├── Nim.xshd │ │ │ ├── OCaml.xshd │ │ │ ├── Objective-C.xshd │ │ │ ├── PHP.xshd │ │ │ ├── ParaSail.xshd │ │ │ ├── Pascal.xshd │ │ │ ├── Pike.xshd │ │ │ ├── PowerShell.xshd │ │ │ ├── Prolog.xshd │ │ │ ├── PureScript.xshd │ │ │ ├── Python.xshd │ │ │ ├── R.xshd │ │ │ ├── Registry.xshd │ │ │ ├── Resource.xshd │ │ │ ├── Rexx.xshd │ │ │ ├── Ruby.xshd │ │ │ ├── Rust.xshd │ │ │ ├── SQF.xshd │ │ │ ├── SQL.xshd │ │ │ ├── Scala.xshd │ │ │ ├── Scheme.xshd │ │ │ ├── ShellScript.xshd │ │ │ ├── Solidity.xshd │ │ │ ├── Spike.xshd │ │ │ ├── Swift.xshd │ │ │ ├── TCL.xshd │ │ │ ├── Thrift.xshd │ │ │ ├── TypeScript.xshd │ │ │ ├── VBNET.xshd │ │ │ ├── VBScript.xshd │ │ │ ├── VHDL.xshd │ │ │ ├── VS Solution.xshd │ │ │ ├── Vala.xshd │ │ │ ├── Verilog.xshd │ │ │ ├── Volt.xshd │ │ │ ├── X10.xshd │ │ │ ├── XC.xshd │ │ │ ├── XML.xshd │ │ │ ├── Xtend.xshd │ │ │ └── zzz-After-JavaScript-HTML.xshd │ ├── TextViewerPanel.cs │ └── Translations.config └── QuickLook.Plugin.VideoViewer │ ├── AudioTrack │ └── MidiPlayer.cs │ ├── Converters.cs │ ├── Extensions │ └── StringExtension.cs │ ├── GlobalUsing.cs │ ├── LyricTrack │ ├── LrcHelper.cs │ └── LrcLine.cs │ ├── Plugin.cs │ ├── Properties │ ├── AssemblyInfo.cs │ ├── Resource.Designer.cs │ └── Resource.resx │ ├── QLVRegistry.cs │ ├── QuickLook.Plugin.VideoViewer.csproj │ ├── RegFileParser.cs │ ├── Resources │ ├── QLV.reg │ └── empty.png │ ├── Styles.xaml │ ├── ViewerPanel.GlassLayer.cs │ ├── ViewerPanel.xaml │ └── ViewerPanel.xaml.cs ├── QuickLook.sln ├── QuickLook.sln.DotSettings ├── QuickLook ├── App.config ├── App.xaml ├── App.xaml.cs ├── Controls │ ├── BusyDecorator │ │ ├── BackgroundVisualHost.cs │ │ ├── BusyDecorator.cs │ │ ├── BusyDecorator.xaml │ │ ├── ControlExtensions.cs │ │ ├── ISpinable.cs │ │ ├── SpinIcon.cs │ │ └── VisualTargetPresentationSource.cs │ ├── GlassLayer │ │ ├── 100-50-5-monochrome.png │ │ ├── ElementCoordinateConverter.cs │ │ ├── GaussianBlur.fx │ │ ├── GaussianBlur.ps │ │ ├── GaussianBlurEffect.cs │ │ ├── GlassLayer.xaml │ │ └── GlassLayer.xaml.cs │ └── WebClientEx.cs ├── Converters │ ├── BooleanToKeyTimeConverter.cs │ ├── BooleanToVisibilityCollapsedConverter.cs │ ├── BooleanToVisibilityHiddenConverter.cs │ ├── ScaledValueConverter.cs │ ├── WindowStateMaximizedToThicknessConverter.cs │ └── WindowStateNormalToThicknessConverter.cs ├── FocusMonitor.cs ├── FodyWeavers.xml ├── FodyWeavers.xsd ├── Fonts │ ├── segfluent.ttf │ └── segmdl2.ttf ├── Helpers │ ├── AutoStartupHelper.cs │ ├── CommandLineParser.cs │ ├── GlobalKeyboardHook.cs │ ├── MessageBoxPatcher.cs │ ├── ShareHelper.cs │ ├── SystemHelper.cs │ ├── TrayIconPatcher.cs │ └── Updater.cs ├── KeystrokeDispatcher.cs ├── NativeMethods │ ├── QuickLook.cs │ ├── SHCore.cs │ ├── ShellLink.cs │ ├── UxTheme.cs │ └── WMI.cs ├── PipeServerManager.cs ├── Plugin │ └── InfoPanel │ │ ├── FileHelper.cs │ │ ├── InfoPanel.xaml │ │ ├── InfoPanel.xaml.cs │ │ ├── Plugin.cs │ │ └── WindowsThumbnailProvider.cs ├── PluginManager.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ └── Resources.resx ├── QuickLook.csproj ├── Resources │ ├── app.ico │ ├── app.png │ ├── app.svg │ ├── app.svgz │ ├── app_16.ico │ ├── app_black.ico │ ├── app_black.png │ ├── app_black_16.ico │ ├── app_white.ico │ ├── app_white.png │ └── app_white_16.ico ├── Translations.config ├── TrayIconManager.cs ├── ViewWindowManager.cs ├── ViewerWindow.Actions.cs ├── ViewerWindow.Properties.cs ├── ViewerWindow.xaml ├── ViewerWindow.xaml.cs └── app.manifest ├── README.md ├── Scripts ├── pack-7z.ps1 ├── pack-all.ps1 ├── pack-appx.ps1 ├── pack-setup.ps1 ├── pack-zip.ps1 ├── rename-msi.ps1 ├── sign-appx.ps1 └── update-version.ps1 ├── Settings.XamlStyler └── VisualCommander.vcmd /.appveyor.yml: -------------------------------------------------------------------------------- 1 | version: '{build}' 2 | branches: 3 | only: 4 | - master 5 | skip_branch_with_pr: true 6 | image: Visual Studio 2022 7 | configuration: Release 8 | platform: Any CPU 9 | clone_script: 10 | - cmd: >- 11 | git clone -q --branch=%APPVEYOR_REPO_BRANCH% https://github.com/%APPVEYOR_REPO_NAME%.git %APPVEYOR_BUILD_FOLDER% 12 | 13 | cd %APPVEYOR_BUILD_FOLDER% 14 | 15 | git checkout -qf %APPVEYOR_REPO_COMMIT% 16 | 17 | git submodule update --init --recursive 18 | cache: 19 | - packages -> **\packages.config 20 | - '%USERPROFILE%\.nuget\packages -> **\project.json' 21 | before_build: 22 | - ps: >- 23 | $env:GIT_TAG = git describe --always --tags --exclude latest 24 | 25 | nuget restore -verbosity detailed 26 | build: 27 | verbosity: minimal 28 | after_build: 29 | - ps: >- 30 | Get-Content GitVersion.cs 31 | 32 | Move-Item Build\QuickLook-$env:GIT_TAG.msi QuickLook-$env:GIT_TAG.msi 33 | 34 | Move-Item Build\QuickLook-$env:GIT_TAG.zip QuickLook-$env:GIT_TAG.zip 35 | 36 | artifacts: 37 | - path: QuickLook-%GIT_TAG%.zip 38 | name: QuickLook-%GIT_TAG% 39 | - path: QuickLook-%GIT_TAG%.msi 40 | name: QuickLook-%GIT_TAG% 41 | # deploy: 42 | # - provider: GitHub 43 | # auth_token: 44 | # secure: 5CSvkfKBq9kUho529L1tkH5ywQQFJY/A8Y6lNoHGJFi7mnSqQAaoiVPbUVU4a/KC 45 | # artifact: QuickLook-$(APPVEYOR_REPO_TAG_NAME) 46 | # draft: true 47 | # on: 48 | # APPVEYOR_REPO_TAG: true 49 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Report a bug 3 | about: Please follow this template or your issue will be closed 4 | 5 | --- 6 | 7 | *For all's convenience, please use English to fill this issue.* 8 | 9 | *Please search within existing issues before the submission. Has this issue already been reported?* 10 | 11 | **Describe the bug** 12 | A clear and concise description of what the bug is. 13 | 14 | **To Reproduce** 15 | Steps to reproduce the behavior: 16 | 1. Go to '...' 17 | 2. Click on '....' 18 | 3. Scroll down to '....' 19 | 4. See error 20 | 21 | **Expected behavior** 22 | A clear and concise description of what you expected to happen. 23 | 24 | **Desktop (please complete the following information):** 25 | - OS Version: [e.g. Windows 10 1803] 26 | - QuickLook Version: [e.g. 0.3.3 from Windows Store] 27 | 28 | **Screenshots and Exception Log** 29 | If applicable, add screenshots and logs to help explain your problem. The log file is located in [one of several locations](https://github.com/QL-Win/QuickLook/wiki/Differences-Between-Distributions#user-data-location). 30 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Suggest a new idea 3 | about: Please follow this template or your issue will be closed 4 | 5 | --- 6 | 7 | *For all's convenience, please use English to fill this issue.* 8 | 9 | **Is your feature request related to a problem? Please describe.** 10 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 11 | 12 | **Describe the solution you'd like** 13 | A clear and concise description of what you want to happen. 14 | 15 | **Describe alternatives you've considered** 16 | A clear and concise description of any alternative solutions or features you've considered. 17 | 18 | **Additional context** 19 | Add any other context or screenshots about the feature request here. 20 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "QuickLook.Common"] 2 | path = QuickLook.Common 3 | url = https://github.com/QL-Win/QuickLook.Common.git 4 | -------------------------------------------------------------------------------- /Build/Assets/Branding/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Branding/1.png -------------------------------------------------------------------------------- /Build/Assets/Branding/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Branding/2.png -------------------------------------------------------------------------------- /Build/Assets/Branding/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Branding/3.png -------------------------------------------------------------------------------- /Build/Assets/Branding/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Branding/4.png -------------------------------------------------------------------------------- /Build/Assets/Branding/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Branding/5.png -------------------------------------------------------------------------------- /Build/Assets/Branding/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Branding/6.png -------------------------------------------------------------------------------- /Build/Assets/Branding/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Branding/7.png -------------------------------------------------------------------------------- /Build/Assets/LargeTile.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/LargeTile.scale-100.png -------------------------------------------------------------------------------- /Build/Assets/LargeTile.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/LargeTile.scale-125.png -------------------------------------------------------------------------------- /Build/Assets/LargeTile.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/LargeTile.scale-150.png -------------------------------------------------------------------------------- /Build/Assets/LargeTile.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/LargeTile.scale-200.png -------------------------------------------------------------------------------- /Build/Assets/LargeTile.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/LargeTile.scale-400.png -------------------------------------------------------------------------------- /Build/Assets/SmallTile.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/SmallTile.scale-100.png -------------------------------------------------------------------------------- /Build/Assets/SmallTile.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/SmallTile.scale-125.png -------------------------------------------------------------------------------- /Build/Assets/SmallTile.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/SmallTile.scale-150.png -------------------------------------------------------------------------------- /Build/Assets/SmallTile.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/SmallTile.scale-200.png -------------------------------------------------------------------------------- /Build/Assets/SmallTile.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/SmallTile.scale-400.png -------------------------------------------------------------------------------- /Build/Assets/Square150x150Logo.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Square150x150Logo.scale-100.png -------------------------------------------------------------------------------- /Build/Assets/Square150x150Logo.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Square150x150Logo.scale-125.png -------------------------------------------------------------------------------- /Build/Assets/Square150x150Logo.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Square150x150Logo.scale-150.png -------------------------------------------------------------------------------- /Build/Assets/Square150x150Logo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Square150x150Logo.scale-200.png -------------------------------------------------------------------------------- /Build/Assets/Square150x150Logo.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Square150x150Logo.scale-400.png -------------------------------------------------------------------------------- /Build/Assets/Square44x44Logo.altform-unplated_targetsize-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Square44x44Logo.altform-unplated_targetsize-16.png -------------------------------------------------------------------------------- /Build/Assets/Square44x44Logo.altform-unplated_targetsize-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Square44x44Logo.altform-unplated_targetsize-24.png -------------------------------------------------------------------------------- /Build/Assets/Square44x44Logo.altform-unplated_targetsize-256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Square44x44Logo.altform-unplated_targetsize-256.png -------------------------------------------------------------------------------- /Build/Assets/Square44x44Logo.altform-unplated_targetsize-256.setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Square44x44Logo.altform-unplated_targetsize-256.setup.png -------------------------------------------------------------------------------- /Build/Assets/Square44x44Logo.altform-unplated_targetsize-256.uninst.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Square44x44Logo.altform-unplated_targetsize-256.uninst.png -------------------------------------------------------------------------------- /Build/Assets/Square44x44Logo.altform-unplated_targetsize-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Square44x44Logo.altform-unplated_targetsize-32.png -------------------------------------------------------------------------------- /Build/Assets/Square44x44Logo.altform-unplated_targetsize-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Square44x44Logo.altform-unplated_targetsize-48.png -------------------------------------------------------------------------------- /Build/Assets/Square44x44Logo.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Square44x44Logo.scale-100.png -------------------------------------------------------------------------------- /Build/Assets/Square44x44Logo.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Square44x44Logo.scale-125.png -------------------------------------------------------------------------------- /Build/Assets/Square44x44Logo.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Square44x44Logo.scale-150.png -------------------------------------------------------------------------------- /Build/Assets/Square44x44Logo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Square44x44Logo.scale-200.png -------------------------------------------------------------------------------- /Build/Assets/Square44x44Logo.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Square44x44Logo.scale-400.png -------------------------------------------------------------------------------- /Build/Assets/Square44x44Logo.targetsize-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Square44x44Logo.targetsize-16.png -------------------------------------------------------------------------------- /Build/Assets/Square44x44Logo.targetsize-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Square44x44Logo.targetsize-24.png -------------------------------------------------------------------------------- /Build/Assets/Square44x44Logo.targetsize-256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Square44x44Logo.targetsize-256.png -------------------------------------------------------------------------------- /Build/Assets/Square44x44Logo.targetsize-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Square44x44Logo.targetsize-32.png -------------------------------------------------------------------------------- /Build/Assets/Square44x44Logo.targetsize-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Square44x44Logo.targetsize-48.png -------------------------------------------------------------------------------- /Build/Assets/Wide310x150Logo.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Wide310x150Logo.scale-100.png -------------------------------------------------------------------------------- /Build/Assets/Wide310x150Logo.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Wide310x150Logo.scale-125.png -------------------------------------------------------------------------------- /Build/Assets/Wide310x150Logo.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Wide310x150Logo.scale-150.png -------------------------------------------------------------------------------- /Build/Assets/Wide310x150Logo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Wide310x150Logo.scale-200.png -------------------------------------------------------------------------------- /Build/Assets/Wide310x150Logo.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/Wide310x150Logo.scale-400.png -------------------------------------------------------------------------------- /Build/Assets/storelogo.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/storelogo.scale-100.png -------------------------------------------------------------------------------- /Build/Assets/storelogo.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/storelogo.scale-125.png -------------------------------------------------------------------------------- /Build/Assets/storelogo.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/storelogo.scale-150.png -------------------------------------------------------------------------------- /Build/Assets/storelogo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/storelogo.scale-200.png -------------------------------------------------------------------------------- /Build/Assets/storelogo.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/Assets/storelogo.scale-400.png -------------------------------------------------------------------------------- /Build/assetslayout.resfiles: -------------------------------------------------------------------------------- 1 | Assets\LargeTile.scale-100.png 2 | Assets\LargeTile.scale-125.png 3 | Assets\LargeTile.scale-150.png 4 | Assets\LargeTile.scale-200.png 5 | Assets\LargeTile.scale-400.png 6 | Assets\SmallTile.scale-100.png 7 | Assets\SmallTile.scale-125.png 8 | Assets\SmallTile.scale-150.png 9 | Assets\SmallTile.scale-200.png 10 | Assets\SmallTile.scale-400.png 11 | Assets\Square150x150Logo.scale-100.png 12 | Assets\Square150x150Logo.scale-125.png 13 | Assets\Square150x150Logo.scale-150.png 14 | Assets\Square150x150Logo.scale-200.png 15 | Assets\Square150x150Logo.scale-400.png 16 | Assets\Square44x44Logo.altform-unplated_targetsize-16.png 17 | Assets\Square44x44Logo.altform-unplated_targetsize-24.png 18 | Assets\Square44x44Logo.altform-unplated_targetsize-32.png 19 | Assets\Square44x44Logo.altform-unplated_targetsize-48.png 20 | Assets\Square44x44Logo.altform-unplated_targetsize-256.png 21 | Assets\Square44x44Logo.scale-100.png 22 | Assets\Square44x44Logo.scale-125.png 23 | Assets\Square44x44Logo.scale-150.png 24 | Assets\Square44x44Logo.scale-200.png 25 | Assets\Square44x44Logo.scale-400.png 26 | Assets\Square44x44Logo.targetsize-16.png 27 | Assets\Square44x44Logo.targetsize-24.png 28 | Assets\Square44x44Logo.targetsize-32.png 29 | Assets\Square44x44Logo.targetsize-48.png 30 | Assets\Square44x44Logo.targetsize-256.png 31 | Assets\storelogo.scale-100.png 32 | Assets\storelogo.scale-125.png 33 | Assets\storelogo.scale-150.png 34 | Assets\storelogo.scale-200.png 35 | Assets\storelogo.scale-400.png 36 | Assets\Wide310x150Logo.scale-100.png 37 | Assets\Wide310x150Logo.scale-125.png 38 | Assets\Wide310x150Logo.scale-150.png 39 | Assets\Wide310x150Logo.scale-200.png 40 | Assets\Wide310x150Logo.scale-400.png 41 | -------------------------------------------------------------------------------- /Build/micasetup.json: -------------------------------------------------------------------------------- 1 | { 2 | "Template": "${MicaDir}/template/default.7z", 3 | "Package": "./Package.7z", 4 | "Output": "./${AppName}.exe", 5 | "AppName": "QuickLook", 6 | "KeyName": "QuickLook", 7 | "ExeName": "QuickLook.exe", 8 | "Publisher": "QL-Win", 9 | "Version": "${Package}./${ExeName}|3", 10 | "TargetFramework": "net472", 11 | "Guid": "8B4A9CE5-67B5-4A94-81CB-3771F688FDEB", 12 | "Favicon": "./Assets/Square44x44Logo.altform-unplated_targetsize-256.png", 13 | "Icon": "./Assets/Square44x44Logo.altform-unplated_targetsize-256.setup.png", 14 | "UnIcon": "./Assets/Square44x44Logo.altform-unplated_targetsize-256.uninst.png", 15 | "LicenseFile": "../LICENSE-GPL.txt", 16 | "License": null, 17 | "LicenseType": null, 18 | "RequestExecutionLevel": "admin", 19 | "SingleInstanceMutex": null, 20 | "IsCreateDesktopShortcut": true, 21 | "IsCreateUninst": true, 22 | "IsCreateStartMenu": true, 23 | "IsPinToStartMenu": false, 24 | "IsCreateQuickLaunch": true, 25 | "IsCreateRegistryKeys": true, 26 | "IsCreateAsAutoRun": false, 27 | "IsCustomizeVisiableAutoRun": false, 28 | "AutoRunLaunchCommand": "/autostart", 29 | "IsUseFolderPickerPreferClassic": false, 30 | "IsUseInstallPathPreferX86": false, 31 | "IsUseInstallPathPreferAppDataLocalPrograms": true, 32 | "IsUseInstallPathPreferAppDataRoaming": false, 33 | "IsUseRegistryPreferX86": null, 34 | "IsAllowFullFolderSecurity": true, 35 | "IsAllowFirewall": true, 36 | "IsRefreshExplorer": true, 37 | "IsInstallCertificate": false, 38 | "IsEnableUninstallDelayUntilReboot": true, 39 | "IsEnvironmentVariable": false, 40 | "OverlayInstallRemoveExt": "exe,dll,pdb,config,winmd,txt,bat,ax,manifest,xshd", 41 | "UnpackingPassword": null, 42 | "MessageOfPage1": null, 43 | "MessageOfPage2": null, 44 | "MessageOfPage3": null 45 | } 46 | -------------------------------------------------------------------------------- /Build/openssl-sign.cnf: -------------------------------------------------------------------------------- 1 | [req] 2 | default_bits = 2048 3 | prompt = no 4 | default_md = sha256 5 | distinguished_name = dn 6 | x509_extensions = v3_req 7 | 8 | [dn] 9 | CN = CE36AF3D-FF94-43EB-9908-7EC8FD1D29FB 10 | 11 | [v3_req] 12 | keyUsage = critical, digitalSignature 13 | extendedKeyUsage = codeSigning 14 | -------------------------------------------------------------------------------- /Build/priconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /Build/sideload.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIDMjCCAhqgAwIBAgIUBIWdItfat0Fw6npbHI2W7HE/0KYwDQYJKoZIhvcNAQEL 3 | BQAwLzEtMCsGA1UEAwwkQ0UzNkFGM0QtRkY5NC00M0VCLTk5MDgtN0VDOEZEMUQy 4 | OUZCMB4XDTI1MDUxMzE3NDgzNVoXDTI4MDUxMjE3NDgzNVowLzEtMCsGA1UEAwwk 5 | Q0UzNkFGM0QtRkY5NC00M0VCLTk5MDgtN0VDOEZEMUQyOUZCMIIBIjANBgkqhkiG 6 | 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnAtbhjH01YmWv1U98kMj3epdpuZLE04pGXOR 7 | xfdBb1zX8Q75hy5SmIaHrsow7fTXfHsUzuJEmanllMbJGUpi46fLsb8Ijd4uQgXO 8 | wSDfIXrm34Buzpk6EKwEWmRMyORmfPwy0A+XdTHydDhEXndy1eGPJ1ZZnldVI8Ho 9 | ZF2MW35QBZDjlWZh3RppWNMksvlngrOX4PFfJ+DtOQUvNswbpyqVATMFBk9kShGM 10 | XHuieibzDlzxGNKSn3tDvutLBW5hm7iLqEuAeM7dwSac4C+N5FKWnXJndkN3k8AN 11 | nD0MHlErN1dLoJQqvAaCarZr8RSPhdanVOylMGkt97NLYZrLTQIDAQABo0YwRDAO 12 | BgNVHQ8BAf8EBAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwHQYDVR0OBBYEFJEL 13 | e4QaWs4H2djQ6nnnc/30sZ/nMA0GCSqGSIb3DQEBCwUAA4IBAQBYBXkl/vEsGUHI 14 | qogCfb/DxFlsm059sxHAIhaNjuoTlgwzgj6KSPbKsfnYVMHZFqkg4AaTuRs9iqTL 15 | TStM14OjG95gn+7fJ4zxqquEEytk9yb2xj9ZpLAvzZzUrw5qo1lmM7yPRso38l62 16 | 9g1G1/MVP6pO03QWKzvSV+IlU3DIP3M2r74G8dexL5/Cut1LkOc/tn2ZYt3Ij95e 17 | RM2vqxzK2pw6IAVG3wdNGAyN9K8BATRuAXFV6RXkeEBHFNV3wpyq4W+H6hpsrMJM 18 | rMZUUqLa8BTUQAsZ1jmL+dRmj2rESeOaOO9jPks4J4c8+v8aJQBmZhvxRyjyMtdL 19 | pWHSCCgm 20 | -----END CERTIFICATE----- 21 | -------------------------------------------------------------------------------- /Build/sideload.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCcC1uGMfTViZa/ 3 | VT3yQyPd6l2m5ksTTikZc5HF90FvXNfxDvmHLlKYhoeuyjDt9Nd8exTO4kSZqeWU 4 | xskZSmLjp8uxvwiN3i5CBc7BIN8heubfgG7OmToQrARaZEzI5GZ8/DLQD5d1MfJ0 5 | OERed3LV4Y8nVlmeV1UjwehkXYxbflAFkOOVZmHdGmlY0ySy+WeCs5fg8V8n4O05 6 | BS82zBunKpUBMwUGT2RKEYxce6J6JvMOXPEY0pKfe0O+60sFbmGbuIuoS4B4zt3B 7 | JpzgL43kUpadcmd2Q3eTwA2cPQweUSs3V0uglCq8BoJqtmvxFI+F1qdU7KUwaS33 8 | s0thmstNAgMBAAECggEABS51XWPhmt5E5K6Pw4XKNkS207jC68MFJ1oIkE0bsvcf 9 | boWORe2vrW6OKSt/627dYZNJXMNI/tyUNIKooSUwr8QzGysE6DJlUSjrNXYszT+i 10 | VJqUU1o614c2unT+fbnj01OhMPp2OjHXOK0OTCAQQ/IySYlFqYssgbxJxgdl2+XX 11 | rDiSk5PvZ0Z8PUuG7EvNbRAnUmIQDVTd81My0kPk4M0w8Rg2p0sIN5klIDxTzC98 12 | 5iUvS+53xch4f8jJOr8s7J/56R+tnIoqfVkIDI3Q4CUhq3s0DAC7GP4vpoynGXn0 13 | pLzHvOttFbqgcHkS2zrVOXKwl4Zym4p+kMCub6BCmwKBgQDcGzCvrMon4fIJrymG 14 | lmGZMeN8acjD0MKDT8JPgHkwXTz61AbOC2EGoOpWNqrYGOCv6xSMPiub1un6Y5X2 15 | KIuAJm+bY+py0Ed+EzZjrFkQpGt6xQ3FY2aFvA5uS3esgcF+OtcUrXEEq0dK9bZ6 16 | HB9P90QuND72bvfx9wjLon0dvwKBgQC1fcRbLpqA2lSGglcRoioA/okMPyMk7jH3 17 | n3IHjnpjsBu1FPrWH8Tqtop4vrEVS1cxM7P7FXWwWPqUH/2XbCk1R3T9ZD+i1kHi 18 | qvSqp4L0dfTk6ibZpywGXRnpQzT5kKJTrSSx9L7Ni00HcvCI1+p4XNdJZm7jNDSy 19 | dGSPg1ox8wKBgB6TaF//ENYZfRX7TzlzCnvNglx2FX2eMmcrXULOBgfB7AasDYXx 20 | 7riNAgCX94OtcQj/DwusV0J+yGIQE3TujPJwZHChoJ/ybvwEjzmpZ3X4YTXcydzx 21 | wfwx848+zJEaNVbjtZ0Zuul7IZw4JfEwluj04HPKrjRtleP2/THMkLThAoGBAJYh 22 | BwB2OJBGCo2J3ARWJHDWHP/oamXuM58mYekmTs+PqhvM0wG1HesaPMlM1KdMvz+Q 23 | CV21jrjlocJOBDPx4NSV24yQFKPaoH2j9OgF0SnvOTjzCFgbFSveb8SpN3UJ031s 24 | SGJ8lijpBjsXNSm9kdMm2V96QFfpo33LEjQ077NJAoGARnnvnenmfwlu/5Oq2Ojs 25 | WWzOxXTpiGXLnbUNUvQMvqXxGygCGoA18vVveLr6eKfojM8iKtGF91S9NsUkBEkd 26 | VKOFnc9OQ5dtoBkN6XZBUCmJCzQZS20A3jq9oionsJlIWOgb/X3L1cS2SZ3ocgKS 27 | lCCN2IGaKiGJCPJprpFW7fg= 28 | -----END PRIVATE KEY----- 29 | -------------------------------------------------------------------------------- /Build/sideload.pfx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/Build/sideload.pfx -------------------------------------------------------------------------------- /PRIVACY.md: -------------------------------------------------------------------------------- 1 | # QuickLook Privacy Policy 2 | 3 | ## Website 4 | 5 | When accessing our Website, QuickLook website will learn certain information about you during your visit. How we will handle information we learn about you depends upon what you do when visiting our site. 6 | 7 | If you visit our site to read or download information on our pages, we collect and store only the following information about you: 8 | 9 | * The name of the domain from which you access the Internet 10 | * The date and time you access our site 11 | * The Internet address of the website you used to link directly to our site. 12 | * Third party vendors, including Google and GitHub, use cookies to serve ads based on a user’s prior visits to your website. 13 | * If you identify yourself by sending us an e-mail containing personal information, then the information collected will be solely used to respond to your message. 14 | 15 | The information collected is for statistical purposes. QuickLook website may use software programs to create summary statistics, which are used for such purposes as assessing the number of visitors to the different sections of our site, what information is of most and least interest, determining technical design specifications, and identifying system performance or problem areas. 16 | 17 | QuickLook website will not obtain personally-identifying information about you when you visit our site, unless you choose to provide such information to us, nor will such information be sold or otherwise transferred to unaffiliated third parties without the approval of the user at the time of collection. 18 | 19 | ## Desktop 20 | 21 | The software application doesn’t collect anything personal information from you. 22 | 23 | The software application exchange data only with https://github.com using the GitHub Releases API. If you are viewing a remote content via the software, data exchange will happen between you and the remote content. 24 | -------------------------------------------------------------------------------- /QuickLook.Native/QuickLook.Native32/DOpus.h: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | #pragma once 19 | class DOpus 20 | { 21 | public: 22 | static void PrepareMessageWindow(); 23 | static void GetSelected(PWCHAR buffer); 24 | private: 25 | static void ParseXmlBuffer(PWCHAR buffer); 26 | static LRESULT CALLBACK msgWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); 27 | }; 28 | -------------------------------------------------------------------------------- /QuickLook.Native/QuickLook.Native32/DialogHook.h: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | #pragma once 19 | class DialogHook 20 | { 21 | public: 22 | static void GetSelected(PWCHAR buffer); 23 | 24 | private: 25 | static void getSelectedInternal(CComPtr psb, PWCHAR buffer); 26 | static void GetSelectedFromWoW64HookHelper(PWCHAR buffer); 27 | static HMODULE ModuleFromAddress(PVOID pv); 28 | static LRESULT CALLBACK MsgHookProc(int nCode, WPARAM wParam, LPARAM lParam); 29 | }; 30 | -------------------------------------------------------------------------------- /QuickLook.Native/QuickLook.Native32/DllExport.cpp: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | #include "stdafx.h" 19 | 20 | #include "Shell32.h" 21 | #include "WoW64HookHelper.h" 22 | #include "DOpus.h" 23 | #include "MultiCommander.h" 24 | 25 | #define EXPORT extern "C" __declspec(dllexport) 26 | 27 | EXPORT void Init() 28 | { 29 | #ifdef WIN64 30 | WoW64HookHelper::Launch(); 31 | #endif 32 | DOpus::PrepareMessageWindow(); 33 | MultiCommander::PrepareMessageWindow(); 34 | } 35 | 36 | EXPORT Shell32::FocusedWindowType GetFocusedWindowType() 37 | { 38 | return Shell32::GetFocusedWindowType(); 39 | } 40 | 41 | EXPORT void GetCurrentSelection(PWCHAR buffer) 42 | { 43 | Shell32::GetCurrentSelection(buffer); 44 | } 45 | -------------------------------------------------------------------------------- /QuickLook.Native/QuickLook.Native32/Everything.h: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | #define EVERYTHING_IPC_HIDDEN_WIN_CLASS L"EVERYTHING_RESULT_LIST_FOCUS" 19 | #define EVERYTHING_IPC_WINDOW_CLASS L"EVERYTHING" 20 | #define EVERYTHING_IPC_COPY_TO_CLIPBOARD 41007 21 | 22 | #pragma once 23 | class Everything 24 | { 25 | public: 26 | static void GetSelected(PWCHAR buffer); 27 | static bool MatchClass(PWCHAR classBuffer); 28 | 29 | private: 30 | static void backupClipboard(); 31 | static void restoreClipboard(); 32 | }; 33 | -------------------------------------------------------------------------------- /QuickLook.Native/QuickLook.Native32/HelperMethods.h: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | #pragma once 19 | class HelperMethods 20 | { 21 | public: 22 | static void GetSelectedInternal(CComPtr psb, PWCHAR buffer); 23 | static void ObtainFirstItem(CComPtr dao, PWCHAR buffer); 24 | static bool IsCursorActivated(HWND hwndfg); 25 | static bool IsExplorerSearchBoxFocused(); 26 | static bool HelperMethods::IsUWP(); 27 | 28 | private: 29 | static bool IsListaryToolbarVisible(); 30 | static HWND GetFocusedControl(); 31 | }; 32 | -------------------------------------------------------------------------------- /QuickLook.Native/QuickLook.Native32/MultiCommander.h: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | #pragma once 19 | 20 | #define MULTICMD_CPF_GETCURITEMFULL 0x00000010L // Get full path of current item (file or folder) in focus 21 | #define MULTICMD_CPF_SOURCE 0x00000400L // Go to the new path in the source panel side 22 | 23 | #define MULTICMD_CLASS L"MultiCommander MainWnd" 24 | #define MULTICMD_MSGWINDOW_CLASS L"QuickLook.Native.MultiCmd.MsgWindow" 25 | 26 | class MultiCommander 27 | { 28 | public: 29 | static void GetSelected(PWCHAR buffer); 30 | static bool PrepareMessageWindow(); 31 | MultiCommander() = delete; 32 | private: 33 | static HWND hMsgWnd; 34 | static HANDLE hGetResultEvent; 35 | static PCHAR pCurrentItemPath; 36 | 37 | static LRESULT CALLBACK msgWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); 38 | }; 39 | 40 | -------------------------------------------------------------------------------- /QuickLook.Native/QuickLook.Native32/Shell32.h: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | #pragma once 19 | 20 | #include "stdafx.h" 21 | 22 | class Shell32 23 | { 24 | public: 25 | enum FocusedWindowType 26 | { 27 | INVALID, 28 | DESKTOP, 29 | EXPLORER, 30 | DIALOG, 31 | EVERYTHING, 32 | DOPUS, 33 | MULTICOMMANDER, 34 | }; 35 | 36 | static FocusedWindowType GetFocusedWindowType(); 37 | static void GetCurrentSelection(PWCHAR buffer); 38 | 39 | private: 40 | static void getSelectedFromDesktop(PWCHAR buffer); 41 | static void getSelectedFromExplorer(PWCHAR buffer); 42 | }; 43 | -------------------------------------------------------------------------------- /QuickLook.Native/QuickLook.Native32/WoW64HookHelper.h: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | #pragma once 19 | 20 | #include "stdafx.h" 21 | 22 | class WoW64HookHelper 23 | { 24 | public: 25 | static PWCHAR GetMsgWindowClassName() 26 | { 27 | return L"QUICKLOOK_WOW64HOOKHELPER_MSG_CLASS"; 28 | } 29 | 30 | static bool CheckStatus(); 31 | static bool Launch(); 32 | 33 | private: 34 | static void createJob(); 35 | }; 36 | -------------------------------------------------------------------------------- /QuickLook.Native/QuickLook.Native32/dllmain.cpp: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | #include "stdafx.h" 19 | #include "Shell32.h" 20 | 21 | BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) 22 | { 23 | switch (ul_reason_for_call) 24 | { 25 | case DLL_PROCESS_ATTACH: 26 | case DLL_THREAD_ATTACH: 27 | case DLL_THREAD_DETACH: 28 | case DLL_PROCESS_DETACH: 29 | default: 30 | break; 31 | } 32 | return TRUE; 33 | } 34 | -------------------------------------------------------------------------------- /QuickLook.Native/QuickLook.Native32/stdafx.cpp: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | #include "stdafx.h" 19 | 20 | // TODO: reference any additional headers you need in STDAFX.H 21 | // and not in this file 22 | -------------------------------------------------------------------------------- /QuickLook.Native/QuickLook.Native32/stdafx.h: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | #pragma once 19 | 20 | #include "targetver.h" 21 | 22 | #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers 23 | // Windows Header Files: 24 | #include 25 | 26 | 27 | // TODO: reference additional headers your program requires here 28 | #include 29 | #include 30 | #include 31 | #include 32 | #include 33 | #include 34 | #include 35 | #include 36 | 37 | #define MAX_PATH_EX 32767 38 | -------------------------------------------------------------------------------- /QuickLook.Native/QuickLook.Native32/targetver.h: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | #pragma once 19 | 20 | // Including SDKDDKVer.h defines the highest available Windows platform. 21 | 22 | // If you wish to build your application for a previous Windows platform, include WinSDKVer.h and 23 | // set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. 24 | 25 | #include 26 | -------------------------------------------------------------------------------- /QuickLook.Native/QuickLook.Native64/QuickLook.Native64.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /QuickLook.Native/QuickLook.WoW64HookHelper/QuickLook.WoW64HookHelper.h: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | #pragma once 19 | 20 | #include "stdafx.h" 21 | 22 | LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); 23 | void GetCurrentSelection(); 24 | -------------------------------------------------------------------------------- /QuickLook.Native/QuickLook.WoW64HookHelper/QuickLook.WoW64HookHelper.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | Header Files 20 | 21 | 22 | Header Files 23 | 24 | 25 | Header Files 26 | 27 | 28 | 29 | 30 | Source Files 31 | 32 | 33 | Source Files 34 | 35 | 36 | -------------------------------------------------------------------------------- /QuickLook.Native/QuickLook.WoW64HookHelper/stdafx.cpp: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | #include "stdafx.h" 19 | 20 | // TODO: reference any additional headers you need in STDAFX.H 21 | // and not in this file 22 | -------------------------------------------------------------------------------- /QuickLook.Native/QuickLook.WoW64HookHelper/stdafx.h: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | #pragma once 19 | 20 | #include "targetver.h" 21 | 22 | #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers 23 | // Windows Header Files: 24 | #include 25 | 26 | // C RunTime Header Files 27 | #include 28 | #include 29 | #include 30 | #include 31 | 32 | 33 | // TODO: reference additional headers your program requires here 34 | #define MAX_PATH_EX 32767 35 | -------------------------------------------------------------------------------- /QuickLook.Native/QuickLook.WoW64HookHelper/targetver.h: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | #pragma once 19 | 20 | // Including SDKDDKVer.h defines the highest available Windows platform. 21 | 22 | // If you wish to build your application for a previous Windows platform, include WinSDKVer.h and 23 | // set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. 24 | 25 | #include 26 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.AppViewer/ApkPackageParser/ApkInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace QuickLook.Plugin.AppViewer.ApkPackageParser; 4 | 5 | public class ApkInfo 6 | { 7 | public string VersionName { get; set; } 8 | 9 | public string VersionCode { get; set; } 10 | 11 | public string TargetSdkVersion { get; set; } 12 | 13 | public List Permissions { get; set; } = []; 14 | 15 | public string PackageName { get; set; } 16 | 17 | public string MinSdkVersion { get; set; } 18 | 19 | public string Icon { get; set; } 20 | 21 | public Dictionary Icons { get; set; } = []; 22 | 23 | public byte[] Logo { get; set; } 24 | 25 | public string Label { get; set; } 26 | 27 | public Dictionary Labels { get; set; } = []; 28 | 29 | public bool HasIcon 30 | { 31 | get 32 | { 33 | if (Icons.Count <= 0) 34 | { 35 | return !string.IsNullOrEmpty(Icon); 36 | } 37 | 38 | return true; 39 | } 40 | } 41 | 42 | public List Locales { get; set; } = []; 43 | 44 | public List Densities { get; set; } = []; 45 | 46 | public string LaunchableActivity { get; set; } 47 | } 48 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.AppViewer/ApkPackageParser/ApkParser.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using ICSharpCode.SharpZipLib.Zip; 19 | using System.IO; 20 | using System.Linq; 21 | 22 | namespace QuickLook.Plugin.AppViewer.ApkPackageParser; 23 | 24 | public static class ApkParser 25 | { 26 | public static ApkInfo Parse(string path) 27 | { 28 | using var zip = new ZipFile(path); 29 | 30 | var apkReader = new ApkReader.ApkReader(); 31 | ApkReader.ApkInfo baseInfo = apkReader.Read(path); 32 | ApkInfo info = new() 33 | { 34 | VersionName = baseInfo.VersionName, 35 | VersionCode = baseInfo.VersionCode, 36 | TargetSdkVersion = baseInfo.TargetSdkVersion, 37 | Permissions = baseInfo.Permissions, 38 | PackageName = baseInfo.PackageName, 39 | MinSdkVersion = baseInfo.MinSdkVersion, 40 | Icon = baseInfo.Icon, 41 | Icons = baseInfo.Icons, 42 | Label = baseInfo.Label, 43 | Labels = baseInfo.Labels, 44 | Locales = baseInfo.Locales, 45 | Densities = baseInfo.Densities, 46 | LaunchableActivity = baseInfo.LaunchableActivity, 47 | }; 48 | 49 | if (baseInfo.HasIcon) 50 | { 51 | ZipEntry entry = zip.GetEntry(baseInfo.Icons.Values.LastOrDefault()); 52 | using var s = new BinaryReader(zip.GetInputStream(entry)); 53 | info.Logo = s.ReadBytes((int)entry.Size); 54 | } 55 | return info; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.AppViewer/AppxPackageParser/AppxInfo.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using System.Drawing; 19 | 20 | namespace QuickLook.Plugin.AppViewer.AppxPackageParser; 21 | 22 | public class AppxInfo 23 | { 24 | public string ProductName { get; set; } 25 | 26 | public string ProductVersion { get; set; } 27 | 28 | public string Publisher { get; set; } 29 | 30 | public Bitmap Logo { get; set; } 31 | 32 | public string[] Capabilities { get; set; } 33 | } 34 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.AppViewer/AppxPackageParser/AppxParser.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using System.IO; 19 | 20 | namespace QuickLook.Plugin.AppViewer.AppxPackageParser; 21 | 22 | public static class AppxParser 23 | { 24 | public static AppxInfo Parse(string path) 25 | { 26 | bool isBundle = Path.GetExtension(path).ToLower() switch 27 | { 28 | ".msixbundle" or ".appxbundle" => true, 29 | _ => false, 30 | }; 31 | 32 | if (isBundle) 33 | { 34 | AppxBundleReader appxReader = new(path); 35 | 36 | return new AppxInfo 37 | { 38 | ProductName = appxReader.DisplayName, 39 | ProductVersion = appxReader.Version, 40 | Publisher = appxReader.Publisher, 41 | Logo = appxReader.Icon, 42 | Capabilities = appxReader.Capabilities, 43 | }; 44 | } 45 | else 46 | { 47 | AppxReader appxReader = new(path); 48 | 49 | return new AppxInfo 50 | { 51 | ProductName = appxReader.DisplayName, 52 | ProductVersion = appxReader.Version, 53 | Publisher = appxReader.Publisher, 54 | Logo = appxReader.Icon, 55 | Capabilities = appxReader.Capabilities, 56 | }; 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.AppViewer/IAppInfoPanel.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | namespace QuickLook.Plugin.AppViewer; 19 | 20 | public interface IAppInfoPanel 21 | { 22 | public void DisplayInfo(string path); 23 | 24 | public object Tag { get; set; } 25 | } 26 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.AppViewer/IpaPackageParser/IpaInfo.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using System.Linq; 19 | 20 | namespace QuickLook.Plugin.AppViewer.IpaPackageParser; 21 | 22 | public class IpaInfo 23 | { 24 | public string DisplayName { get; set; } 25 | 26 | public string VersionName { get; set; } 27 | 28 | public string VersionCode { get; set; } 29 | 30 | public string Identifier { get; set; } 31 | 32 | public string MinimumOSVersion { get; set; } 33 | 34 | public string PlatformVersion { get; set; } 35 | 36 | public string DeviceFamily { get; set; } 37 | 38 | public string[] Permissions { get; set; } = []; 39 | 40 | public byte[] Logo { get; set; } 41 | 42 | public bool HasIcon => Logo?.Any() ?? false; 43 | } 44 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.AppViewer/IpaPackageParser/IpaParser.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using System.Linq; 19 | 20 | namespace QuickLook.Plugin.AppViewer.IpaPackageParser; 21 | 22 | public static class IpaParser 23 | { 24 | public static IpaInfo Parse(string path) 25 | { 26 | IpaReader reader = new(path); 27 | 28 | return new IpaInfo() 29 | { 30 | DisplayName = reader.DisplayName, 31 | VersionName = reader.ShortVersionString, 32 | VersionCode = reader.Version, 33 | Identifier = reader.Identifier, 34 | DeviceFamily = reader.DeviceFamily, 35 | MinimumOSVersion = reader.MinimumOSVersion, 36 | PlatformVersion = reader.PlatformVersion, 37 | Permissions = [.. reader.InfoPlistDict.Keys.Where(key => key.StartsWith("NS") && key.EndsWith("UsageDescription"))], 38 | Logo = reader.Icon, 39 | }; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.AppViewer/MsiPackageParser/MsiInfo.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | namespace QuickLook.Plugin.AppViewer.MsiPackageParser; 19 | 20 | public sealed class MsiInfo 21 | { 22 | public string ProductVersion { get; set; } 23 | 24 | public string ProductName { get; set; } 25 | 26 | public string Manufacturer { get; set; } 27 | 28 | public string ProductCode { get; set; } 29 | 30 | public string UpgradeCode { get; set; } 31 | } 32 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.AppViewer/MsiPackageParser/MsiParser.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using WixToolset.Dtf.WindowsInstaller; 19 | 20 | namespace QuickLook.Plugin.AppViewer.MsiPackageParser; 21 | 22 | public static class MsiParser 23 | { 24 | public static MsiInfo Parse(string path) 25 | { 26 | MsiInfo info = new(); 27 | using var database = new Database(path, DatabaseOpenMode.ReadOnly); 28 | 29 | info.ProductVersion = database.ReadPropertyString(nameof(MsiInfo.ProductVersion)); 30 | info.ProductName = database.ReadPropertyString(nameof(MsiInfo.ProductName)); 31 | info.Manufacturer = database.ReadPropertyString(nameof(MsiInfo.Manufacturer)); 32 | info.ProductCode = database.ReadPropertyString(nameof(MsiInfo.ProductCode)); 33 | info.UpgradeCode = database.ReadPropertyString(nameof(MsiInfo.UpgradeCode)); 34 | 35 | return info; 36 | } 37 | 38 | private static string ReadPropertyString(this Database database, string propertyName) 39 | { 40 | using View view = database.OpenView($"SELECT `Value` FROM `Property` WHERE `Property`='{propertyName}'"); 41 | view.Execute(null); 42 | using Record record = view.Fetch(); 43 | return record?.GetString(1); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.AppViewer/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using System.Reflection; 19 | using System.Runtime.InteropServices; 20 | 21 | // General Information about an assembly is controlled through the following 22 | // set of attributes. Change these attribute values to modify the information 23 | // associated with an assembly. 24 | [assembly: AssemblyTitle("QuickLook.Plugin.AppViewer")] 25 | [assembly: AssemblyDescription("")] 26 | [assembly: AssemblyConfiguration("")] 27 | [assembly: AssemblyCompany("pooi.moe")] 28 | [assembly: AssemblyProduct("QuickLook.Plugin.AppViewer")] 29 | [assembly: AssemblyCopyright("Copyright © 2017-2025 QL-Win Contributors")] 30 | [assembly: AssemblyTrademark("")] 31 | [assembly: AssemblyCulture("")] 32 | 33 | // Setting ComVisible to false makes the types in this assembly not visible 34 | // to COM components. If you need to access a type in this assembly from 35 | // COM, set the ComVisible attribute to true on that type. 36 | [assembly: ComVisible(false)] 37 | 38 | // The following GUID is for the ID of the typelib if this project is exposed to COM 39 | [assembly: Guid("00d8f3b1-5be9-4ab8-ae68-16374001887a")] 40 | 41 | // Version information for an assembly consists of the following four values: 42 | // 43 | // Major Version 44 | // Minor Version 45 | // Build Number 46 | // Revision 47 | // 48 | // You can specify all the values or you can default the Build and Revision Numbers 49 | // by using the '*' as shown below: 50 | // [assembly: AssemblyVersion("1.0.*")] 51 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.AppViewer/Resources/android.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/QuickLook.Plugin/QuickLook.Plugin.AppViewer/Resources/android.png -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.AppViewer/Resources/ios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/QuickLook.Plugin/QuickLook.Plugin.AppViewer/Resources/ios.png -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.AppViewer/Resources/uni-app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/QuickLook.Plugin/QuickLook.Plugin.AppViewer/Resources/uni-app.png -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.ArchiveViewer/ArchiveFileListView.xaml.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using System; 19 | using System.Windows.Controls; 20 | 21 | namespace QuickLook.Plugin.ArchiveViewer; 22 | 23 | public partial class ArchiveFileListView : UserControl, IDisposable 24 | { 25 | public ArchiveFileListView() 26 | { 27 | InitializeComponent(); 28 | } 29 | 30 | public void Dispose() 31 | { 32 | GC.SuppressFinalize(this); 33 | 34 | IconManager.ClearCache(); 35 | } 36 | 37 | public void SetDataContext(object context) 38 | { 39 | treeGrid.DataContext = context; 40 | 41 | treeView.LayoutUpdated += (sender, e) => 42 | { 43 | // return when empty 44 | if (treeView.Items.Count == 0) 45 | return; 46 | 47 | // return when there are more than one root nodes 48 | if (treeView.Items.Count > 1) 49 | return; 50 | 51 | var root = (TreeViewItem)treeView.ItemContainerGenerator.ContainerFromItem(treeView.Items[0]); 52 | if (root == null) 53 | return; 54 | 55 | root.IsExpanded = true; 56 | }; 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.ArchiveViewer/ChardetReaderOptions.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using PureSharpCompress.Common; 19 | using PureSharpCompress.Readers; 20 | using System; 21 | using System.Text; 22 | using UtfUnknown; 23 | 24 | namespace QuickLook.Plugin.ArchiveViewer; 25 | 26 | internal class ChardetReaderOptions : ReaderOptions 27 | { 28 | public ChardetReaderOptions() 29 | { 30 | ArchiveEncoding = new ArchiveEncoding 31 | { 32 | CustomDecoder = Chardet 33 | }; 34 | } 35 | 36 | public string Chardet(byte[] bytes, int index, int count) 37 | { 38 | var buffer = new byte[count]; 39 | 40 | Array.Copy(bytes, index, buffer, 0, count); 41 | 42 | var encoding = CharsetDetector.DetectFromBytes(buffer).Detected?.Encoding ?? Encoding.Default; 43 | 44 | return encoding.GetString(buffer); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.ArchiveViewer/Extensions.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using System; 19 | using System.Collections.Generic; 20 | using System.Windows; 21 | using System.Windows.Media; 22 | 23 | namespace QuickLook.Plugin.ArchiveViewer; 24 | 25 | public static class Extensions 26 | { 27 | public static void ForEach(this IEnumerable enumeration, Action action) 28 | { 29 | foreach (var item in enumeration) 30 | action(item); 31 | } 32 | 33 | public static T GetDescendantByType(this Visual element) where T : class 34 | { 35 | if (element == null) 36 | return default(T); 37 | if (element.GetType() == typeof(T)) 38 | return element as T; 39 | 40 | T foundElement = null; 41 | (element as FrameworkElement)?.ApplyTemplate(); 42 | 43 | for (var i = 0; i < VisualTreeHelper.GetChildrenCount(element); i++) 44 | { 45 | var visual = VisualTreeHelper.GetChild(element, i) as Visual; 46 | foundElement = visual.GetDescendantByType(); 47 | if (foundElement != null) 48 | break; 49 | } 50 | 51 | return foundElement; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.ArchiveViewer/Plugin.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using System; 19 | using System.IO; 20 | using System.Linq; 21 | using System.Windows; 22 | using QuickLook.Common.Plugin; 23 | 24 | namespace QuickLook.Plugin.ArchiveViewer; 25 | 26 | public class Plugin : IViewer 27 | { 28 | private static readonly string[] _extensions = 29 | [ 30 | ".7z", 31 | ".bz2", 32 | ".cb7", ".cbr", ".cbt", ".cbz", ".crx", 33 | ".gz", 34 | ".jar", 35 | ".lz", 36 | ".nupkg", 37 | ".rar", 38 | ".tar", ".tgz", 39 | ".xz", 40 | ".zip", 41 | ]; 42 | 43 | private ArchiveInfoPanel _panel; 44 | 45 | public int Priority => -5; 46 | 47 | public void Init() 48 | { 49 | } 50 | 51 | public bool CanHandle(string path) 52 | { 53 | return !Directory.Exists(path) && _extensions.Any(path.ToLower().EndsWith); 54 | } 55 | 56 | public void Prepare(string path, ContextObject context) 57 | { 58 | context.PreferredSize = new Size { Width = 800, Height = 400 }; 59 | } 60 | 61 | public void View(string path, ContextObject context) 62 | { 63 | _panel = new ArchiveInfoPanel(path); 64 | 65 | context.ViewerContent = _panel; 66 | context.Title = $"{Path.GetFileName(path)}"; 67 | 68 | context.IsBusy = false; 69 | } 70 | 71 | public void Cleanup() 72 | { 73 | GC.SuppressFinalize(this); 74 | 75 | _panel?.Dispose(); 76 | _panel = null; 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.ArchiveViewer/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using System.Reflection; 19 | using System.Runtime.InteropServices; 20 | 21 | // General Information about an assembly is controlled through the following 22 | // set of attributes. Change these attribute values to modify the information 23 | // associated with an assembly. 24 | [assembly: AssemblyTitle("QuickLook.Plugin.ArchiveViewer")] 25 | [assembly: AssemblyDescription("")] 26 | [assembly: AssemblyConfiguration("")] 27 | [assembly: AssemblyCompany("pooi.moe")] 28 | [assembly: AssemblyProduct("QuickLook.Plugin.ArchiveViewer")] 29 | [assembly: AssemblyCopyright("Copyright © 2017-2025 QL-Win Contributors")] 30 | [assembly: AssemblyTrademark("")] 31 | [assembly: AssemblyCulture("")] 32 | 33 | // Setting ComVisible to false makes the types in this assembly not visible 34 | // to COM components. If you need to access a type in this assembly from 35 | // COM, set the ComVisible attribute to true on that type. 36 | [assembly: ComVisible(false)] 37 | 38 | // The following GUID is for the ID of the typelib if this project is exposed to COM 39 | [assembly: Guid("de2e3bc5-6ab2-4420-a160-48c7a7506c1c")] 40 | 41 | // Version information for an assembly consists of the following four values: 42 | // 43 | // Major Version 44 | // Minor Version 45 | // Build Number 46 | // Revision 47 | // 48 | // You can specify all the values or you can default the Build and Revision Numbers 49 | // by using the '*' as shown below: 50 | // [assembly: AssemblyVersion("1.0.*")] 51 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.CLSIDViewer/CLSIDInfoPanel.xaml: -------------------------------------------------------------------------------- 1 |  11 | 12 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.CLSIDViewer/CLSIDInfoPanel.xaml.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using QuickLook.Common.Plugin; 19 | using System.Windows; 20 | using System.Windows.Controls; 21 | 22 | namespace QuickLook.Plugin.CLSIDViewer; 23 | 24 | public partial class CLSIDInfoPanel : UserControl 25 | { 26 | public CLSIDInfoPanel() 27 | { 28 | DataContext = this; 29 | InitializeComponent(); 30 | } 31 | 32 | public void DisplayInfo(string path, ContextObject context) 33 | { 34 | Content = path.ToUpper() switch 35 | { 36 | CLSIDRegister.RecycleBin => new RecycleBinPanel(context), 37 | CLSIDRegister.ThisPC => new ThisPCPanel(context), 38 | _ => new TextBlock() 39 | { 40 | Text = $"Unsupported for {path}", 41 | HorizontalAlignment = HorizontalAlignment.Center, 42 | VerticalAlignment = VerticalAlignment.Center, 43 | }, 44 | }; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.CLSIDViewer/CLSIDRegister.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using Microsoft.Win32; 19 | using System; 20 | using System.Diagnostics; 21 | 22 | namespace QuickLook.Plugin.CLSIDViewer; 23 | 24 | internal static class CLSIDRegister 25 | { 26 | public const string RecycleBin = "::{645FF040-5081-101B-9F08-00AA002F954E}"; 27 | public const string ThisPC = "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}"; 28 | 29 | public static string GetName(string clsid) 30 | { 31 | try 32 | { 33 | // Such as `Computer\HKEY_CLASSES_ROOT\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}` 34 | string displayName = Registry.GetValue($@"HKEY_CLASSES_ROOT\CLSID\{clsid.Replace(":", string.Empty)}", string.Empty, null)?.ToString(); 35 | return displayName; 36 | } 37 | catch (Exception e) 38 | { 39 | Debug.WriteLine("Error reading registry: " + e.Message); 40 | } 41 | return null; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.CLSIDViewer/Plugin.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using QuickLook.Common.Plugin; 19 | using System; 20 | using System.Text.RegularExpressions; 21 | using System.Windows; 22 | 23 | namespace QuickLook.Plugin.CLSIDViewer; 24 | 25 | public class Plugin : IViewer 26 | { 27 | private CLSIDInfoPanel _ip; 28 | 29 | public int Priority => -1; 30 | 31 | public void Init() 32 | { 33 | } 34 | 35 | public bool CanHandle(string path) 36 | { 37 | if (string.IsNullOrWhiteSpace(path)) 38 | return false; 39 | 40 | // Use Regex to check whether a string like "::{645FF040-5081-101B-9F08-00AA002F954E}" 41 | bool isCLSID = path.StartsWith("::") 42 | && Regex.IsMatch(path, @"^::\{[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}\}$"); 43 | 44 | return isCLSID; 45 | } 46 | 47 | public void Prepare(string path, ContextObject context) 48 | { 49 | context.PreferredSize = path switch 50 | { 51 | CLSIDRegister.RecycleBin => new Size { Width = 400, Height = 150 }, 52 | CLSIDRegister.ThisPC => new Size { Width = 900, Height = 800 }, 53 | _ => new Size { Width = 520, Height = 192 }, 54 | }; 55 | } 56 | 57 | public void View(string path, ContextObject context) 58 | { 59 | _ip = new CLSIDInfoPanel(); 60 | _ip.DisplayInfo(path, context); 61 | 62 | context.ViewerContent = _ip; 63 | context.Title = $"{CLSIDRegister.GetName(path) ?? path}"; 64 | context.IsBusy = false; 65 | } 66 | 67 | public void Cleanup() 68 | { 69 | GC.SuppressFinalize(this); 70 | 71 | _ip = null; 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.CLSIDViewer/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using System.Reflection; 19 | using System.Runtime.InteropServices; 20 | 21 | // General Information about an assembly is controlled through the following 22 | // set of attributes. Change these attribute values to modify the information 23 | // associated with an assembly. 24 | [assembly: AssemblyTitle("QuickLook.Plugin.CLSIDViewer")] 25 | [assembly: AssemblyDescription("")] 26 | [assembly: AssemblyConfiguration("")] 27 | [assembly: AssemblyCompany("pooi.moe")] 28 | [assembly: AssemblyProduct("QuickLook.Plugin.CLSIDViewer")] 29 | [assembly: AssemblyCopyright("Copyright © 2017-2025 QL-Win Contributors")] 30 | [assembly: AssemblyTrademark("")] 31 | [assembly: AssemblyCulture("")] 32 | 33 | // Setting ComVisible to false makes the types in this assembly not visible 34 | // to COM components. If you need to access a type in this assembly from 35 | // COM, set the ComVisible attribute to true on that type. 36 | [assembly: ComVisible(false)] 37 | 38 | // The following GUID is for the ID of the typelib if this project is exposed to COM 39 | [assembly: Guid("538fd6ba-2af1-4dda-93a2-6c0a12b00843")] 40 | 41 | // Version information for an assembly consists of the following four values: 42 | // 43 | // Major Version 44 | // Minor Version 45 | // Build Number 46 | // Revision 47 | // 48 | // You can specify all the values or you can default the Build and Revision Numbers 49 | // by using the '*' as shown below: 50 | // [assembly: AssemblyVersion("1.0.*")] 51 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.CLSIDViewer/ThisPCPanel.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.CLSIDViewer/ThisPCPanel.xaml.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using QuickLook.Common.Plugin; 19 | using System.Windows; 20 | using System.Windows.Controls; 21 | 22 | namespace QuickLook.Plugin.CLSIDViewer; 23 | 24 | public partial class ThisPCPanel : UserControl 25 | { 26 | private readonly ContextObject _context; 27 | 28 | public ThisPCPanel(ContextObject context) 29 | { 30 | _context = context; 31 | 32 | DataContext = this; 33 | InitializeComponent(); 34 | Loaded += OnLoaded; 35 | } 36 | 37 | protected virtual void OnLoaded(object sender, RoutedEventArgs e) 38 | { 39 | _context.IsBusy = false; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.CLSIDViewer/Translations.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Recycle Bin is empty 6 | Empty Recycle Bin 7 | Are you sure you want to permanently delete these {0} item(s)? 8 | Total size {0}, {1} items 9 | 10 | 11 | 回收站是空的 12 | 清空回收站 13 | 您确定要永久删除这 {0} 个项目吗? 14 | 总大小 {0},共 {1} 个项目 15 | 16 | 17 | 回收站是空的 18 | 清空回收站 19 | 您確定要永久刪除這 {0} 個項目嗎? 20 | 總大小 {0},共 {1} 個項目 21 | 22 | 23 | ごみ箱は空です 24 | ごみ箱を空にする 25 | これらの {0} 項目を完全に削除してもよろしいですか? 26 | 合計サイズ {0}、{1} 項目 27 | 28 | 29 | 휴지통이 비어 있습니다 30 | 휴지통 비우기 31 | {0}개의 항목을 영구적으로 삭제하시겠습니까? 32 | 총 크기 {0}, 총 {1}개 항목 33 | 34 | 35 | La corbeille est vide 36 | Vider la corbeille 37 | Êtes-vous sûr de vouloir supprimer définitivement ces {0} élément(s) ? 38 | Taille totale {0}, {1} éléments 39 | 40 | 41 | Der Papierkorb ist leer 42 | Papierkorb leeren 43 | Möchten Sie diese {0} Elemente wirklich dauerhaft löschen? 44 | Gesamtgröße {0}, {1} Elemente 45 | 46 | 47 | La papelera está vacía 48 | Vaciar papelera 49 | ¿Está seguro de que desea eliminar permanentemente estos {0} elemento(s)? 50 | Tamaño total {0}, {1} elementos 51 | 52 | 53 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.CsvViewer/CsvViewerPanel.xaml: -------------------------------------------------------------------------------- 1 |  11 | 12 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.CsvViewer/Plugin.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using QuickLook.Common.Plugin; 19 | using System; 20 | using System.IO; 21 | using System.Windows; 22 | 23 | namespace QuickLook.Plugin.CsvViewer; 24 | 25 | public class Plugin : IViewer 26 | { 27 | private CsvViewerPanel _panel; 28 | 29 | public int Priority => 0; 30 | 31 | public void Init() 32 | { 33 | } 34 | 35 | public bool CanHandle(string path) 36 | { 37 | return !Directory.Exists(path) && (path.ToLower().EndsWith(".csv") || path.ToLower().EndsWith(".tsv")); 38 | } 39 | 40 | public void Prepare(string path, ContextObject context) 41 | { 42 | context.PreferredSize = new Size { Width = 1000, Height = 700 }; 43 | } 44 | 45 | public void View(string path, ContextObject context) 46 | { 47 | _panel = new CsvViewerPanel(); 48 | 49 | context.ViewerContent = _panel; 50 | context.Title = $"{Path.GetFileName(path)}"; 51 | _panel.LoadFile(path); 52 | 53 | context.IsBusy = false; 54 | } 55 | 56 | public void Cleanup() 57 | { 58 | GC.SuppressFinalize(this); 59 | 60 | _panel = null; 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.CsvViewer/app.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.FontViewer/.gitattributes: -------------------------------------------------------------------------------- 1 | # Ignore HTML files in Resources and subdirectories 2 | Resources/**/*.html linguist-vendored 3 | 4 | # Ignore CSS files in Resources and subdirectories 5 | Resources/**/*.css linguist-vendored 6 | 7 | # Ignore JS files in Resources and subdirectories 8 | Resources/**/*.js linguist-vendored 9 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.FontViewer/FreeTypeApi.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using FreeTypeSharp; 19 | using System; 20 | using System.IO; 21 | using System.Runtime.InteropServices; 22 | using static FreeTypeSharp.FT; 23 | 24 | namespace QuickLook.Plugin.FontViewer; 25 | 26 | internal unsafe static class FreeTypeApi 27 | { 28 | static FreeTypeApi() 29 | { 30 | FreeTypeDllMap.LoadNativeLibrary(); 31 | } 32 | 33 | public static string GetFontFamilyName(string path) 34 | { 35 | if (!File.Exists(path)) return null; 36 | 37 | FT_LibraryRec_* lib; 38 | FT_FaceRec_* face; 39 | FT_Error error = FT_Init_FreeType(&lib); 40 | 41 | error = FT_New_Face(lib, (byte*)Marshal.StringToHGlobalAnsi(path), IntPtr.Zero, &face); 42 | 43 | if (error == FT_Error.FT_Err_Ok) 44 | { 45 | var familyName = Marshal.PtrToStringAnsi((nint)face->family_name); 46 | return familyName; 47 | } 48 | 49 | return null; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.FontViewer/Translations.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | The quick brown fox jumped over the lazy dog. 1234567890 6 | 7 | 8 | Innovation in China 中国智造,惠及全球 0123456789 9 | 10 | 11 | Innovation in China 中國智造,惠及全球 0123456789 12 | 13 | 14 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.HtmlViewer/Plugin.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using System.IO; 19 | using System.Linq; 20 | using System.Windows; 21 | using System.Windows.Threading; 22 | using QuickLook.Common.Plugin; 23 | 24 | namespace QuickLook.Plugin.HtmlViewer; 25 | 26 | public class Plugin : IViewer 27 | { 28 | private static readonly string[] _extensions = [".mht", ".mhtml", ".htm", ".html"]; 29 | private static readonly string[] _supportedProtocols = ["http", "https"]; 30 | 31 | private WebpagePanel _panel; 32 | 33 | public int Priority => 0; 34 | 35 | public void Init() 36 | { 37 | } 38 | 39 | public bool CanHandle(string path) 40 | { 41 | return !Directory.Exists(path) && (_extensions.Any(path.ToLower().EndsWith) || 42 | path.ToLower().EndsWith(".url") && 43 | _supportedProtocols.Contains(Helper.GetUrlPath(path).Split(':')[0] 44 | .ToLower())); 45 | } 46 | 47 | public void Prepare(string path, ContextObject context) 48 | { 49 | context.PreferredSize = new Size(1280, 720); 50 | } 51 | 52 | public void View(string path, ContextObject context) 53 | { 54 | _panel = new WebpagePanel(); 55 | context.ViewerContent = _panel; 56 | context.Title = Path.IsPathRooted(path) ? Path.GetFileName(path) : path; 57 | 58 | if (path.ToLower().EndsWith(".url")) 59 | path = Helper.GetUrlPath(path); 60 | _panel.NavigateToFile(path); 61 | _panel.Dispatcher.Invoke(() => { context.IsBusy = false; }, DispatcherPriority.Loaded); 62 | } 63 | 64 | public void Cleanup() 65 | { 66 | _panel?.Dispose(); 67 | _panel = null; 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.HtmlViewer/Translations.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Viewing this file requires Microsoft Edge WebView2 to be installed. Click here to download it. 6 | 7 | 8 | Für das Anzeigen dieses Dateityps wird MS Edge WebView2 benötigt. Hier klicken zum Downloaden. 9 | 10 | 11 | Microsoft Edge WebView2 est requis pour afficher ce type de fichier. Cliquez ici pour le télécharger. 12 | 13 | 14 | このファイルを閲覧するには、Microsoft Edge WebView2 がインストールされている必要があります。 ここをクリックしてダウンロードを開始する。 15 | 16 | 17 | 이 파일을 표시하려면 Microsoft Edge WebView2가 필요합니다. 여기를 클릭해서 다운로드 하세요. 18 | 19 | 20 | 查看此文件需要安装 Microsoft Edge WebView2。 点击这里开始下载。 21 | 22 | 23 | 查看此文件需要安裝 Microsoft Edge WebView2。 點擊這裡開始下載。 24 | 25 | 26 | Es necesario tener instalado Microsoft Edge WebView2 para ver este fichero. Haga clic aquí para descargarlo. 27 | 28 | 29 | Visualizzare questo file richiede che Microsoft Edge WebView2 sia installato. Clicca qui per scaricarlo. 30 | 31 | 32 | مطلوب لعرض هذا الملف. انقر هنا لتحميله Microsoft Edge WebView2 33 | 34 | 35 | Wyświetlenie tego pliku wymaga zainstalowania Microsoft Edge WebView2. Kliknij tutaj, aby go pobrać. 36 | 37 | 38 | Για την προβολή αυτού του αρχείου απαιτείται εγκατάσταση του Microsoft Edge WebView2. Κάντε κλικ εδώ για να το κατεβάσετε. 39 | 40 | 41 | Для перегляду цього файлу потрібно встановити Microsoft Edge WebView2. Натисніть тут, щоб завантажити його. 42 | 43 | 44 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.HtmlViewer/WebpagePanel.xaml: -------------------------------------------------------------------------------- 1 |  9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.HtmlViewer/WebpagePanel.xaml.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017 Paddy Xu 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using System; 19 | using System.IO; 20 | using System.Text; 21 | using System.Windows.Controls; 22 | using System.Windows.Threading; 23 | using QuickLook.Common.Helpers; 24 | 25 | namespace QuickLook.Plugin.HtmlViewer 26 | { 27 | /// 28 | /// Interaction logic for UserControl1.xaml 29 | /// 30 | public partial class WebpagePanel : UserControl, IDisposable 31 | { 32 | public WebpagePanel() 33 | { 34 | InitializeComponent(); 35 | 36 | browser.Zoom = (int) (100 * DpiHelper.GetCurrentScaleFactor().Vertical); 37 | } 38 | 39 | public void Dispose() 40 | { 41 | browser?.Dispose(); 42 | browser = null; 43 | } 44 | 45 | public void Navigate(string path) 46 | { 47 | if (Path.IsPathRooted(path)) 48 | path = Helper.FilePathToFileUrl(path); 49 | 50 | browser.Dispatcher.Invoke(() => { browser.Navigate(path); }, DispatcherPriority.Loaded); 51 | } 52 | 53 | public void LoadHtml(string html) 54 | { 55 | var s = new MemoryStream(Encoding.UTF8.GetBytes(html ?? "")); 56 | 57 | browser.Dispatcher.Invoke(() => { browser.Navigate(s); }, DispatcherPriority.Loaded); 58 | } 59 | } 60 | } -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.ImageViewer/AnimatedImage/AnimationProvider.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using QuickLook.Common.Plugin; 19 | using System; 20 | using System.Threading.Tasks; 21 | using System.Windows; 22 | using System.Windows.Media.Animation; 23 | using System.Windows.Media.Imaging; 24 | 25 | namespace QuickLook.Plugin.ImageViewer.AnimatedImage; 26 | 27 | internal abstract class AnimationProvider : IDisposable 28 | { 29 | protected AnimationProvider(Uri path, MetaProvider meta, ContextObject contextObject) 30 | { 31 | Path = path; 32 | Meta = meta; 33 | ContextObject = contextObject; 34 | } 35 | 36 | public Uri Path { get; } 37 | 38 | public MetaProvider Meta { get; } 39 | 40 | public ContextObject ContextObject { get; } 41 | 42 | public Int32AnimationUsingKeyFrames Animator { get; protected set; } 43 | 44 | public abstract void Dispose(); 45 | 46 | public abstract Task GetThumbnail(Size renderSize); 47 | 48 | public abstract Task GetRenderedFrame(int index); 49 | } 50 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.ImageViewer/AnimatedImage/Providers/DcrawProvider.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using QuickLook.Common.Plugin; 19 | using System; 20 | 21 | namespace QuickLook.Plugin.ImageViewer.AnimatedImage.Providers; 22 | 23 | internal class DcrawProvider : NativeProvider 24 | { 25 | public DcrawProvider(Uri path, MetaProvider meta, ContextObject contextObject) : base(path, meta, contextObject) 26 | { 27 | throw new NotImplementedException(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.ImageViewer/AnimatedImage/Providers/SvgProvider.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using QuickLook.Common.Helpers; 19 | using QuickLook.Common.Plugin; 20 | using SkiaSharp; 21 | using Svg.Skia; 22 | using System; 23 | using System.IO; 24 | using System.Threading.Tasks; 25 | using System.Windows.Media.Imaging; 26 | 27 | namespace QuickLook.Plugin.ImageViewer.AnimatedImage.Providers; 28 | 29 | internal class SvgProvider : ImageMagickProvider 30 | { 31 | public SvgProvider(Uri path, MetaProvider meta, ContextObject contextObject) : base(path, meta, contextObject) 32 | { 33 | } 34 | 35 | public override Task GetRenderedFrame(int index) 36 | { 37 | return new Task(() => 38 | { 39 | try 40 | { 41 | using var svg = new SKSvg(); 42 | 43 | if (svg.Load(Path.LocalPath) is SKPicture picture) 44 | { 45 | using var ms = new MemoryStream(); 46 | 47 | // Render the SVG picture to a bitmap 48 | picture.ToImage(ms, SKColors.Empty, SKEncodedImageFormat.Png, 100, 1f, 1f, SKColorType.Rgba8888, SKAlphaType.Unpremul, null); 49 | return BitmapFrame.Create(ms, BitmapCreateOptions.None, BitmapCacheOption.OnLoad); 50 | } 51 | } 52 | catch (Exception e) 53 | { 54 | ProcessHelper.WriteLog(e.ToString()); 55 | } 56 | 57 | // Fallback to basic one 58 | return base.GetRenderedFrame(); 59 | }); 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.ImageViewer/LibAPNG.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/QuickLook.Plugin/QuickLook.Plugin.ImageViewer/LibAPNG.dll -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.ImageViewer/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using System.Reflection; 19 | using System.Runtime.InteropServices; 20 | 21 | // General Information about an assembly is controlled through the following 22 | // set of attributes. Change these attribute values to modify the information 23 | // associated with an assembly. 24 | [assembly: AssemblyTitle("QuickLook.Plugin.ImageViewer")] 25 | [assembly: AssemblyDescription("")] 26 | [assembly: AssemblyConfiguration("")] 27 | [assembly: AssemblyCompany("pooi.moe")] 28 | [assembly: AssemblyProduct("QuickLook.Plugin.ImageViewer")] 29 | [assembly: AssemblyCopyright("Copyright © 2017-2025 QL-Win Contributors")] 30 | [assembly: AssemblyTrademark("")] 31 | [assembly: AssemblyCulture("")] 32 | 33 | // Setting ComVisible to false makes the types in this assembly not visible 34 | // to COM components. If you need to access a type in this assembly from 35 | // COM, set the ComVisible attribute to true on that type. 36 | [assembly: ComVisible(false)] 37 | 38 | // The following GUID is for the ID of the typelib if this project is exposed to COM 39 | [assembly: Guid("fe5a5111-9607-4721-a7be-422754002ed8")] 40 | 41 | // Version information for an assembly consists of the following four values: 42 | // 43 | // Major Version 44 | // Minor Version 45 | // Build Number 46 | // Revision 47 | // 48 | // You can specify all the values or you can default the Build and Revision Numbers 49 | // by using the '*' as shown below: 50 | // [assembly: AssemblyVersion("1.0.*")] -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.ImageViewer/Resources/background-b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/QuickLook.Plugin/QuickLook.Plugin.ImageViewer/Resources/background-b.png -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.ImageViewer/Resources/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/QuickLook.Plugin/QuickLook.Plugin.ImageViewer/Resources/background.png -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.ImageViewer/exiv2-ql-32.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/QuickLook.Plugin/QuickLook.Plugin.ImageViewer/exiv2-ql-32.dll -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.ImageViewer/exiv2-ql-64.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/QuickLook.Plugin/QuickLook.Plugin.ImageViewer/exiv2-ql-64.dll -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.MarkdownViewer/.gitattributes: -------------------------------------------------------------------------------- 1 | # Ignore HTML files in Resources and subdirectories 2 | Resources/**/*.html linguist-vendored 3 | 4 | # Ignore CSS files in Resources and subdirectories 5 | Resources/**/*.css linguist-vendored 6 | 7 | # Ignore JS files in Resources and subdirectories 8 | Resources/**/*.js linguist-vendored 9 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.MarkdownViewer/GenerateEmbeddedResourcesHash.ps1: -------------------------------------------------------------------------------- 1 | param( 2 | [Parameter(Mandatory=$true)] 3 | [string]$ResourcesDir, 4 | 5 | [Parameter(Mandatory=$true)] 6 | [string]$OutputFile 7 | ) 8 | 9 | # Get all files in the Resources directory 10 | $files = Get-ChildItem -Path $ResourcesDir -Recurse -File | Sort-Object -Property FullName 11 | 12 | # Create SHA256 hasher 13 | $sha256 = [System.Security.Cryptography.SHA256]::Create() 14 | 15 | # Create memory stream to combine all file contents 16 | $memoryStream = New-Object System.IO.MemoryStream 17 | 18 | # Add each file's path and contents to the hash 19 | foreach ($file in $files) { 20 | # Get relative path and convert to lowercase for consistent hashing 21 | $relativePath = $file.FullName.Substring($ResourcesDir.Length + 1).ToLowerInvariant() 22 | $pathBytes = [System.Text.Encoding]::UTF8.GetBytes("QuickLook.Plugin.MarkdownViewer.Resources.$relativePath".Replace("\", "/")) 23 | $memoryStream.Write($pathBytes, 0, $pathBytes.Length) 24 | 25 | # Add file contents 26 | $fileBytes = [System.IO.File]::ReadAllBytes($file.FullName) 27 | $memoryStream.Write($fileBytes, 0, $fileBytes.Length) 28 | } 29 | 30 | # Calculate final hash 31 | $hashBytes = $sha256.ComputeHash($memoryStream.ToArray()) 32 | $hash = [BitConverter]::ToString($hashBytes).Replace("-", "").ToLowerInvariant() 33 | 34 | # Generate C# code 35 | $code = @" 36 | // 37 | // This file was generated during build to indicate changes to embedded resources. 38 | // 39 | 40 | namespace QuickLook.Plugin.MarkdownViewer 41 | { 42 | internal static class EmbeddedResourcesHash 43 | { 44 | internal const string Hash = "$hash"; 45 | } 46 | } 47 | "@ 48 | 49 | # Write to output file 50 | [System.IO.File]::WriteAllText($OutputFile, $code) 51 | 52 | # Cleanup 53 | $memoryStream.Dispose() 54 | $sha256.Dispose() 55 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.MarkdownViewer/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using System.Reflection; 19 | using System.Runtime.InteropServices; 20 | 21 | // General Information about an assembly is controlled through the following 22 | // set of attributes. Change these attribute values to modify the information 23 | // associated with an assembly. 24 | [assembly: AssemblyTitle("QuickLook.Plugin.ImageViewer")] 25 | [assembly: AssemblyDescription("")] 26 | [assembly: AssemblyConfiguration("")] 27 | [assembly: AssemblyCompany("pooi.moe")] 28 | [assembly: AssemblyProduct("QuickLook.Plugin.ImageViewer")] 29 | [assembly: AssemblyCopyright("Copyright © 2017-2025 QL-Win Contributors")] 30 | [assembly: AssemblyTrademark("")] 31 | [assembly: AssemblyCulture("")] 32 | 33 | // Setting ComVisible to false makes the types in this assembly not visible 34 | // to COM components. If you need to access a type in this assembly from 35 | // COM, set the ComVisible attribute to true on that type. 36 | [assembly: ComVisible(false)] 37 | 38 | // The following GUID is for the ID of the typelib if this project is exposed to COM 39 | [assembly: Guid("fe5a5111-9607-4721-a7be-422754002ed8")] 40 | 41 | // Version information for an assembly consists of the following four values: 42 | // 43 | // Major Version 44 | // Minor Version 45 | // Build Number 46 | // Revision 47 | // 48 | // You can specify all the values or you can default the Build and Revision Numbers 49 | // by using the '*' as shown below: 50 | // [assembly: AssemblyVersion("1.0.*")] 51 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.MarkdownViewer/Resources/highlight.js/styles/github-dark.min.css: -------------------------------------------------------------------------------- 1 | pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! 2 | Theme: GitHub Dark 3 | Description: Dark theme as seen on github.com 4 | Author: github.com 5 | Maintainer: @Hirse 6 | Updated: 2021-05-15 7 | 8 | Outdated base version: https://github.com/primer/github-syntax-dark 9 | Current colors taken from GitHub's CSS 10 | */.hljs{color:#c9d1d9;background:#0d1117}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#ff7b72}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#d2a8ff}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#79c0ff}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-code,.hljs-comment,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c} -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.MarkdownViewer/Resources/highlight.js/styles/github.min.css: -------------------------------------------------------------------------------- 1 | pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! 2 | Theme: GitHub 3 | Description: Light theme as seen on github.com 4 | Author: github.com 5 | Maintainer: @Hirse 6 | Updated: 2021-05-15 7 | 8 | Outdated base version: https://github.com/primer/github-syntax-light 9 | Current colors taken from GitHub's CSS 10 | */.hljs{color:#24292e;background:#fff}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#d73a49}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#6f42c1}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#005cc5}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#032f62}.hljs-built_in,.hljs-symbol{color:#e36209}.hljs-code,.hljs-comment,.hljs-formula{color:#6a737d}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#22863a}.hljs-subst{color:#24292e}.hljs-section{color:#005cc5;font-weight:700}.hljs-bullet{color:#735c0f}.hljs-emphasis{color:#24292e;font-style:italic}.hljs-strong{color:#24292e;font-weight:700}.hljs-addition{color:#22863a;background-color:#f0fff4}.hljs-deletion{color:#b31d28;background-color:#ffeef0} -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.PDFViewer/AsyncPageToThumbnailConverter.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using System; 19 | using System.Globalization; 20 | using System.Threading.Tasks; 21 | using System.Windows.Data; 22 | using System.Windows.Media.Imaging; 23 | 24 | namespace QuickLook.Plugin.PDFViewer; 25 | 26 | internal class AsyncPageToThumbnailConverter : IMultiValueConverter 27 | { 28 | private static readonly BitmapImage Loading = 29 | new BitmapImage( 30 | new Uri("pack://application:,,,/QuickLook.Plugin.PdfViewer;component/Resources/loading.png")); 31 | 32 | public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 33 | { 34 | if (values.Length < 2) 35 | throw new Exception("PageIdToImageConverter"); 36 | 37 | if (values[0] is not PdfDocumentWrapper handle) return null; 38 | 39 | var pageId = (int)values[1]; 40 | if (pageId < 0) return null; 41 | 42 | var task = Task.Run(() => 43 | { 44 | try 45 | { 46 | return handle.RenderThumbnail(pageId); 47 | } 48 | catch (Exception) 49 | { 50 | return Loading; 51 | } 52 | }); 53 | 54 | return new NotifyTaskCompletion(task, Loading); 55 | } 56 | 57 | public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 58 | { 59 | throw new NotImplementedException(); 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.PDFViewer/PdfDocumentWrapper.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using System; 19 | using System.IO; 20 | using PdfiumViewer; 21 | 22 | namespace QuickLook.Plugin.PDFViewer; 23 | 24 | public class PdfDocumentWrapper : IDisposable 25 | { 26 | public PdfDocumentWrapper(Stream stream, string password = null) 27 | { 28 | PdfStream = new MemoryStream((int)stream.Length); 29 | stream.CopyTo(PdfStream); 30 | 31 | PdfDocument = PdfDocument.Load(PdfStream, password); 32 | } 33 | 34 | public PdfDocument PdfDocument { get; private set; } 35 | 36 | public MemoryStream PdfStream { get; private set; } 37 | 38 | public void Dispose() 39 | { 40 | PdfDocument.Dispose(); 41 | PdfDocument = null; 42 | PdfStream.Dispose(); 43 | PdfStream = null; 44 | } 45 | 46 | public void Refresh() 47 | { 48 | var oldD = PdfDocument; 49 | 50 | PdfStream.Position = 0; 51 | var newObj = new PdfDocumentWrapper(PdfStream); 52 | PdfDocument = newObj.PdfDocument; 53 | PdfStream = newObj.PdfStream; 54 | 55 | oldD.Dispose(); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.PDFViewer/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using System.Reflection; 19 | using System.Runtime.InteropServices; 20 | 21 | // General Information about an assembly is controlled through the following 22 | // set of attributes. Change these attribute values to modify the information 23 | // associated with an assembly. 24 | [assembly: AssemblyTitle("QuickLook.Plugin.PDFViewer")] 25 | [assembly: AssemblyDescription("")] 26 | [assembly: AssemblyConfiguration("")] 27 | [assembly: AssemblyCompany("pooi.moe")] 28 | [assembly: AssemblyProduct("QuickLook.Plugin.PDFViewer")] 29 | [assembly: AssemblyCopyright("Copyright © 2017-2025 QL-Win Contributors")] 30 | [assembly: AssemblyTrademark("")] 31 | [assembly: AssemblyCulture("")] 32 | 33 | // Setting ComVisible to false makes the types in this assembly not visible 34 | // to COM components. If you need to access a type in this assembly from 35 | // COM, set the ComVisible attribute to true on that type. 36 | [assembly: ComVisible(false)] 37 | 38 | // The following GUID is for the ID of the typelib if this project is exposed to COM 39 | [assembly: Guid("a82ac69c-edf5-4f0d-8cbd-8e5e3c06e64d")] 40 | 41 | // Version information for an assembly consists of the following four values: 42 | // 43 | // Major Version 44 | // Minor Version 45 | // Build Number 46 | // Revision 47 | // 48 | // You can specify all the values or you can default the Build and Revision Numbers 49 | // by using the '*' as shown below: 50 | // [assembly: AssemblyVersion("1.0.*")] -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.PDFViewer/Resources/loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/QuickLook.Plugin/QuickLook.Plugin.PDFViewer/Resources/loading.png -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.PDFViewer/Translations.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Enter Password 6 | This file is password protected. Please enter the password to open the file. 7 | Check your password 8 | Open File 9 | Cancel 10 | 11 | 12 | パスワード入力 13 | このファイルではパスワードで保護されています。ファイルを開くにはパスワードを入力してください。 14 | パスワードを確認してください 15 | ファイルを開く 16 | キャンセル 17 | 18 | 19 | Digite a senha 20 | Arquivo protegido por senha. Digite a senha para abrir o arquivo. 21 | Verifique sua senha 22 | Abrir arquivo 23 | Cancelar 24 | 25 | 26 | 输入密码 27 | 此文件受密码保护。请输入密码以打开文件。 28 | 检查您的密码 29 | 打开文件 30 | 取消 31 | 32 | 33 | 輸入密碼 34 | 此檔案受密碼保護。請輸入密碼以開啟檔案。 35 | 檢查您的密碼 36 | 開啟檔案 37 | 取消 38 | 39 | 40 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.PEViewer/FluentBorder.cs: -------------------------------------------------------------------------------- 1 | using System.Windows; 2 | using System.Windows.Controls; 3 | using System.Windows.Media; 4 | 5 | namespace QuickLook.Plugin.PEViewer; 6 | 7 | public class FluentBorder : Decorator 8 | { 9 | public static readonly DependencyProperty CornerRadiusProperty = 10 | DependencyProperty.Register("CornerRadius", typeof(CornerRadius), typeof(FluentBorder), new FrameworkPropertyMetadata(new CornerRadius())); 11 | 12 | public CornerRadius CornerRadius 13 | { 14 | get => (CornerRadius)GetValue(CornerRadiusProperty); 15 | set => SetValue(CornerRadiusProperty, value); 16 | } 17 | 18 | public static readonly DependencyProperty BackgroundProperty = 19 | DependencyProperty.Register("Background", typeof(Brush), typeof(FluentBorder), new FrameworkPropertyMetadata(Brushes.Transparent)); 20 | 21 | public Brush Background 22 | { 23 | get => (Brush)GetValue(BackgroundProperty); 24 | set => SetValue(BackgroundProperty, value); 25 | } 26 | 27 | protected override void OnRender(DrawingContext drawingContext) 28 | { 29 | if (Child != null) 30 | { 31 | Rect rect = new(new Point(0, 0), RenderSize); 32 | drawingContext.DrawRoundedRectangle(Background, new Pen(Brushes.Transparent, 1), rect, CornerRadius.TopLeft, CornerRadius.TopRight); 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.PEViewer/PEImageParser/ImageCoffHeader.cs: -------------------------------------------------------------------------------- 1 | namespace QuickLook.Plugin.PEViewer.PEImageParser; 2 | 3 | /// 4 | /// Represents the COFF header of a PE image file. 5 | /// 6 | public sealed class ImageCoffHeader 7 | { 8 | /// 9 | /// Gets the number that identifies the type of target machine. 10 | /// 11 | public ImageMachineType Machine { get; internal set; } 12 | 13 | /// 14 | /// Gets the number of sections. This indicates the size of the section table, which immediately follows the headers. 15 | /// 16 | public ushort NumberOfSections { get; internal set; } 17 | 18 | /// 19 | /// Gets the low 32 bits of the number of seconds since 01.01.1970 00:00:00, that indicates when the file was created. 20 | /// 21 | public uint TimeDateStamp { get; internal set; } 22 | 23 | /// 24 | /// Gets the file offset of the COFF symbol table, or zero if no COFF symbol table is present. This value should be zero for an image because COFF debugging information is deprecated. 25 | /// 26 | public uint PointerToSymbolTable { get; internal set; } 27 | 28 | /// 29 | /// Gets the number of entries in the symbol table. This data can be used to locate the string table, which immediately follows the symbol table. This value should be zero for an image because COFF debugging information is deprecated. 30 | /// 31 | public uint NumberOfSymbols { get; internal set; } 32 | 33 | /// 34 | /// Gets the size of the optional header, which is required for executable files but not for object files. This value should be zero for an object file. 35 | /// 36 | public ushort SizeOfOptionalHeader { get; internal set; } 37 | 38 | /// 39 | /// Gets the flags that indicate the attributes of the file. 40 | /// 41 | public ImageCharacteristics Characteristics { get; internal set; } 42 | 43 | internal ImageCoffHeader() 44 | { 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.PEViewer/PEImageParser/ImageDataDirectory.cs: -------------------------------------------------------------------------------- 1 | using System.Diagnostics; 2 | 3 | namespace QuickLook.Plugin.PEViewer.PEImageParser; 4 | 5 | /// 6 | /// Represents a data directory of a PE image file. 7 | /// 8 | [DebuggerDisplay($"{nameof(ImageDataDirectory)}: Name = {{Name}}, VirtualAddress = {{VirtualAddress}}, Size = {{Size}}")] 9 | public sealed class ImageDataDirectory 10 | { 11 | /// 12 | /// Gets the name of the data directory. This may not be a valid enum value of , if the image has more than 14 data directories. 13 | /// 14 | public ImageDataDirectoryName Name { get; private set; } 15 | 16 | /// 17 | /// Gets the address of the first byte of a table or string that Windows uses. 18 | /// 19 | public uint VirtualAddress { get; private set; } 20 | 21 | /// 22 | /// Gets size of a table or string that Windows uses. 23 | /// 24 | public uint Size { get; private set; } 25 | 26 | internal ImageDataDirectory(ImageDataDirectoryName name, uint virtualAddress, uint size) 27 | { 28 | Name = name; 29 | VirtualAddress = virtualAddress; 30 | Size = size; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.PEViewer/PEImageParser/ImageDataDirectoryName.cs: -------------------------------------------------------------------------------- 1 | namespace QuickLook.Plugin.PEViewer.PEImageParser; 2 | 3 | /// 4 | /// Specifies the name of a data directory entry of a PE image file. 5 | /// 6 | public enum ImageDataDirectoryName 7 | { 8 | /// 9 | /// Specifies the export table address and size. 10 | /// 11 | ExportTable = 0, 12 | 13 | /// 14 | /// Specifies the import table address and size. 15 | /// 16 | ImportTable = 1, 17 | 18 | /// 19 | /// Specifies the resource table address and size. 20 | /// 21 | ResourceTable = 2, 22 | 23 | /// 24 | /// Specifies the exception table address and size. 25 | /// 26 | ExceptionTable = 3, 27 | 28 | /// 29 | /// Specifies the attribute certificate table address and size. 30 | /// 31 | CertificateTable = 4, 32 | 33 | /// 34 | /// Specifies the base relocation table address and size. 35 | /// 36 | BaseRelocationTable = 5, 37 | 38 | /// 39 | /// Specifies the debug data starting address and size. 40 | /// 41 | DebugDirectory = 6, 42 | 43 | /// 44 | /// Reserved, must be zero. 45 | /// 46 | Architecture = 7, 47 | 48 | /// 49 | /// Specifies the RVA of the value to be stored in the global pointer register. The size member of this structure must be set to zero. 50 | /// 51 | GlobalPointer = 8, 52 | 53 | /// 54 | /// Specifies the thread local storage (TLS) table address and size. 55 | /// 56 | TlsTable = 9, 57 | 58 | /// 59 | /// Specifies the load configuration table address and size. 60 | /// 61 | LoadConfigurationTable = 10, 62 | 63 | /// 64 | /// Specifies the bound import table address and size. 65 | /// 66 | BoundImportTable = 11, 67 | 68 | /// 69 | /// Specifies the import address table address and size. 70 | /// 71 | ImportAddressTable = 12, 72 | 73 | /// 74 | /// Specifies the delay import descriptor address and size. 75 | /// 76 | DelayImportDescriptors = 13, 77 | 78 | /// 79 | /// Specifies the CLR runtime header address and size. 80 | /// 81 | ClrRuntimeHeader = 14, 82 | } 83 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.PEViewer/PEImageParser/ImageDllCharacteristics.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace QuickLook.Plugin.PEViewer.PEImageParser; 4 | 5 | /// 6 | /// Specifies the values for the property of the optional header of a PE image file. 7 | /// 8 | [Flags] 9 | public enum ImageDllCharacteristics : ushort 10 | { 11 | /// 12 | /// Specifies that the image can handle a high entropy 64-bit virtual address space. 13 | /// 14 | HighEntropyVA = 0x20, 15 | 16 | /// 17 | /// Specifies that the DLL can be relocated at load time. 18 | /// 19 | DynamicBase = 0x40, 20 | 21 | /// 22 | /// Specifies that Code Integrity checks are enforced. 23 | /// 24 | ForceIntegrity = 0x80, 25 | 26 | /// 27 | /// Specifies that the image is NX compatible. 28 | /// 29 | NxCompatible = 0x100, 30 | 31 | /// 32 | /// Specifies that the image is isolation aware, but the image is not isolated. 33 | /// 34 | IsolationAware = 0x200, 35 | 36 | /// 37 | /// Specifies that the image does not use structured exception (SE) handling. No SE handler may be called in the image. 38 | /// 39 | NoSEH = 0x400, 40 | 41 | /// 42 | /// Specifies that the image is not bound. 43 | /// 44 | DoNotBind = 0x800, 45 | 46 | /// 47 | /// Specifies that the image must execute in an AppContainer. 48 | /// 49 | AppContainer = 0x1000, 50 | 51 | /// 52 | /// Specifies that the image is a WDM driver. 53 | /// 54 | WdmDriver = 0x2000, 55 | 56 | /// 57 | /// Specifies that the image supports Control Flow Guard. 58 | /// 59 | ControlFlowGuard = 0x4000, 60 | 61 | /// 62 | /// Specifies that the image is terminal Server aware. 63 | /// 64 | TerminalServerAware = 0x8000, 65 | } 66 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.PEViewer/PEImageParser/ImageOptionalHeader32.cs: -------------------------------------------------------------------------------- 1 | namespace QuickLook.Plugin.PEViewer.PEImageParser; 2 | 3 | /// 4 | /// Represents the optional header of a PE image file for x86 assemblies. 5 | /// 6 | public sealed class ImageOptionalHeader32 : ImageOptionalHeader 7 | { 8 | /// 9 | /// Gets the address that is relative to the image base of the beginning-of-data section when it is loaded into memory. 10 | /// 11 | public uint BaseOfData { get; internal set; } 12 | 13 | /// 14 | /// Gets the preferred address of the first byte of image when loaded into memory; must be a multiple of 64 K. The default for DLLs is 0x10000000. The default for Windows CE EXEs is 0x00010000. The default for Windows NT, Windows 2000, Windows XP, Windows 95, Windows 98, and Windows Me is 0x00400000. 15 | /// 16 | public uint ImageBase { get; internal set; } 17 | 18 | /// 19 | /// Gets the size of the stack to reserve. Only is committed; the rest is made available one page at a time until the reserve size is reached. 20 | /// 21 | public uint SizeOfStackReserve { get; internal set; } 22 | 23 | /// 24 | /// Gets the size of the stack to commit. 25 | /// 26 | public uint SizeOfStackCommit { get; internal set; } 27 | 28 | /// 29 | /// Gets the size of the local heap space to reserve. Only is committed; the rest is made available one page at a time until the reserve size is reached. 30 | /// 31 | public uint SizeOfHeapReserve { get; internal set; } 32 | 33 | /// 34 | /// Gets the size of the local heap space to commit. 35 | /// 36 | public uint SizeOfHeapCommit { get; internal set; } 37 | 38 | internal ImageOptionalHeader32() 39 | { 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.PEViewer/PEImageParser/ImageOptionalHeader64.cs: -------------------------------------------------------------------------------- 1 | namespace QuickLook.Plugin.PEViewer.PEImageParser; 2 | 3 | /// 4 | /// Represents the optional header of a PE image file for x64 assemblies. 5 | /// 6 | public sealed class ImageOptionalHeader64 : ImageOptionalHeader 7 | { 8 | /// 9 | /// Gets the preferred address of the first byte of image when loaded into memory; must be a multiple of 64 K. The default for DLLs is 0x10000000. The default for Windows CE EXEs is 0x00010000. The default for Windows NT, Windows 2000, Windows XP, Windows 95, Windows 98, and Windows Me is 0x00400000. 10 | /// 11 | public ulong ImageBase { get; internal set; } 12 | 13 | /// 14 | /// Gets the size of the stack to reserve. Only is committed; the rest is made available one page at a time until the reserve size is reached. 15 | /// 16 | public ulong SizeOfStackReserve { get; internal set; } 17 | 18 | /// 19 | /// Gets the size of the stack to commit. 20 | /// 21 | public ulong SizeOfStackCommit { get; internal set; } 22 | 23 | /// 24 | /// Gets the size of the local heap space to reserve. Only is committed; the rest is made available one page at a time until the reserve size is reached. 25 | /// 26 | public ulong SizeOfHeapReserve { get; internal set; } 27 | 28 | /// 29 | /// Gets the size of the local heap space to commit. 30 | /// 31 | public ulong SizeOfHeapCommit { get; internal set; } 32 | 33 | internal ImageOptionalHeader64() 34 | { 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.PEViewer/PEImageParser/ImageSubsystem.cs: -------------------------------------------------------------------------------- 1 | namespace QuickLook.Plugin.PEViewer.PEImageParser; 2 | 3 | /// 4 | /// Specifies the values for the property of the optional header of a PE image file. 5 | /// 6 | public enum ImageSubsystem : ushort 7 | { 8 | /// 9 | /// Specifies an unknown subsystem. 10 | /// 11 | Unknown = 0, 12 | 13 | /// 14 | /// Specifies device drivers and native Windows processes. 15 | /// 16 | Native = 1, 17 | 18 | /// 19 | /// Specifies the Windows graphical user interface (GUI) subsystem. 20 | /// 21 | WindowsGui = 2, 22 | 23 | /// 24 | /// Specifies the Windows character subsystem. 25 | /// 26 | WindowsCui = 3, 27 | 28 | /// 29 | /// Specifies the OS/2 character subsystem. 30 | /// 31 | OS2Cui = 5, 32 | 33 | /// 34 | /// Specifies the Posix character subsystem. 35 | /// 36 | PosixCui = 7, 37 | 38 | /// 39 | /// Specifies a native Win9x driver. 40 | /// 41 | NativeWindows = 8, 42 | 43 | /// 44 | /// Specifies Windows CE. 45 | /// 46 | WindowsCEGui = 9, 47 | 48 | /// 49 | /// Specifies an Extensible Firmware Interface (EFI) application. 50 | /// 51 | EfiApplication = 10, 52 | 53 | /// 54 | /// Specifies an EFI driver with boot services. 55 | /// 56 | EfiBootServiceDriver = 11, 57 | 58 | /// 59 | /// Specifies an EFI driver with run-time services. 60 | /// 61 | EfiRuntimeDriver = 12, 62 | 63 | /// 64 | /// Specifies an EFI ROM image. 65 | /// 66 | EfiRom = 13, 67 | 68 | /// 69 | /// Specifies XBOX. 70 | /// 71 | XBox = 14, 72 | 73 | /// 74 | /// Specifies a Windows boot application. 75 | /// 76 | WindowsBootApplication = 16, 77 | } 78 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.PEViewer/PEImageParser/PEImageParseException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace QuickLook.Plugin.PEViewer.PEImageParser; 4 | 5 | /// 6 | /// The exception that is thrown when parsing of a fails. 7 | /// 8 | public sealed class PEImageParseException : Exception 9 | { 10 | /// 11 | /// Gets the offset within the image file at which parsing failed. 12 | /// 13 | public int Offset { get; private set; } 14 | 15 | /// 16 | /// Initializes a new instance of the class. 17 | /// 18 | /// The offset within the image file at which parsing failed. 19 | /// The message that describes the error. 20 | public PEImageParseException(int offset, string message) : base(message) 21 | { 22 | _ = message ?? throw new ArgumentNullException(nameof(message)); 23 | 24 | Offset = offset; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.PEViewer/Plugin.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using QuickLook.Common.Plugin; 19 | using System; 20 | using System.IO; 21 | using System.Linq; 22 | using System.Windows; 23 | 24 | namespace QuickLook.Plugin.PEViewer; 25 | 26 | public class Plugin : IViewer 27 | { 28 | private static readonly string[] _extensions = 29 | [ 30 | ".exe", ".sys", ".scr", ".ocx", ".cpl", ".bpl", 31 | ".dll", ".ax", ".drv", ".vxd", 32 | ".mui", ".mun", 33 | ".tlb", 34 | ".efi", ".mz", 35 | ]; 36 | 37 | private PEInfoPanel _ip; 38 | private string _path; 39 | 40 | public int Priority => 0; 41 | 42 | public void Init() 43 | { 44 | } 45 | 46 | public bool CanHandle(string path) 47 | { 48 | return !Directory.Exists(path) && _extensions.Any(path.ToLower().EndsWith); 49 | } 50 | 51 | public void Prepare(string path, ContextObject context) 52 | { 53 | context.PreferredSize = new Size { Width = 520, Height = 192 }; 54 | } 55 | 56 | public void View(string path, ContextObject context) 57 | { 58 | _path = path; 59 | _ip = new PEInfoPanel(); 60 | 61 | _ip.DisplayInfo(_path); 62 | _ip.Tag = context; 63 | 64 | context.ViewerContent = _ip; 65 | context.IsBusy = false; 66 | } 67 | 68 | public void Cleanup() 69 | { 70 | GC.SuppressFinalize(this); 71 | 72 | _ip = null; 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.PEViewer/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using System.Reflection; 19 | using System.Runtime.InteropServices; 20 | 21 | // General Information about an assembly is controlled through the following 22 | // set of attributes. Change these attribute values to modify the information 23 | // associated with an assembly. 24 | [assembly: AssemblyTitle("QuickLook.Plugin.PEViewer")] 25 | [assembly: AssemblyDescription("")] 26 | [assembly: AssemblyConfiguration("")] 27 | [assembly: AssemblyCompany("pooi.moe")] 28 | [assembly: AssemblyProduct("QuickLook.Plugin.PEViewer")] 29 | [assembly: AssemblyCopyright("Copyright © 2017-2025 QL-Win Contributors")] 30 | [assembly: AssemblyTrademark("")] 31 | [assembly: AssemblyCulture("")] 32 | 33 | // Setting ComVisible to false makes the types in this assembly not visible 34 | // to COM components. If you need to access a type in this assembly from 35 | // COM, set the ComVisible attribute to true on that type. 36 | [assembly: ComVisible(false)] 37 | 38 | // The following GUID is for the ID of the typelib if this project is exposed to COM 39 | [assembly: Guid("eb7d1f10-6e04-4f7e-96a0-4e18359fbd30")] 40 | 41 | // Version information for an assembly consists of the following four values: 42 | // 43 | // Major Version 44 | // Minor Version 45 | // Build Number 46 | // Revision 47 | // 48 | // You can specify all the values or you can default the Build and Revision Numbers 49 | // by using the '*' as shown below: 50 | // [assembly: AssemblyVersion("1.0.*")] 51 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.PEViewer/Translations.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Total Size 6 | File Version 7 | Product Version 8 | 9 | 10 | Tamanho total 11 | Versão do arquivo 12 | Versão do produto 13 | 14 | 15 | 总大小 16 | 文件版本 17 | 产品版本 18 | 19 | 20 | 縂大小 21 | 檔案版本 22 | 產品版本 23 | 24 | 25 | 合計サイズ 26 | ファイルバージョン 27 | 製品バージョン 28 | 29 | 30 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.PluginInstaller/App.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using QuickLook.Common.Helpers; 19 | using System; 20 | using System.IO; 21 | using System.Linq; 22 | using System.Reflection; 23 | 24 | namespace QuickLook.Plugin.PluginInstaller; 25 | 26 | internal static class App 27 | { 28 | /// 29 | /// 30 | /// 31 | public static string UserPluginPath 32 | { 33 | get 34 | { 35 | // Just in case 36 | static string Fallback() => Path.Combine(SettingHelper.LocalDataPath, "QuickLook.Plugin\\"); 37 | 38 | try 39 | { 40 | var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies() 41 | .First(a => a.GetName(false).Name == "QuickLook"); 42 | var appType = loadedAssemblies?.GetType("QuickLook.App"); 43 | var fieldInfo = appType?.GetField(nameof(UserPluginPath), BindingFlags.Public | BindingFlags.Static); 44 | 45 | return (fieldInfo?.GetValue(null) as string) ?? Fallback(); 46 | } 47 | catch 48 | { 49 | return Fallback(); 50 | } 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.PluginInstaller/Plugin.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using QuickLook.Common.ExtensionMethods; 19 | using QuickLook.Common.Plugin; 20 | using System; 21 | using System.IO; 22 | using System.Windows; 23 | 24 | namespace QuickLook.Plugin.PluginInstaller; 25 | 26 | public class Plugin : IViewer 27 | { 28 | public int Priority => int.MaxValue; 29 | 30 | public void Init() 31 | { 32 | CleanupOldPlugins(App.UserPluginPath); 33 | } 34 | 35 | public bool CanHandle(string path) 36 | { 37 | return !Directory.Exists(path) && path.ToLower().EndsWith(".qlplugin"); 38 | } 39 | 40 | public void Prepare(string path, ContextObject context) 41 | { 42 | context.PreferredSize = new Size { Width = 460, Height = 200 }; 43 | 44 | context.Title = string.Empty; 45 | context.TitlebarOverlap = false; 46 | context.TitlebarBlurVisibility = false; 47 | context.TitlebarColourVisibility = false; 48 | context.CanResize = false; 49 | context.FullWindowDragging = true; 50 | } 51 | 52 | public void View(string path, ContextObject context) 53 | { 54 | context.ViewerContent = new PluginInfoPanel(path, context); 55 | 56 | context.IsBusy = false; 57 | } 58 | 59 | public void Cleanup() 60 | { 61 | } 62 | 63 | private static void CleanupOldPlugins(string folder) 64 | { 65 | if (!Directory.Exists(folder)) 66 | return; 67 | 68 | Directory.GetFiles(folder, "*.to_be_deleted", SearchOption.AllDirectories).ForEach(file => 69 | { 70 | try 71 | { 72 | File.Delete(file); 73 | } 74 | catch (Exception) 75 | { 76 | // ignored 77 | } 78 | }); 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.PluginInstaller/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using System.Reflection; 19 | using System.Runtime.InteropServices; 20 | 21 | // General Information about an assembly is controlled through the following 22 | // set of attributes. Change these attribute values to modify the information 23 | // associated with an assembly. 24 | [assembly: AssemblyTitle("QuickLook.Plugin.PluginInstaller")] 25 | [assembly: AssemblyDescription("")] 26 | [assembly: AssemblyConfiguration("")] 27 | [assembly: AssemblyCompany("pooi.moe")] 28 | [assembly: AssemblyProduct("QuickLook.Plugin.PluginInstaller")] 29 | [assembly: AssemblyCopyright("Copyright © 2017-2025 QL-Win Contributors")] 30 | [assembly: AssemblyTrademark("")] 31 | [assembly: AssemblyCulture("")] 32 | 33 | // Setting ComVisible to false makes the types in this assembly not visible 34 | // to COM components. If you need to access a type in this assembly from 35 | // COM, set the ComVisible attribute to true on that type. 36 | [assembly: ComVisible(false)] 37 | 38 | // The following GUID is for the ID of the typelib if this project is exposed to COM 39 | [assembly: Guid("042b5cb9-aaf0-4a61-b847-deb2e06f60ab")] 40 | 41 | // Version information for an assembly consists of the following four values: 42 | // 43 | // Major Version 44 | // Minor Version 45 | // Build Number 46 | // Revision 47 | // 48 | // You can specify all the values or you can default the Build and Revision Numbers 49 | // by using the '*' as shown below: 50 | // [assembly: AssemblyVersion("1.0.*")] 51 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.TextViewer/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using System.Reflection; 19 | using System.Runtime.InteropServices; 20 | 21 | // General Information about an assembly is controlled through the following 22 | // set of attributes. Change these attribute values to modify the information 23 | // associated with an assembly. 24 | [assembly: AssemblyTitle("QuickLook.Plugin.TextViewer")] 25 | [assembly: AssemblyDescription("")] 26 | [assembly: AssemblyConfiguration("")] 27 | [assembly: AssemblyCompany("pooi.moe")] 28 | [assembly: AssemblyProduct("QuickLook.Plugin.TextViewer")] 29 | [assembly: AssemblyCopyright("Copyright © 2017-2025 QL-Win Contributors")] 30 | [assembly: AssemblyTrademark("")] 31 | [assembly: AssemblyCulture("")] 32 | 33 | // Setting ComVisible to false makes the types in this assembly not visible 34 | // to COM components. If you need to access a type in this assembly from 35 | // COM, set the ComVisible attribute to true on that type. 36 | [assembly: ComVisible(false)] 37 | 38 | // The following GUID is for the ID of the typelib if this project is exposed to COM 39 | [assembly: Guid("ae041682-e3a1-44f6-8bb4-916a98d89fbe")] 40 | 41 | // Version information for an assembly consists of the following four values: 42 | // 43 | // Major Version 44 | // Minor Version 45 | // Build Number 46 | // Revision 47 | // 48 | // You can specify all the values or you can default the Build and Revision Numbers 49 | // by using the '*' as shown below: 50 | // [assembly: AssemblyVersion("1.0.*")] -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.TextViewer/Syntax/Dark/Lyric.xshd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | : 12 | 13 | 14 | 15 | 16 | 17 | 18 | , 19 | 20 | 21 | 22 | 23 | 24 | \{ 25 | \} 26 | 27 | 28 | \[ 29 | \] 30 | 31 | 32 | \b0[xX][0-9a-fA-F]+|(\b\d+(\.[0-9]+)?|\.[0-9]+)([eE][+-]?[0-9]+)? 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.TextViewer/Syntax/Light/INI.xshd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | &|\/"',;=:- 32 | 33 | 34 | ; 35 | 36 | 37 | 38 | # 39 | 40 | 41 | 42 | " 43 | " 44 | 45 | 46 | 47 | [ 48 | ] 49 | 50 | 51 | = 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.TextViewer/Syntax/Light/JSON.xshd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | &<>~%^*()-+=!|\/{}[]:;"' , ? 34 | 35 | 36 | // 37 | 38 | 39 | 40 | /* 41 | */ 42 | 43 | 44 | 45 | " 46 | " 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.TextViewer/Syntax/Light/Registry.xshd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | &|\/()[]"',;@=:- 32 | 33 | 34 | ; 35 | 36 | 37 | 38 | " 39 | " 40 | 41 | 42 | 43 | [ 44 | ] 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.TextViewer/Syntax/Light/ShellScript.xshd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | # 10 | 11 | 12 | 13 | " 14 | " 15 | 16 | 17 | 18 | ' 19 | ' 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.VideoViewer/GlobalUsing.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | extern alias MediaInfoWrapper; 19 | 20 | global using MediaInfoLib = MediaInfoWrapper::MediaInfo.MediaInfo; 21 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.VideoViewer/QLVRegistry.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using QuickLook.Common.ExtensionMethods; 3 | using QuickLook.Plugin.VideoViewer.Properties; 4 | using RegFileParser; 5 | 6 | namespace QuickLook.Plugin.VideoViewer; 7 | 8 | internal static class QLVRegistry 9 | { 10 | internal static void Register() 11 | { 12 | var obj = new RegFileObject(Resource.QLV); 13 | 14 | obj.RegValues.ForEach(k => k.Value.ForEach(k2 => ImportKey(k2.Value))); 15 | } 16 | 17 | private static void ImportKey(RegValueObject key) 18 | { 19 | var kind = RegistryValueKind.Unknown; 20 | 21 | if (key.Type == "REG_NONE") 22 | kind = RegistryValueKind.None; 23 | else if (key.Type == "REG_SZ") 24 | kind = RegistryValueKind.String; 25 | else if (key.Type == "EXPAND_SZ") 26 | kind = RegistryValueKind.ExpandString; 27 | else if (key.Type == "REG_BINARY") 28 | kind = RegistryValueKind.Binary; 29 | else if (key.Type == "REG_DWORD") 30 | kind = RegistryValueKind.DWord; 31 | else if (key.Type == "REG_MULTI_SZ") 32 | kind = RegistryValueKind.MultiString; 33 | else if (key.Type == "REG_QWORD") 34 | kind = RegistryValueKind.QWord; 35 | 36 | Registry.SetValue(key.ParentKey, key.Entry, key.Value, kind); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.VideoViewer/Resources/QLV.reg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/Resources/QLV.reg -------------------------------------------------------------------------------- /QuickLook.Plugin/QuickLook.Plugin.VideoViewer/Resources/empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/Resources/empty.png -------------------------------------------------------------------------------- /QuickLook/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /QuickLook/App.xaml: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | ./Fonts/#Segoe MDL2 Assets 21 | ./Fonts/#Segoe Fluent Icons 22 | 23 | 24 | -------------------------------------------------------------------------------- /QuickLook/Controls/BusyDecorator/BusyDecorator.xaml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /QuickLook/Controls/BusyDecorator/ISpinable.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | namespace QuickLook.Controls.BusyDecorator; 19 | 20 | /// 21 | /// Represents a spinable control 22 | /// 23 | internal interface ISpinable 24 | { 25 | /// 26 | /// Gets or sets the current spin (angle) animation of the icon. 27 | /// 28 | bool Spin { get; set; } 29 | 30 | /// 31 | /// Gets or sets the duration of the spinning animation (in seconds). This will stop and start the spin animation. 32 | /// 33 | double SpinDuration { get; set; } 34 | } 35 | -------------------------------------------------------------------------------- /QuickLook/Controls/GlassLayer/100-50-5-monochrome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/QuickLook/Controls/GlassLayer/100-50-5-monochrome.png -------------------------------------------------------------------------------- /QuickLook/Controls/GlassLayer/ElementCoordinateConverter.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using System; 19 | using System.Globalization; 20 | using System.Windows; 21 | using System.Windows.Data; 22 | 23 | namespace QuickLook.Controls.GlassLayer; 24 | 25 | public sealed class ElementCoordinateConverter : DependencyObject, IValueConverter 26 | { 27 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 28 | { 29 | var glass = value as GlassLayer; 30 | 31 | if (glass?.BlurredElement == null) 32 | return Rect.Empty; 33 | 34 | var target = glass.BlurredElement; 35 | 36 | var trans = glass.TransformToVisual(target); 37 | var p = trans.Transform(new Point(0, 0)); 38 | 39 | return new Rect { X = p.X, Y = p.Y, Width = glass.ActualWidth, Height = glass.ActualHeight }; 40 | } 41 | 42 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 43 | { 44 | throw new NotImplementedException(); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /QuickLook/Controls/GlassLayer/GaussianBlur.fx: -------------------------------------------------------------------------------- 1 | sampler2D Texture1Sampler : register(S0); 2 | 3 | float2 Direction : register(C0); 4 | 5 | float4 DdxDdy : register(C1); 6 | 7 | // http://dev.theomader.com/gaussian-kernel-calculator/ 8 | static const float HalfWidth = 80; 9 | static const float poisson[161] = 10 | { 11 | 0.004411,0.004466,0.004521,0.004576,0.004631,0.004686,0.004741,0.004796,0.004851,0.004905, 12 | 0.004959,0.005014,0.005067,0.005121,0.005175,0.005228,0.005281,0.005334,0.005386,0.005438, 13 | 0.00549,0.005541,0.005592,0.005642,0.005692,0.005742,0.005791,0.005839,0.005888,0.005935, 14 | 0.005982,0.006029,0.006074,0.00612,0.006164,0.006208,0.006252,0.006294,0.006336,0.006377, 15 | 0.006418,0.006458,0.006497,0.006535,0.006572,0.006609,0.006644,0.006679,0.006713,0.006746, 16 | 0.006779,0.00681,0.00684,0.00687,0.006898,0.006926,0.006952,0.006978,0.007003,0.007026, 17 | 0.007049,0.00707,0.007091,0.00711,0.007128,0.007146,0.007162,0.007177,0.007191,0.007204, 18 | 0.007216,0.007227,0.007236,0.007245,0.007252,0.007258,0.007263,0.007267,0.00727,0.007272, 19 | 0.007272, 20 | 0.007272,0.00727,0.007267,0.007263,0.007258,0.007252,0.007245,0.007236,0.007227,0.007216, 21 | 0.007204,0.007191,0.007177,0.007162,0.007146,0.007128,0.00711,0.007091,0.00707,0.007049, 22 | 0.007026,0.007003,0.006978,0.006952,0.006926,0.006898,0.00687,0.00684,0.00681,0.006779, 23 | 0.006746,0.006713,0.006679,0.006644,0.006609,0.006572,0.006535,0.006497,0.006458,0.006418, 24 | 0.006377,0.006336,0.006294,0.006252,0.006208,0.006164,0.00612,0.006074,0.006029,0.005982, 25 | 0.005935,0.005888,0.005839,0.005791,0.005742,0.005692,0.005642,0.005592,0.005541,0.00549, 26 | 0.005438,0.005386,0.005334,0.005281,0.005228,0.005175,0.005121,0.005067,0.005014,0.004959, 27 | 0.004905,0.004851,0.004796,0.004741,0.004686,0.004631,0.004576,0.004521,0.004466,0.004411 28 | }; 29 | 30 | float4 main(float2 uv : TEXCOORD) : COLOR 31 | { 32 | float4 color = { 0, 0, 0, 1 }; 33 | 34 | for (int delta = -HalfWidth; delta <= HalfWidth; delta++) 35 | { 36 | float2 coord; 37 | coord.x = uv.x + delta * DdxDdy.x * Direction.x; 38 | coord.y = uv.y + delta * DdxDdy.w * Direction.y; 39 | coord = saturate(coord); 40 | 41 | // Sample pixel 42 | color += tex2D(Texture1Sampler, coord) * poisson[delta + HalfWidth]; 43 | } 44 | 45 | return(color); 46 | } 47 | 48 | 49 | -------------------------------------------------------------------------------- /QuickLook/Controls/GlassLayer/GaussianBlur.ps: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/QuickLook/Controls/GlassLayer/GaussianBlur.ps -------------------------------------------------------------------------------- /QuickLook/Controls/WebClientEx.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using System; 19 | using System.IO; 20 | using System.Net; 21 | 22 | namespace QuickLook.Controls; 23 | 24 | public class WebClientEx : WebClient 25 | { 26 | static WebClientEx() 27 | { 28 | #if NETFRAMEWORK 29 | // Fix issue #1577 30 | // System.Net.WebException: 'The request was aborted: Could not create SSL/TLS secure channel.' 31 | ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 32 | #endif 33 | } 34 | 35 | public WebClientEx() : this(60 * 1000) 36 | { 37 | } 38 | 39 | public WebClientEx(int timeout) 40 | { 41 | Timeout = timeout; 42 | } 43 | 44 | public int Timeout { get; set; } 45 | 46 | protected override WebRequest GetWebRequest(Uri address) 47 | { 48 | var request = base.GetWebRequest(address); 49 | 50 | request.Timeout = Timeout; 51 | 52 | return request; 53 | } 54 | 55 | public MemoryStream DownloadDataStream(string address) 56 | { 57 | var buffer = DownloadData(address); 58 | 59 | return new MemoryStream(buffer); 60 | } 61 | 62 | public MemoryStream DownloadDataStream(Uri address) 63 | { 64 | var buffer = DownloadData(address); 65 | 66 | return new MemoryStream(buffer); 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /QuickLook/Converters/BooleanToKeyTimeConverter.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using System; 19 | using System.Globalization; 20 | using System.Windows; 21 | using System.Windows.Data; 22 | using System.Windows.Media.Animation; 23 | 24 | namespace QuickLook.Converters; 25 | 26 | public sealed class BooleanToKeyTimeConverter : DependencyObject, IValueConverter 27 | { 28 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 29 | { 30 | if (value == null) 31 | return KeyTime.FromTimeSpan(TimeSpan.MaxValue); 32 | 33 | var v = (bool)value; 34 | 35 | return v 36 | ? KeyTime.FromTimeSpan(parameter as TimeSpan? ?? TimeSpan.MaxValue) 37 | : KeyTime.FromTimeSpan(TimeSpan.MaxValue); 38 | } 39 | 40 | object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 41 | { 42 | throw new NotImplementedException(); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /QuickLook/Converters/BooleanToVisibilityCollapsedConverter.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using System; 19 | using System.Globalization; 20 | using System.Windows; 21 | using System.Windows.Data; 22 | 23 | namespace QuickLook.Converters; 24 | 25 | public sealed class BooleanToVisibilityCollapsedConverter : DependencyObject, IValueConverter 26 | { 27 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 28 | { 29 | if (value == null) 30 | return Visibility.Collapsed; 31 | 32 | var v = (bool)value; 33 | 34 | return v ? Visibility.Collapsed : Visibility.Visible; 35 | } 36 | 37 | object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 38 | { 39 | throw new NotImplementedException(); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /QuickLook/Converters/BooleanToVisibilityHiddenConverter.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using System; 19 | using System.Globalization; 20 | using System.Windows; 21 | using System.Windows.Data; 22 | 23 | namespace QuickLook.Converters; 24 | 25 | public sealed class BooleanToVisibilityHiddenConverter : DependencyObject, IValueConverter 26 | { 27 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 28 | { 29 | if (value == null) 30 | return Visibility.Hidden; 31 | 32 | var v = (bool)value; 33 | 34 | return v ? Visibility.Hidden : Visibility.Visible; 35 | } 36 | 37 | object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 38 | { 39 | throw new NotImplementedException(); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /QuickLook/Converters/ScaledValueConverter.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using System; 19 | using System.Globalization; 20 | using System.Windows.Data; 21 | 22 | namespace QuickLook.Converters; 23 | 24 | public class ScaledValueConverter : IValueConverter 25 | { 26 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 27 | { 28 | double scalingFactor = 0; 29 | if (parameter != null) 30 | double.TryParse((string)parameter, out scalingFactor); 31 | 32 | if (Math.Abs(scalingFactor) < 0.0001) 33 | return double.NaN; 34 | 35 | return (double)value * scalingFactor; 36 | } 37 | 38 | public object ConvertBack(object value, Type targetType, object parameter, 39 | CultureInfo culture) 40 | { 41 | throw new Exception("The method or operation is not implemented."); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /QuickLook/Converters/WindowStateMaximizedToThicknessConverter.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using System; 19 | using System.Globalization; 20 | using System.Windows; 21 | using System.Windows.Data; 22 | 23 | namespace QuickLook.Converters; 24 | 25 | public sealed class WindowStateMaximizedToThicknessConverter : DependencyObject, IValueConverter 26 | { 27 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 28 | { 29 | var zero = new Thickness(); 30 | var def = parameter as Thickness? ?? new Thickness(); 31 | 32 | if (value == null) 33 | return zero; 34 | 35 | var state = value as WindowState? ?? WindowState.Maximized; 36 | 37 | return state == WindowState.Maximized ? def : zero; 38 | } 39 | 40 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 41 | { 42 | throw new NotImplementedException(); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /QuickLook/Converters/WindowStateNormalToThicknessConverter.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using System; 19 | using System.Globalization; 20 | using System.Windows; 21 | using System.Windows.Data; 22 | 23 | namespace QuickLook.Converters; 24 | 25 | public sealed class WindowStateNormalToThicknessConverter : DependencyObject, IValueConverter 26 | { 27 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 28 | { 29 | var zero = new Thickness(); 30 | var def = parameter as Thickness? ?? new Thickness(); 31 | 32 | if (value == null) 33 | return zero; 34 | 35 | var state = value as WindowState? ?? WindowState.Normal; 36 | 37 | return state == WindowState.Maximized ? zero : def; 38 | } 39 | 40 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 41 | { 42 | throw new NotImplementedException(); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /QuickLook/FocusMonitor.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using System.Threading; 19 | using System.Threading.Tasks; 20 | 21 | namespace QuickLook; 22 | 23 | internal class FocusMonitor 24 | { 25 | private static FocusMonitor _instance; 26 | 27 | public bool IsRunning { get; private set; } 28 | 29 | public void Start() 30 | { 31 | if (IsRunning) 32 | return; 33 | 34 | IsRunning = true; 35 | 36 | new Task(() => 37 | { 38 | var last = string.Empty; 39 | 40 | while (IsRunning) 41 | { 42 | Thread.Sleep(500); 43 | 44 | if (NativeMethods.QuickLook.GetFocusedWindowType() == 45 | NativeMethods.QuickLook.FocusedWindowType.Invalid) 46 | continue; 47 | 48 | var path = NativeMethods.QuickLook.GetCurrentSelection(); 49 | if (IsRunning && last != path) 50 | { 51 | last = path; 52 | PipeServerManager.SendMessage(PipeMessages.Switch, path); 53 | } 54 | } 55 | }).Start(); 56 | } 57 | 58 | public void Stop() 59 | { 60 | IsRunning = false; 61 | } 62 | 63 | internal static FocusMonitor GetInstance() 64 | { 65 | return _instance ??= new FocusMonitor(); 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /QuickLook/FodyWeavers.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | -------------------------------------------------------------------------------- /QuickLook/Fonts/segfluent.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/QuickLook/Fonts/segfluent.ttf -------------------------------------------------------------------------------- /QuickLook/Fonts/segmdl2.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/QuickLook/Fonts/segmdl2.ttf -------------------------------------------------------------------------------- /QuickLook/Helpers/SystemHelper.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using System.Linq; 19 | 20 | namespace QuickLook.Helpers; 21 | 22 | internal class SystemHelper 23 | { 24 | public static bool IsGPUInBlacklist() 25 | { 26 | // https://github.com/QL-Win/QuickLook/issues/442 27 | return NativeMethods.WMI.GetGPUNames().Any(g => g.StartsWith("Intel(R) HD Graphics 4")); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /QuickLook/NativeMethods/SHCore.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.InteropServices; 2 | 3 | namespace QuickLook.NativeMethods; 4 | 5 | internal static class SHCore 6 | { 7 | public enum PROCESS_DPI_AWARENESS 8 | { 9 | PROCESS_DPI_UNAWARE, 10 | PROCESS_SYSTEM_DPI_AWARE, 11 | PROCESS_PER_MONITOR_DPI_AWARE 12 | } 13 | 14 | [DllImport("shcore.dll")] 15 | public static extern uint SetProcessDpiAwareness(PROCESS_DPI_AWARENESS awareness); 16 | } 17 | -------------------------------------------------------------------------------- /QuickLook/NativeMethods/WMI.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using System; 19 | using System.Collections.Generic; 20 | using System.Diagnostics; 21 | using System.Management; 22 | using System.Runtime.InteropServices; 23 | 24 | namespace QuickLook.NativeMethods; 25 | 26 | internal static class WMI 27 | { 28 | public static List GetGPUNames() 29 | { 30 | try 31 | { 32 | using var searcher = new ManagementObjectSearcher(@"root\CIMV2", @"SELECT * FROM Win32_VideoController"); 33 | List names = []; 34 | 35 | foreach (var obj in searcher.Get()) 36 | if (obj["Name"] is string name) 37 | names.Add(name); 38 | 39 | return names; 40 | } 41 | catch (ManagementException e) 42 | { 43 | Debug.WriteLine($"ManagementException caught: {e.Message}"); 44 | } 45 | catch (COMException e) 46 | { 47 | Debug.WriteLine($"COMException caught: {e.Message}"); 48 | } 49 | catch (Exception e) 50 | { 51 | Debug.WriteLine($"General exception caught: {e.Message}"); 52 | } 53 | 54 | return []; 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /QuickLook/Plugin/InfoPanel/Plugin.cs: -------------------------------------------------------------------------------- 1 | // Copyright © 2017-2025 QL-Win Contributors 2 | // 3 | // This file is part of QuickLook program. 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with this program. If not, see . 17 | 18 | using QuickLook.Common.Plugin; 19 | using System.Windows; 20 | 21 | namespace QuickLook.Plugin.InfoPanel; 22 | 23 | public class Plugin : IViewer 24 | { 25 | private InfoPanel _ip; 26 | 27 | public int Priority => int.MinValue; 28 | 29 | public void Init() 30 | { 31 | } 32 | 33 | public bool CanHandle(string sample) 34 | { 35 | return true; 36 | } 37 | 38 | public void Prepare(string path, ContextObject context) 39 | { 40 | context.PreferredSize = new Size { Width = 453, Height = 172 }; 41 | 42 | context.Title = string.Empty; 43 | context.TitlebarOverlap = false; 44 | context.TitlebarBlurVisibility = false; 45 | context.TitlebarColourVisibility = false; 46 | context.CanResize = false; 47 | context.FullWindowDragging = true; 48 | } 49 | 50 | public void View(string path, ContextObject context) 51 | { 52 | _ip = new InfoPanel(); 53 | context.ViewerContent = _ip; 54 | 55 | _ip.DisplayInfo(path); 56 | context.IsBusy = false; 57 | } 58 | 59 | public void Cleanup() 60 | { 61 | if (_ip == null) 62 | return; 63 | 64 | _ip.Stop = true; 65 | _ip = null; 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /QuickLook/Resources/app.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/QuickLook/Resources/app.ico -------------------------------------------------------------------------------- /QuickLook/Resources/app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/QuickLook/Resources/app.png -------------------------------------------------------------------------------- /QuickLook/Resources/app.svgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/QuickLook/Resources/app.svgz -------------------------------------------------------------------------------- /QuickLook/Resources/app_16.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/QuickLook/Resources/app_16.ico -------------------------------------------------------------------------------- /QuickLook/Resources/app_black.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/QuickLook/Resources/app_black.ico -------------------------------------------------------------------------------- /QuickLook/Resources/app_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/QuickLook/Resources/app_black.png -------------------------------------------------------------------------------- /QuickLook/Resources/app_black_16.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/QuickLook/Resources/app_black_16.ico -------------------------------------------------------------------------------- /QuickLook/Resources/app_white.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/QuickLook/Resources/app_white.ico -------------------------------------------------------------------------------- /QuickLook/Resources/app_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/QuickLook/Resources/app_white.png -------------------------------------------------------------------------------- /QuickLook/Resources/app_white_16.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QL-Win/QuickLook/22a5d69ac81a35ec851b4c0be74dd5222da821ad/QuickLook/Resources/app_white_16.ico -------------------------------------------------------------------------------- /Scripts/pack-7z.ps1: -------------------------------------------------------------------------------- 1 | $version = git describe --always --tags --exclude latest 2 | 3 | Set-Location ../Build 4 | 5 | Write-Output "This file makes QuickLook portable." >> .\Package\portable.lock 6 | 7 | Remove-Item .\QuickLook-$version.7z -ErrorAction SilentlyContinue 8 | Remove-Item -Recurse .\Package\QuickLook.WoW64HookHelper.exe -ErrorAction SilentlyContinue 9 | 7z.exe a .\QuickLook-$version.7z .\Package\* -t7z -mx=9 -ms=on -m0=lzma2 -mf=BCJ2 -r -y 10 | 11 | Remove-Item .\Package\portable.lock 12 | -------------------------------------------------------------------------------- /Scripts/pack-all.ps1: -------------------------------------------------------------------------------- 1 | # Please build the msi installation package in advance 2 | powershell -file "pack-7z.ps1" 3 | powershell -file "pack-setup.ps1" 4 | powershell -file "pack-appx.ps1" 5 | powershell -file "sign-appx.ps1" 6 | Pause 7 | -------------------------------------------------------------------------------- /Scripts/pack-appx.ps1: -------------------------------------------------------------------------------- 1 | $version = git describe --always --tags "--abbrev=0" --exclude latest 2 | 3 | if($version.Split('.').Length.Equals(3)) 4 | { 5 | $version += ".0" 6 | } 7 | 8 | function Update-Version($path) 9 | { 10 | $xml = [xml](Get-Content $path) 11 | $xml.Package.Identity.Version="$version" 12 | $xml.Save("$path") 13 | } 14 | 15 | if(-not (Test-Path env:CI)) 16 | { 17 | # prapare folders 18 | Remove-Item -Recurse ..\Build\Appx -ErrorAction SilentlyContinue 19 | Copy-Item -Recurse ..\Build\Package ..\Build\Appx\Package 20 | Copy-Item -Recurse ..\Build\Assets ..\Build\Appx\Assets 21 | Copy-item ..\Build\AppxManifest.xml ..\Build\Appx\AppxManifest.xml 22 | Remove-Item -Recurse ..\Build\Appx\Package\QuickLook.WoW64HookHelper.exe -ErrorAction SilentlyContinue 23 | 24 | # set version to git version 25 | Update-Version("..\Build\Appx\AppxManifest.xml") 26 | 27 | # generate resources 28 | $priExe = 'C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x86\makepri.exe' 29 | .$priExe new /pr ..\Build\Appx /cf ..\Build\priconfig.xml /of ..\Build\Appx\resources.pri 30 | 31 | # packing 32 | $packExe = 'C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x86\makeappx.exe' 33 | $folder = '..\Build\Appx\' 34 | 35 | .$packExe pack /l /o /d ..\Build\Appx /p ..\Build\QuickLook-$version.appx 36 | } 37 | -------------------------------------------------------------------------------- /Scripts/pack-setup.ps1: -------------------------------------------------------------------------------- 1 | $version = git describe --always --tags --exclude latest 2 | 3 | Set-Location ../Build 4 | 5 | Remove-Item .\Package.7z -ErrorAction SilentlyContinue 6 | Remove-Item -Recurse .\Package\QuickLook.WoW64HookHelper.exe -ErrorAction SilentlyContinue 7 | 7z a Package.7z .\Package\* -t7z -mx=9 -ms=on -m0=lzma2 -mf=BCJ2 -r -y 8 | makemica micasetup.json 9 | 10 | Rename-Item .\QuickLook.exe QuickLook-$version.exe 11 | Remove-Item .\Package.7z -ErrorAction SilentlyContinue -------------------------------------------------------------------------------- /Scripts/pack-zip.ps1: -------------------------------------------------------------------------------- 1 | $version = git describe --always --tags --exclude latest 2 | 3 | Start-Sleep -s 1 4 | 5 | Write-Output "This file makes QuickLook portable." >> ..\Build\Package\portable.lock 6 | 7 | Remove-Item ..\Build\QuickLook-$version.zip -ErrorAction SilentlyContinue 8 | Remove-Item -Recurse ..\Build\Package\QuickLook.WoW64HookHelper.exe -ErrorAction SilentlyContinue 9 | Compress-Archive ..\Build\Package\* ..\Build\QuickLook-$version.zip 10 | 11 | Remove-Item ..\Build\Package\portable.lock -------------------------------------------------------------------------------- /Scripts/rename-msi.ps1: -------------------------------------------------------------------------------- 1 | $version = git describe --always --tags --exclude latest 2 | 3 | Remove-Item ..\Build\QuickLook-$version.msi -ErrorAction SilentlyContinue 4 | Rename-Item ..\Build\QuickLook.msi QuickLook-$version.msi -------------------------------------------------------------------------------- /Scripts/sign-appx.ps1: -------------------------------------------------------------------------------- 1 | $opensslExe = 'C:\Program Files\Git\usr\bin\openssl.exe' 2 | $signExe = 'C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x86\signtool.exe' 3 | $timestampUrl = 'http://time.certum.pl/' 4 | $version = git describe --always --tags "--abbrev=0" --exclude latest 5 | 6 | if($version.Split('.').Length.Equals(3)) 7 | { 8 | $version += ".0" 9 | } 10 | 11 | Set-Location ../Build 12 | 13 | if (-not (Test-Path sideload.key)) { 14 | .$opensslExe genrsa -out "sideload.key" 2048 15 | } 16 | if (-not (Test-Path sideload.pfx)) { 17 | .$opensslExe req -new -x509 -days 825 -key "sideload.key" -out "sideload.crt" -config "openssl-sign.cnf" -subj "/CN=CE36AF3D-FF94-43EB-9908-7EC8FD1D29FB" 18 | .$opensslExe pkcs12 -export -out "sideload.pfx" -inkey "sideload.key" -in "sideload.crt" -password pass:123456 19 | } 20 | 21 | .$signExe sign /fd sha256 /f "sideload.pfx" /p 123456 /td sha256 /tr $timestampUrl QuickLook-$version.appx 22 | .$signExe verify /pa /v QuickLook-$version.appx 23 | -------------------------------------------------------------------------------- /Scripts/update-version.ps1: -------------------------------------------------------------------------------- 1 | $tag = git describe --always --tags "--abbrev=0" --exclude latest 2 | $revision = git describe --always --tags --exclude latest 3 | 4 | $text = @" 5 | // This file is generated by update-version.ps1 6 | 7 | using System.Reflection; 8 | 9 | [assembly: AssemblyVersion("$tag")] 10 | [assembly: AssemblyInformationalVersion("$revision")] 11 | "@ 12 | 13 | $text | Out-File $PSScriptRoot\..\GitVersion.cs -Encoding utf8 14 | -------------------------------------------------------------------------------- /Settings.XamlStyler: -------------------------------------------------------------------------------- 1 | { 2 | "AttributesTolerance": 2, 3 | "KeepFirstAttributeOnSameLine": true, 4 | "MaxAttributeCharactersPerLine": 0, 5 | "MaxAttributesPerLine": 1, 6 | "NewlineExemptionElements": "RadialGradientBrush, GradientStop, LinearGradientBrush, ScaleTransform, SkewTransform, RotateTransform, TranslateTransform, Trigger, Condition, Setter", 7 | "SeparateByGroups": false, 8 | "AttributeIndentation": 0, 9 | "AttributeIndentationStyle": 1, 10 | "RemoveDesignTimeReferences": false, 11 | "IgnoreDesignTimeReferencePrefix": false, 12 | "EnableAttributeReordering": true, 13 | "AttributeOrderingRuleGroups": [ 14 | "x:Class", 15 | "xmlns, xmlns:x", 16 | "xmlns:*", 17 | "x:Key, Key, x:Name, Name, x:Uid, Uid, Title", 18 | "Grid.Row, Grid.RowSpan, Grid.Column, Grid.ColumnSpan, Canvas.Left, Canvas.Top, Canvas.Right, Canvas.Bottom", 19 | "Width, Height, MinWidth, MinHeight, MaxWidth, MaxHeight", 20 | "Margin, Padding, HorizontalAlignment, VerticalAlignment, HorizontalContentAlignment, VerticalContentAlignment, Panel.ZIndex", 21 | "*:*, *", 22 | "PageSource, PageIndex, Offset, Color, TargetName, Property, Value, StartPoint, EndPoint", 23 | "mc:Ignorable, d:IsDataSource, d:LayoutOverrides, d:IsStaticText", 24 | "Storyboard.*, From, To, Duration" 25 | ], 26 | "FirstLineAttributes": "", 27 | "OrderAttributesByName": true, 28 | "PutEndingBracketOnNewLine": false, 29 | "RemoveEndingTagOfEmptyElement": true, 30 | "SpaceBeforeClosingSlash": true, 31 | "RootElementLineBreakRule": 0, 32 | "ReorderVSM": 2, 33 | "ReorderGridChildren": false, 34 | "ReorderCanvasChildren": false, 35 | "ReorderSetters": 0, 36 | "FormatMarkupExtension": true, 37 | "NoNewLineMarkupExtensions": "x:Bind, Binding", 38 | "ThicknessSeparator": 2, 39 | "ThicknessAttributes": "Margin, Padding, BorderThickness, ThumbnailClipMargin", 40 | "FormatOnSave": true, 41 | "CommentPadding": 2 42 | } --------------------------------------------------------------------------------