├── .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 | }
--------------------------------------------------------------------------------