Compare commits

...

457 Commits

Author SHA1 Message Date
copilot-swe-agent[bot]
94ec17d62a Fix startup crash by adding safe wrappers for assembly location access
Co-authored-by: emako <24737061+emako@users.noreply.github.com>
2025-08-12 02:01:11 +00:00
Copilot
a5241251d4 Initial plan 2025-08-12 01:49:28 +00:00
ema
14a5bea926 Code Cleanup
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
2025-08-09 00:38:43 +08:00
ema
3dbc9fc763 Remove unimportant UnobservedTaskException #1691
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
2025-08-06 00:19:47 +08:00
ema
139cb873f2 Revert SVG default background to transparent
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
2025-08-05 01:19:42 +08:00
ema
fd1004e6d3 Set default background color for SVG panel 2025-08-05 01:11:37 +08:00
ema
b0dceffa94 Add Exporter class for MediaInfo integration 2025-08-05 00:58:48 +08:00
ema
2246c5a361 Fix style changed from MediaInfoViewer 2025-08-05 00:53:21 +08:00
ema
5a5cce93b4 Add built-in plugin MediaInfoViewer
1. Merged from forked repo https://github.com/emako/QuickLook/tree/master/QuickLook.Plugin/QuickLook.Plugin.MediaInfoViewer
2. Use TextBox instead of AvalonEdit and prepare for new feature
2025-08-05 00:43:47 +08:00
ema
8d7df24798 Remove configuration ModernMessageBox
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
2025-08-04 21:17:25 +08:00
ema
3ae4eeb26d Improve CLI performance
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
2025-08-04 00:17:07 +08:00
ema
da0033b52a Improve CLI performance #1706 #1731 2025-08-03 22:20:35 +08:00
ema
2e941f468e Make exe-installer no forked relaunching
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
Since MicaSetup v2.4.0
2025-08-03 02:39:19 +08:00
ema
fbfd2484df Refactor thumbnail handlers into provider classes 2025-08-02 23:58:55 +08:00
ema
e342cd0851 Refactor AnimationProvider to use primary constructor 2025-08-02 23:58:23 +08:00
ema
d90993817d Refactor DependencyProperty registration 2025-08-02 21:58:08 +08:00
ema
5cedcff912 Support .pdn in ThumbnailViewer #1708
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
Implementation still under adjustment.
2025-08-02 02:34:32 +08:00
Copilot
9fe37520d3 Support Mermaid diagram rendering in MarkdownViewer (#1730)
* Implement Mermaid diagram support for MarkdownViewer

Co-authored-by: emako <24737061+emako@users.noreply.github.com>

* Replace the mermaid.min.js

https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js

* Fix Mermaid diagram rendering by updating markdown-it highlight function

Co-authored-by: emako <24737061+emako@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: emako <24737061+emako@users.noreply.github.com>
Co-authored-by: ema <mccoy39082@163.com>
2025-08-02 02:09:52 +08:00
ema
67b5dbf310 Add UseNativeProvider option #1726
Use following option in `QuickLook.Plugin.ImageViewer.config` to fix the issue:
```xml
<?xml version="1.0" encoding="utf-8"?>
<Settings>
  <UseColorProfile>false</UseColorProfile>
  <UseNativeProvider>false</UseNativeProvider>
</Settings>
```
2025-08-02 01:36:13 +08:00
Piteriuz
efe47ff43b Update Polish translation file (#1727)
- Add missing translations for MW_OpenWithMenu and InfoPanel_CantPreventClosing
- Remove duplicate entry for MW_BrowseFolder
2025-08-01 22:21:44 +08:00
ema
417876edd2 Prepare support for .pdn
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
2025-07-31 01:27:43 +08:00
ema
03b1ca557f Fix image .jxr error reading from UseColorProfile 2025-07-31 01:22:13 +08:00
ema
f39b53a5c6 Support Point Cloud Data (.pcd) for 3D spatial
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
1. Only support PCD files with PointXYZ format.
2. Not supported for Color or Intensity formats.
2025-07-28 16:48:13 +08:00
ema
68cb555bad Unsupported .pmx incorrectly handled in advance 2025-07-28 16:19:30 +08:00
dependabot[bot]
d88c8ab8de Bump Magick.NET-Q8-AnyCPU from 14.6.0 to 14.7.0
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
---
updated-dependencies:
- dependency-name: Magick.NET-Q8-AnyCPU
  dependency-version: 14.7.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-24 16:35:58 +08:00
copilot-swe-agent[bot]
a38b7a450a Fix code alignment by adding space to align .Replace method calls
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
Co-authored-by: emako <24737061+emako@users.noreply.github.com>
2025-07-23 23:57:13 +08:00
copilot-swe-agent[bot]
8ad5f39eab Add missing using System.Linq to fix compile error
Co-authored-by: emako <24737061+emako@users.noreply.github.com>
2025-07-23 23:57:13 +08:00
copilot-swe-agent[bot]
83cfd2a3d8 Remove unnecessary Translations.config and simplify RTL detection code
Co-authored-by: emako <24737061+emako@users.noreply.github.com>
2025-07-23 23:57:13 +08:00
copilot-swe-agent[bot]
4840a87858 Add RTL support for markdown files
Co-authored-by: emako <24737061+emako@users.noreply.github.com>
2025-07-23 23:57:13 +08:00
VenusGirl❤
a4d118e11f Update Korean (#1710)
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
2025-07-23 15:07:39 +08:00
ema
79b002c0b3 Unified changelog style
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
2025-07-20 23:00:53 +08:00
ema
b26575581a Update changelog for 4.1.1 release 2025-07-20 22:55:20 +08:00
ema
8c95a42a64 Refactor tray icon to use TrayIconHost 2025-07-20 21:54:32 +08:00
ema
55a069046f Refactor HelixViewer extend format support
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
2025-07-12 03:47:49 +08:00
ema
0714574374 Improve file extension checks in CanHandle methods 2025-07-12 03:39:37 +08:00
ema
10ce29e836 Refactor JSON detection to use Regex field
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
2025-07-10 07:38:21 +08:00
ema
8d66dfac54 Add hosts file syntax highlighting 2025-07-10 07:33:57 +08:00
ema
d06abf461e Enable Dockerfile detection 2025-07-10 07:10:48 +08:00
ema
4c4375612e Add configuration syntax highlighting
File extension: .conf;.config;.cfg
2025-07-10 07:01:15 +08:00
ema
8dcb09cf84 Add syntax highlighting for .env files 2025-07-10 06:46:54 +08:00
ema
b27ff01eff Add syntax highlighting for .gitattributes files 2025-07-10 06:29:42 +08:00
ema
befdb17718 Remove unused settings from GitIgnore 2025-07-10 06:26:57 +08:00
ema
d60b10a8cf Refactor thumbnail extraction 2025-07-10 06:16:10 +08:00
ema
2ee54695e7 Set RichTextBox background to transparent 2025-07-10 05:37:58 +08:00
ema
4a72e1ed8e Optimize file name comparison in detectors 2025-07-10 04:11:00 +08:00
ema
0bb6e622f6 Refactor confused format detection method names
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-07-09 04:27:50 +08:00
ema
345b061a8d Add dark mode CMake syntax highlighting 2025-07-09 04:20:18 +08:00
ema
67dc0ce10d Add CMake syntax highlighting and format detection 2025-07-09 04:16:19 +08:00
ema
631fd91219 Prepare hosts format detector 2025-07-09 03:55:45 +08:00
ema
cf6dd5cdf3 Prepare Dockerfile format detector 2025-07-09 03:50:50 +08:00
ema
7a11127b09 Prepare CMakeLists.txt format detector 2025-07-09 03:47:10 +08:00
ema
e035153642 Add .editorconfig to INI syntax highlighting 2025-07-09 03:37:55 +08:00
ema
78b695a170 Improve fallback logic for highlighting themes 2025-07-09 03:34:14 +08:00
ema
ed4169d6fe Add light mode Makefile syntax highlighting 2025-07-09 03:29:16 +08:00
ema
0a79d59c79 Add MakefileDetector for text viewer 2025-07-09 03:24:42 +08:00
ema
d6cc984267 Optimize JSONDetector with Span 2025-07-09 03:03:56 +08:00
ema
484acddba3 Add reStructuredText syntax highlighting
Just a simple highlighting solution for `.rst` files
2025-07-09 00:12:52 +08:00
ema
18634f15be Add Markdown syntax highlighting
Add from https://github.com/cuiliang/AvalonEditHighlightingThemes
2025-07-09 00:04:44 +08:00
ema
5869cc6670 Add FBX model support using AssimpNet #1479 2025-07-08 23:46:37 +08:00
ema
09a3cc3ea5 Add dark mode and unify naming for .sln syntax 2025-07-08 23:18:55 +08:00
ema
f9586be3ec Add Sketch file support to ThumbnailViewer plugin 2025-07-08 22:57:02 +08:00
ema
a6c077fbbb Add Pixso (.pip, .pix) support to ThumbnailViewer
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-07-08 22:28:08 +08:00
ema
c47d9f3c9b Move resource dictionary initialization 2025-07-08 22:04:34 +08:00
ema
06d9ed2a85 Add Protobuf syntax highlighting
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-07-08 04:44:35 +08:00
ema
37ed56ff34 Keep svga.proto 2025-07-08 04:17:07 +08:00
ema
87e04dca9d Improve the rendering effect of the Model 2025-07-08 04:06:05 +08:00
ema
3fd444102d Revert Add Sandbox detection 2025-07-08 03:42:39 +08:00
ema
b5773fc721 Add built-in HelixViewer for 3d models
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
2025-07-05 13:26:51 +08:00
ema
32ce27e447 Add MathJax inline math support to Markdown #1640
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-07-05 11:58:41 +08:00
ema
95f1c5bca2 Remove System.Text.Json dependency 2025-07-05 11:30:22 +08:00
ema
f6ca3a62e2 Add support for svgaplayerweb in SVGA viewer 2025-07-05 11:24:02 +08:00
ema
efba55b8d5 Implement SVGA MetaProvider 2025-07-05 10:21:15 +08:00
ema
4c3bf23e67 Use lottie-web and svga instead of npmjs 2025-07-05 09:50:54 +08:00
ema
007b960019 Rename SvgViewer.init to render and update usage 2025-07-05 09:33:46 +08:00
ema
a14b22d762 Update comments for LottieViewer and clarify usage 2025-07-05 09:28:12 +08:00
ema
3fce8b4f53 Add Lottie Files animation preview support 2025-07-05 09:25:22 +08:00
ema
5e459e35e5 Add comment clarifying SVGA version support 2025-07-05 06:55:48 +08:00
ema
b3570d1215 Handle .svga files separately in image viewer 2025-07-05 06:55:38 +08:00
ema
eecb56db14 Add SVGA animation preview support 2025-07-05 06:46:52 +08:00
ema
3858e142e2 Fix packaging target to run only in Release builds 2025-07-05 05:08:31 +08:00
ema
d7f482511f Update package versions in plugin projects 2025-07-05 05:07:26 +08:00
ema
9cca8c3c0b Add GPL license header to Helper.cs 2025-07-05 05:03:05 +08:00
ema
22e8838ce3 Add support for .kra and .cdr previews #1662 2025-07-05 04:58:24 +08:00
ema
63f516b504 Add Figma & XMind support to ThumbnailViewer #1662 2025-07-05 04:39:18 +08:00
ema
08587186c2 Fix ImagePanel button layout 2025-07-05 04:28:32 +08:00
ema
f99a786510 Add built-in ThumbnailViewer plugin 2025-07-05 04:22:25 +08:00
ema
3de93386cc Add NSIS syntax highlighting
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-07-05 03:31:33 +08:00
ema
b42b7ce4e8 Add syntax highlighting for SubRip Subtitle (.srt) files 2025-07-05 03:20:56 +08:00
ema
89571b1431 Add Swift dark mode syntax highlighting 2025-07-05 03:00:55 +08:00
ema
a7e26519ed Add Dart dark mode syntax highlighting 2025-07-05 02:59:08 +08:00
ema
c1e6362440 Add Erlang dark mode syntax highlighting 2025-07-05 02:57:12 +08:00
ema
25f7df52bd Add Kotlin dark mode syntax highlighting 2025-07-05 02:56:16 +08:00
ema
04247db107 Add Lisp dark mode syntax highlighting 2025-07-05 02:53:24 +08:00
ema
7456cbc3a5 Add Objective-C dark mode highlighting 2025-07-05 02:52:17 +08:00
ema
99caca2dfd Add dark mode Pascal syntax highlighting 2025-07-05 02:50:21 +08:00
ema
dc2d722f0a Add dark mode PHP syntax highlighting 2025-07-05 02:47:22 +08:00
ema
267b37c526 Improve QuickLook initialization speed 2025-07-05 02:46:00 +08:00
ema
913474f7ad Add dark mode R syntax highlighting 2025-07-05 02:41:58 +08:00
ema
c979ed0254 Add dark mode Ruby syntax highlighting 2025-07-05 02:40:08 +08:00
ema
71904ebac5 Add dark mode SQL syntax highlighting 2025-07-05 02:37:45 +08:00
ema
a8746dd3ef Add dark mode Rust syntax highlighting 2025-07-05 02:37:01 +08:00
ema
93be5681d3 Add dark mode Java syntax highlighting 2025-07-05 02:32:18 +08:00
ema
2fd3a15071 Add dark mode C++ syntax highlighting 2025-07-05 02:26:57 +08:00
ema
6e9d86457c Add dark mode C syntax highlighting 2025-07-05 02:24:12 +08:00
ema
1df89d69a9 Add dark mode syntax highlighting for Registry 2025-07-05 02:13:09 +08:00
ema
8850f52f3a Add simple QML syntax highlighting #1002 2025-07-05 02:10:10 +08:00
ema
cb4aa2e9d9 Add PowerShell syntax highlighting for dark mode 2025-07-05 01:52:09 +08:00
ema
db3af0580d Add .gitignore syntax highlighting 2025-07-05 01:44:44 +08:00
ema
469f955208 Add .dotsettings to XML syntax highlighting 2025-07-05 01:40:04 +08:00
ema
ea077af8a2 Add .gitmodules to INI syntax highlighting 2025-07-05 01:39:42 +08:00
ema
33030780ff Create CHANGELOG.md
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-07-04 04:18:11 +08:00
ema
9319ca7213 Bump WPF-UI.Violeta package to version 4.0.3
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-07-04 01:50:15 +08:00
ema
b1a2387203 Add dark mode Lua syntax highlighting
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
2025-07-01 05:04:51 +08:00
ema
12a6b35c6c Remove boolean value type from ASS highlighting 2025-07-01 04:46:39 +08:00
ema
1f13aa6678 Fix PDF thumbnail rendering crash #1531 2025-07-01 04:30:08 +08:00
ema
72c8e567cd Increase SVG viewer max zoom level to 100x 2025-07-01 03:40:30 +08:00
ema
fe13f5d45e Remove cursor style changes during SVG panning 2025-07-01 03:38:34 +08:00
ema
e76c882d49 Prevent dragdrop and context menu in SVG viewer 2025-07-01 03:36:10 +08:00
ema
667815e360 Conditionally include Svg.Skia and SVG provider 2025-07-01 03:27:22 +08:00
ema
13bcc4b1d4 Set custom WebView2 user data folder for SVG panel 2025-07-01 03:23:47 +08:00
ema
fa61b1e68f Code Cleanup 2025-07-01 03:18:48 +08:00
ema
2750cb75dd Fix exception from SVG WebView2 2025-07-01 03:10:33 +08:00
ema
f1237aa86f Add JSDoc comments and clarify SvgViewer usage 2025-07-01 02:23:38 +08:00
ema
2a94fa155d Enhance SVG viewer with pan feature 2025-07-01 02:11:31 +08:00
ema
682801a8bb Refactor SVG viewer to use inline SVG
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-07-01 01:57:36 +08:00
ema
f9b075dfa3 Add pan and zoom support to SVG image viewer
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-06-30 07:32:46 +08:00
ema
0a8039d962 Render SVG as base64 image and improve scaling 2025-06-30 07:22:03 +08:00
ema
0dc8c03446 Fix image viewer content assignment and cursor check 2025-06-30 06:48:32 +08:00
ema
9cef4d9830 Officially enable SVG web viewer 2025-06-30 06:38:52 +08:00
ema
e9306329ee Add double-click to reset zoom in SVG viewer 2025-06-30 06:07:09 +08:00
ema
7ca7d2783e Beautify the background color of Svg Web2 2025-06-30 06:00:29 +08:00
ema
98dd96283d Add SVG support using WebView2 in ImageViewer
It's still an experimental function
2025-06-30 05:45:21 +08:00
ema
21071a62d1 Update package dependencies 2025-06-30 02:02:53 +08:00
ema
a65a453390 Support JXR image but SDR only #1680 2025-06-30 01:49:43 +08:00
ema
856f7f137c Add light mode highlighting for SubStation Alpha 2025-06-30 01:23:07 +08:00
ema
3878dd0049 Add dark mode highlighting for SubStation Alpha 2025-06-30 01:10:04 +08:00
ema
9a04232e84 Add .toml extension to INI syntax highlighting
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-06-29 21:38:53 +08:00
ema
ff25bedcae Add .vsix support to archive viewer
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-06-29 10:40:31 +08:00
ema
7ca15b5e1e Add dark mode highlighting for VB.NET and VBScript 2025-06-29 10:21:32 +08:00
ema
b2a7b22f20 Add TypeScript dark mode highlighting 2025-06-29 10:14:13 +08:00
ema
ae7633e1e7 Add dark mode syntax highlighting for INI files 2025-06-29 10:11:11 +08:00
ema
ebb90d5586 Add dark mode F# highlighting 2025-06-29 10:07:25 +08:00
ema
ac7a08cbf3 Add YAML syntax highlighting 2025-06-29 09:56:18 +08:00
ema
e16a89f979 Refactor properties highlighting for consistency and clarity 2025-06-29 09:04:25 +08:00
ema
9a17d5fa0f Skip empty lines in properties highlighting 2025-06-29 06:49:22 +08:00
ema
caf301f3f5 Refactor property key highlighting logic
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-06-29 06:36:05 +08:00
ema
9d42da53c0 Support .fx with HLSL 2025-06-29 05:34:47 +08:00
ema
1632b207db Fix .apk extension handling 2025-06-29 05:34:20 +08:00
ema
3ec576968e Update package and remove binding redirect 2025-06-29 05:17:56 +08:00
ema
84222e3188 Add dark mode syntax highlighting for Go
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-06-28 01:00:49 +08:00
ema
6b7fc303e0 Add dark mode CSS syntax highlighting 2025-06-28 00:55:23 +08:00
ema
e113030dce Skip primary for comment lines in properties files
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-06-27 22:49:28 +08:00
ema
12046220c1 Add support for Android App Bundle (.aab) files
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-06-27 07:30:10 +08:00
ema
6943ed5cb4 Read ABIs from QuickLook.ApkReader 2.1.0 2025-06-27 07:20:55 +08:00
ema
4ff7cd53c4 Add Alt+Z shortcut to toggle word wrap #1487
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
Introduced a keyboard shortcut (Alt+Z) to toggle the WordWrap property in the TextViewerPanel for improved usability.
2025-06-27 07:03:11 +08:00
ema
a7c89d7e69 Add keyboard shortcuts for text direction #1612
Implemented Ctrl+LShift and Ctrl+RShift shortcuts to switch text flow direction between LTR and RTL in TextViewerPanel
2025-06-27 06:56:43 +08:00
ema
32e45da1d6 Use verbatim string literals for MediaInfo path 2025-06-27 03:34:27 +08:00
ema
6ad73eddea Add option IsSupportRTL to control the RTL #1612 2025-06-27 03:33:35 +08:00
ema
a796cdbdf0 Support RTL for .txt file #1612 2025-06-27 03:28:08 +08:00
ema
1db667e32f Add .vpy extension to Python syntax highlighting 2025-06-27 03:15:11 +08:00
ema
d858840183 Enable window dragging in video viewer panel #425 2025-06-27 02:38:17 +08:00
ema
aef35d748e Fix apk icon can not be found from resource id 2025-06-27 02:12:49 +08:00
ema
2bf6387b8f Support X11 and more JPEG2000 image formats
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
In addition, Magick Image File Format (.miff) is supported now
2025-06-25 02:44:14 +08:00
ema
b96619c244 Fix Android API level mapping name 2025-06-25 02:22:29 +08:00
ema
3fff4c1b2b Add Android API level mapping and improve APK info 2025-06-25 02:17:12 +08:00
ema
f3c08d5b76 Display supported ABIs in APK info panel 2025-06-25 01:58:32 +08:00
ema
1c1f6d55e7 No web font resource extraction
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
Fix WebView2 resources not being released in FontViewer
2025-06-24 02:05:04 +08:00
ema
2c330a0136 Chore of disable nullable in MarkdownViewer 2025-06-24 01:45:52 +08:00
ema
83ae611af1 No markdown resource extraction #1661 #1670 2025-06-24 01:33:07 +08:00
ema
741d9967d1 Support highlighting .uts
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-06-23 16:38:35 +08:00
ema
01f92b0b3a Revise the hint of UCEERR_RENDERTHREADFAILURE
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-06-23 10:44:20 +08:00
ema
c959e649a0 Try catch DMG exception
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-06-23 02:35:02 +08:00
ema
869a134587 Support highlighting .nvue 2025-06-23 02:10:40 +08:00
ema
75841d241f Support highlighting .vue 2025-06-23 02:07:49 +08:00
ema
273b2fc893 Support dark mode JavaScript 2025-06-23 01:54:45 +08:00
ema
e5b45a7c01 Support dark mode Python #1675 2025-06-23 01:46:33 +08:00
ema
4d3d216d78 Support dark mode Log
https://github.com/Dirkster99/AvalonEditHighlightingThemes/blob/master/source/HL/Resources/Themes/VS2019_Dark.xshtd
2025-06-23 01:43:30 +08:00
ema
879ec689a9 Support highlighting .dos 2025-06-23 01:41:31 +08:00
ema
a4d2aea98d Support light mode Log
https://github.com/Dirkster99/AvalonEditHighlightingThemes/blob/master/source/HL/Resources/Light/Log.xshd
2025-06-23 01:39:23 +08:00
ema
68b0a928b6 Support light mode Lyric 2025-06-23 01:26:09 +08:00
ema
8d9c1e3f6e Add Sandbox detection 2025-06-23 00:58:28 +08:00
ema
b3ed13f16a Initial custom highlighting via reflection 2025-06-22 23:53:01 +08:00
ema
e86716fc54 Support .properties 2025-06-22 23:31:59 +08:00
ema
cf0c8529a0 Support dark mode TXT #1675 2025-06-22 21:53:49 +08:00
ema
ce5adc6801 Support dark mode XML 2025-06-22 21:36:11 +08:00
ema
44ba8b1436 Support dark mode HLSL 2025-06-22 21:29:17 +08:00
ema
0168318f39 Improve PDF magic detection 2025-06-22 21:12:35 +08:00
ema
f0d55455e4 Add built-in ELF viewer plugin
Support for binary ELF, UImage, Mach-O files
2025-06-22 20:47:29 +08:00
ema
17091056de Use english as default resource culture
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
74ae24cf44
2025-06-22 04:40:56 +08:00
ema
a60fafdd38 Support .rpm 2025-06-22 04:12:46 +08:00
ema
54031a166a Update issue template
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
2025-06-20 19:38:40 +08:00
ema
efc83b0669 Use format detector feature for TextViewer
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-06-19 17:03:20 +08:00
ema
a580926059 Add more file extensions for XML
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-06-19 11:08:26 +08:00
ema
21af7ad7ff Prepare support .rpm
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
2025-06-18 00:54:30 +08:00
ema
01faaa7ce0 Support .AppImage 2025-06-17 23:35:15 +08:00
ema
533e097a0c Fix spell
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
2025-06-16 09:57:03 +08:00
ema
c9fa5ff43b Support .dmg
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-06-15 07:04:00 +08:00
ema
679b00fe71 Revert the DataGrid style of CSV #1664
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-06-14 16:28:24 +08:00
ema
04c7ed931f New option CheckPreviewHandler
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-06-14 12:54:54 +08:00
ema
781f270824 Fix unsupported ColorContexts in Windows #1671 2025-06-14 12:15:13 +08:00
ema
5aa0cf06a8 New option ProcessRenderMode
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
2025-06-12 16:24:10 +08:00
ema
7eabaff36a Resort the codes of office extensions 2025-06-12 15:34:26 +08:00
ema
f897ce46ea Show office exception instead of crash 2025-06-12 15:31:28 +08:00
ema
e2e5885fd5 Automatically fix Office preview handler registry
This function requires QuickLook to run with administrator privileges and preview the corresponding Office file once
2025-06-12 15:25:18 +08:00
ema
9a3591e6f6 Safely check office preview handler
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-06-11 18:12:31 +08:00
ema
5fd2d8a88a Merge OfficeViewer-Native plugin #1662
Repo URL: https://github.com/QL-Win/QuickLook.Plugin.OfficeViewer-Native
2025-06-11 17:58:07 +08:00
ema
4fd8c14b98 Supplement AutoReload features
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-06-10 11:40:20 +08:00
ema
1b3d2e518d Merge pull request #1666 from JSuttHoops/jsutt
Add Reload + Customization
2025-06-10 10:45:35 +08:00
ema
c686c373ba Fix generic theme resources #1652
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
2025-06-09 11:44:03 +08:00
JSuttHoops
555b801fe6 Merge pull request #1 from JSuttHoops/codex/add-reload-button-with-preserved-window-properties
Summary

Introduced a new “Reload” button in the viewer window toolbar for quickly refreshing the current preview without closing the window

Added the “MW_Reload” string to the translations so the Reload button text can be localized

Implemented a ReloadPreview method in ViewWindowManager to refresh the plugin content in-place

Hooked the Reload button and added optional file monitoring for auto-reload in ViewerWindow code-behind

Allowed custom window background colors via the WindowBackgroundColor setting
2025-06-07 19:12:40 -05:00
JSuttHoops
2624989a75 Add reload feature and customizable background 2025-06-07 19:12:14 -05:00
ema
220ab789a5 Remove x86 from sln
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
2025-06-07 00:47:02 +08:00
ema
9f20a6d646 Remove appx from sln 2025-06-07 00:34:23 +08:00
ema
a9d4fb1a9b Add appx debug project 2025-06-06 23:54:31 +08:00
ema
500a78f7ec Merge pull request #1663 from King3R/translation-german
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
Update existing and add missing German translation
2025-06-06 18:07:16 +08:00
King3R
c1e4f32bb3 Update QuickLook/Translations.config 2025-06-06 10:01:32 +02:00
King3R
bbed9223ef Update QuickLook.Plugin.PEViewer/Translations.config 2025-06-06 09:32:18 +02:00
King3R
d190980e12 Update QuickLook.Plugin.PDFViewer/Translations.config 2025-06-06 09:30:51 +02:00
King3R
7b8e89d09e Update QuickLook.Plugin.FontViewer/Translations.config 2025-06-06 09:27:30 +02:00
King3R
e7d3250d2b Update QuickLook.Plugin.AppViewer/Translations.config 2025-06-06 09:24:26 +02:00
ema
a64aeada91 Show deb architecture
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
2025-06-05 14:57:33 +08:00
ema
b31de49da1 Not support deb with LZMA algorithm 2025-06-05 14:46:19 +08:00
ema
576cb5814d Fix deb reader gz error 2025-06-05 12:02:16 +08:00
ema
5bc7fecdcf Improve App/PE titlebar UI/UX
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-06-04 17:37:22 +08:00
ema
743079c5bf Update wgt logo 2025-06-04 17:30:35 +08:00
ema
3153f7b279 Revert the exception handling for Show() 2025-06-04 16:59:20 +08:00
ema
efe28423e9 Support .deb 2025-06-04 16:42:38 +08:00
ema
3bd1239457 Restruct AppViewer codes 2025-06-04 15:13:43 +08:00
ema
59124967d2 Attempt to fix the crash #1648
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
This is an experimental fix, the idea is to remove the tree to prevent the DUCE command
2025-06-04 13:53:49 +08:00
ema
376ed30dc5 Improve GroupBox UI/UX 2025-06-04 10:45:41 +08:00
ema
2b38b2c946 Use IsVisible instead of Visibility
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-06-03 14:54:38 +08:00
ema
05e9f43ba4 Remove the WoW64HookHelper from sln 2025-06-03 14:40:20 +08:00
ema
e5b04ed07a Update PackageReference 2025-06-03 14:39:51 +08:00
ema
cc1e126101 Support .hap and .hap.1
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-06-03 07:55:06 +08:00
ema
22a5d69ac8 Remove the WoW64HookHelper from release #1634
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
Use https://github.com/QL-Win/QuickLook.Plugin.WoW64HookHelper instead
2025-06-02 18:59:17 +08:00
ema
8b6ab6b037 Fix old version volume exception #1653
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-06-02 13:17:41 +08:00
ema
d18b33a18e Speed up the apk reader
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-06-01 14:07:57 +08:00
ema
1a83848c2c Use app fallback logo 2025-06-01 13:32:33 +08:00
ema
fdb602b9ed Support .ipa 2025-06-01 12:37:02 +08:00
ema
00829ec21b Support .apk and .apk.1
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-05-31 17:30:35 +08:00
ema
53d76cb0f8 Support .wgt and .wgtu 2025-05-31 13:10:34 +08:00
ema
8a5d640572 Support .appx and .msix 2025-05-31 12:16:31 +08:00
ema
833222507b Update font pangram
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
2025-05-29 18:48:24 +08:00
ema
2fb23a94bf Fix CaptionTextButtonStyle not static anymore
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-05-29 18:00:23 +08:00
ema
ef55a3eaff Update due to MS Store policy change
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
Due to the updated Microsoft Store policy, certain keywords were cleaned.
2025-05-26 22:35:24 +08:00
ema
05c967e582 Manually resolve the assembly fails #1618 2025-05-26 15:49:24 +08:00
ema
645edf2439 Optimize highlight name fetching
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
2025-05-26 09:48:22 +08:00
ema
6deadf9d73 Fix highlighting name
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-05-26 05:42:27 +08:00
ema
b81b2f9ef8 Improve startup speed #1521
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-05-25 03:45:17 +08:00
ema
eed0c53e9c Code Cleanup 2025-05-25 03:45:07 +08:00
ema
51a46155d7 Fix unsupported CLSID was not shown 2025-05-25 01:59:31 +08:00
ema
2e8fd2bae7 Code Cleanup 2025-05-25 01:32:38 +08:00
ema
05a2a819b7 Add branding images
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-05-24 15:05:20 +08:00
ema
86e7803cd7 New AppViewer plugin for .msi 2025-05-24 15:03:54 +08:00
ema
77c332d825 Fix share button was not visible in win11
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-05-24 13:20:51 +08:00
ema
d20eb71f2b Remove MSI from PEViewer
Actually MSI does not belong to the PE format
2025-05-24 09:21:56 +08:00
ema
1ce2fc2f89 Fix Scripts\pack-all.ps1 2025-05-24 06:00:47 +08:00
ema
c2acdaa182 Avoid audio cover null exception in xaml
Can slightly increase the opening speed of audio file
2025-05-24 05:41:38 +08:00
ema
eff9d795f0 Fix long path issue #1643
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-05-24 03:51:18 +08:00
ema
27c2257feb Show Repository Trending
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-05-23 17:25:36 +08:00
ema
9803f5d6a8 Use PureSharpCompress instead of SharpCompress
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions
2025-05-23 03:18:51 +08:00
ema
00ef7d1e01 Improve PE parsing with extended buffer size 2025-05-23 03:03:36 +08:00
ema
06e7dbaae7 Code Cleanup 2025-05-23 02:39:26 +08:00
ema
34f69cc4f4 Add community group link 2025-05-22 11:16:18 +08:00
ema
74e8394b07 Update PackageReference 2025-05-21 11:06:05 +08:00
ema
0370876a3f Support .pcx image #1638 2025-05-20 22:39:27 +08:00
ema
dd322ac7e9 Update exception catcher 2025-05-18 01:40:20 +08:00
ema
6e8c0ce593 Update README.md #1622 2025-05-15 01:56:15 +08:00
ema
75c45f96c2 Fix DPI jump on window close in net462 #1626 2025-05-15 01:33:41 +08:00
ema
f7b22fb600 Avoid flickering #1628 2025-05-14 03:33:45 +08:00
ema
4170dc7a16 Rollback SharpCompress before clear dependencies 2025-05-14 02:41:10 +08:00
ema
47f4106b5d Update README.md #1622 2025-05-14 02:37:21 +08:00
ema
b28fcbb398 Update the build scripts 2025-05-14 02:18:01 +08:00
ema
97f8232767 Fix DpiAwareness for PerMonitor #1626 2025-05-13 22:07:39 +08:00
ema
8fa4f6cc5b Update PackageReferences 2025-05-13 17:36:22 +08:00
ema
ebcb223ef0 Update Title Immediately 2025-05-13 17:24:42 +08:00
ema
90b23cd1f8 Hide PEViewer Title just like InfoPanel 2025-05-13 17:16:10 +08:00
ema
beca7d06ca Fix flickering #1628 2025-05-13 11:52:23 +08:00
ema
e4ea156a20 Fix some errors from cli options
Error is from this commit a95b050
2025-05-11 03:53:39 +08:00
ema
8279c55526 Fix check update exception #1577 2025-05-11 03:39:24 +08:00
ema
a95b050ae5 Support cli options #1620
https://github.com/QL-Win/QuickLook/wiki/Command-Line
2025-05-11 03:16:33 +08:00
ema
5bf422a17f Delay the initialization of the MarkdownViewer 2025-05-10 08:28:16 +08:00
ema
d51c8bb25e Improve UI: Refine Recycle Bin icon display #1610 2025-05-10 07:53:31 +08:00
ema
1903687137 Fix window title update with ShowInTaskbar false 2025-05-10 06:47:09 +08:00
ema
ee884f1c7d Replace FontViewer source with DLL reference 2025-05-10 02:26:30 +08:00
ema
e0f581e149 Implement RecycleBinPanel #1610 2025-05-07 03:41:11 +08:00
ema
a0a46832ed Update copyright information 2025-05-06 21:04:58 +08:00
ema
19373a28a7 First commit CLSIDViewer #1610 2025-05-06 02:52:31 +08:00
ema
1bc82c8b81 Native Support for Desktop Icons #1610 2025-05-05 02:58:39 +08:00
ema
34a361e84a Run code cleanup 2025-05-04 14:26:27 +08:00
ema
ff4c9df9a2 Merge pull request #1607 from JNylson/master
Update pt-BR string in all Translations.config
2025-04-30 15:36:13 +08:00
JNylson
9be4df34e7 Update pt-BR string in all Translations.config 2025-04-29 22:59:32 -03:00
ema
cb40018d52 Run code cleanup 2025-04-30 01:15:05 +08:00
ema
30861cc40f Make exe installer uses msi path by default #1596
Request MicaSetup v2.3.7
2025-04-30 01:08:29 +08:00
ema
abc781d340 Fix the Volume control does not work #1578 2025-04-29 21:28:29 +08:00
ema
41fa5ed1ed Support more Markdown file extension #1562 #1601 2025-04-28 19:12:04 +08:00
ema
00212531fb Merge pull request #1604 from JNylson/master
Update pt-BR string in Translations.config
2025-04-27 18:27:52 +08:00
JNylson
1f85226297 Update pt-BR string in Translations.config 2025-04-26 23:53:55 -03:00
ema
b6c4ad5ac7 Fix styling issues in the Search Panel #1592 2025-04-23 22:38:14 +08:00
ema
fd01082a3d Add VisualCommander 2025-04-23 22:35:31 +08:00
ema
2d085cb655 Update micasetup.json 2025-04-16 23:32:57 +08:00
ema
460bc7ae2c Update PackageReferences 2025-04-16 22:38:17 +08:00
ema
a4a45b6ddd WPF-UI.Violeta 4.0.0 2025-03-15 02:42:21 +08:00
ema
fe5b24319a Fix copying compatibility of BitmapFrame 2025-03-07 09:57:06 +08:00
ema
895522a1e3 Fix the priority of FontViewer #1543 2025-02-20 09:03:43 +08:00
ema
b591b5d3f2 Merge pull request #1532 from josStorer/master
Fix the issue where certain remote desktop software may generate drivers with unknown device types, causing null values in the values obtained by GetGPUNames, which leads to program crash during startup
2025-02-05 15:30:32 +08:00
ema
7541b9d051 Upgrade to v4 to avoid CI action errors 2025-02-05 14:43:29 +08:00
ema
913727935e Update PackageReference 2025-02-05 14:20:15 +08:00
josc146
3745b0fd3b Fix the issue where certain remote desktop software may generate drivers with unknown device types, causing null values in the values obtained by GetGPUNames, which leads to program crash during startup 2025-01-20 13:45:50 +08:00
ema
eb1b2a7920 Support dark mode C# Highlighting 2025-01-14 14:25:56 +08:00
ema
bbc5bee000 Archive file extensions in ASCII order 2025-01-07 15:06:52 +08:00
ema
bc7ae4692d Code Cleanup 2025-01-06 06:19:19 +08:00
ema
612fb36dfc Thread safety of image copying 2025-01-06 06:04:40 +08:00
ema
0d1ff892ee Support Shell Script highligting #668 2025-01-05 10:05:09 +08:00
ema
a52a490cde Remove ARM64 libs from ImageViewer 2025-01-02 09:16:43 +08:00
ema
61d15fc8f2 Update LAVFilters dependencies 2025-01-02 07:10:10 +08:00
ema
cb87c06214 Update PackageReference 2025-01-02 06:22:06 +08:00
ema
57fb7c6a5f Fix svg rendering error #1430 2025-01-02 06:16:02 +08:00
ema
fd60013d23 Catch exception from xshd loader
1. New xshd for dark mode
2. Moved xshd sign to https://github.com/QL-Win/QuickLook/wiki/On-the-Shoulders-of-Giants
2025-01-02 05:37:29 +08:00
ema
31325e34c1 Update text syntax file extension 2025-01-02 03:56:42 +08:00
ema
93273820aa Improve dark mode text preview 2025-01-02 03:26:42 +08:00
ema
bfa28fc5fa Support .cur and .ani cursor images 2025-01-02 02:39:58 +08:00
ema
8a2a0df832 Fix VideoViewer time label width for long video 2025-01-01 04:38:33 +08:00
ema
e70c23ad75 Non-blocking MIDI player #1520 2025-01-01 03:42:18 +08:00
ema
e4e0fe3fa6 Toast to show can't cancel "Prevent Closing" #1368 2025-01-01 03:34:21 +08:00
ema
190ab5f3fc Expose the ViewWindow to ContextObject 2025-01-01 03:06:55 +08:00
ema
3a1a74d0f9 Revert Focusable
ShowActivated is sufficient for the needs
2024-12-31 22:59:00 +08:00
ema
eead801eb9 UnblockZoneIdentifier instead of PowerShell #1495 2024-12-31 11:47:06 +08:00
ema
08e75b8e36 Support .psb image #768 2024-12-31 10:20:11 +08:00
ema
96d8c420c4 Support Animated WebP #1024 #1324
Limitations: Only supports x64 systems
2024-12-30 17:03:12 +08:00
ema
d96c6e21ce Code Cleanup 2024-12-30 15:23:18 +08:00
ema
82987b0848 Fix image viewer copy without transparency support 2024-12-30 05:22:58 +08:00
ema
4eb4251db5 Temporary solution to read woff2 2024-12-30 04:21:24 +08:00
ema
ffecab95be New built-in plugin FontViewer 2024-12-30 03:05:06 +08:00
ema
9f74be0e1c Remove the native pdfium.dll for ARM64 2024-12-28 10:53:33 +08:00
ema
d5cf6e832f Update MediaInfoDLL dependencies 2024-12-28 10:46:06 +08:00
ema
a8653c0f83 Update PDFium native libraries
This NuGet package includes the ARM64 libraries.
2024-12-28 09:43:29 +08:00
ema
482934ba22 Fix PDFViewer tanslations 2024-12-28 09:37:28 +08:00
ema
f50eb6448b Decouple some plugins from QuickLook 2024-12-28 05:51:16 +08:00
ema
bdbac0b5e7 Update video plugin dependency packages 2024-12-28 03:54:59 +08:00
ema
4038cf2bb5 Fix MIDI player ShouldLoop not togglable 2024-12-28 02:03:18 +08:00
ema
a1cd8a1e3c Fix scoop cli install #1519 2024-12-28 01:09:29 +08:00
ema
e74c977574 Add svgz type app icon 2024-12-26 09:45:03 +08:00
ema
e0d85733a9 Support .svgz image 2024-12-24 16:20:29 +08:00
ema
36807702e2 Double encoding detection #471 #600 #769 #954 2024-12-24 11:22:05 +08:00
ema
596ff6d9d4 Prevent QL from crashing when WMI error #1379 2024-12-22 00:51:02 +08:00
ema
0b4cd29197 Fix MIDI player unable to seek with left click 2024-12-20 23:58:54 +08:00
ema
df00f41765 Safely disposing GIF-related memory resources 2024-12-20 22:48:30 +08:00
ema
5220b0b5d8 Rending GIF in background thread #993 2024-12-20 20:08:17 +08:00
ema
21de0643ff Improve GIF efficiency #993 2024-12-20 19:28:23 +08:00
ema
51a7fe0c7b Support .MID audio limited #931 2024-12-19 03:35:55 +08:00
ema
2999bd201e Fix plugin installer description length 2024-12-17 22:11:56 +08:00
ema
374b85686d Support .dds image 2024-12-16 14:51:28 +08:00
ema
ea89b32316 Update MailViewer dependencies 2024-12-16 11:15:39 +08:00
ema
d096e8bf76 Update NuGet packages 2024-12-16 10:50:55 +08:00
ema
822b22df47 Move ShlwApi method 2024-12-16 06:28:06 +08:00
ema
aa53627902 Use MicaSetup to create .exe-type installer
Check out how it works here: https://github.com/lemutec/MicaSetup
2024-12-15 11:45:39 +08:00
ema
dc67ab0065 New built-in plugin PEViewer 2024-12-15 10:05:35 +08:00
ema
883657f6d5 Fix ContentTop icon position 2024-12-15 08:37:53 +08:00
ema
32a1d709a5 Support .icns image #1480 2024-12-15 05:42:35 +08:00
ema
cd35e05461 Fix multiple covers check method 2024-12-15 04:07:45 +08:00
ema
09bd9bc1f9 Audio player support lyric (.lrc) #1506
Use lyric parser from https://github.com/lemutec/LyricStudio
2024-12-15 04:00:05 +08:00
ema
31075e48e1 Fix error on audio with multiple covers 2024-12-15 02:42:32 +08:00
ema
7239ae5ddd Code Cleanup 2024-12-14 05:45:15 +08:00
ema
370c76b6fa Readjust the position of TrayIcon ContextMenu
Added support to disable the `ModernTrayIcon` by setting it to false
2024-12-14 05:45:01 +08:00
ema
4ab015eea8 Fix CSV viewer not support formats other than UTF8
This may have the disadvantage of slowing down the startup speed of large CSV files.
2024-12-13 22:12:14 +08:00
ema
302aad41ea Merge InvokePluginPreview from emako/QuickLook 2024-12-13 15:35:15 +08:00
ema
a82a93d2d9 Auto resize PDF viewer window 2024-12-13 15:26:11 +08:00
ema
cb59a3d082 Support password-protected PDF #155 #765
QL will display a UI prompting for a password. Upon entering the correct password, the PDF file will be reopened.
2024-12-13 11:23:57 +08:00
ema
d09e9c48d8 Add a copy button to the image viewer #1399 2024-12-12 11:43:26 +08:00
ema
9f3014c20c Code Cleanup 2024-12-12 11:12:20 +08:00
ema
b4ac9332fe Support .qoi image #1432 2024-12-12 09:59:49 +08:00
ema
28ec7655f8 Code Cleanup 2024-12-12 01:21:18 +08:00
ema
c056438c58 Restore ScrollBarStyle 2024-12-09 00:31:38 +08:00
ema
fdd5707dba Fix Github Actions build for pull requests #1498
Need to verify later whether it is feasible
2024-12-08 21:17:02 +08:00
ema
485c477760 Merge .NET runtime startup and exception settings
- Added runtime overrides for path handling and long paths
- Included legacy exception and unhandled policy settings
- Updated supported runtime version to v4.6.2
2024-12-08 20:51:25 +08:00
ema
c940e0db1b Merge pull request #1497 from KamilDev/fix/archive-viewer
Fix ArchiveViewer
2024-12-08 20:42:47 +08:00
KamilDev
93441072f7 Fix ArchiveViewer
- Add bindingRedirect so that SharpCompress can find the correct version of `System.Runtime.CompilerServices.Unsafe`
2024-12-08 16:51:32 +11:00
ema
619f16bf88 Use fluent UI for ArchiveFileListView
TreeView style is from WPF-UI
2024-12-08 04:40:02 +08:00
ema
54fed86f2e Update the SharpCompress version and fix exception
Resolve the problem where the `get_IsEncrypted` method in older versions of SharpCompress would throw an error in certain scenarios.
2024-12-08 04:38:27 +08:00
ema
a3e0a58a3f Update dependent libs for VideoViewer 2024-12-08 04:23:01 +08:00
Kamil
92778e6dcf Implement Windows block detection and automatic fix (#1495)
* Implement Windows block detection

* Remove duplicate exception log

* Use proper exception HResult

* Implement automatic unblocking
2024-12-08 03:27:09 +08:00
ema
c879f2353a Use Segoe Fluent Icons 2024-12-07 22:48:17 +08:00
ema
3d66f6c7c9 Add formatter configuration 2024-12-07 06:52:35 +08:00
ema
4b9476e95a Fix CaptionButtonStyle FontFamily 2024-12-07 06:47:47 +08:00
ema
66d5c36cbc Reduce duplicate dependencies on publish files 2024-12-07 06:09:14 +08:00
ema
aa8e5d6355 Fix warning about size_t type 2024-12-07 06:05:39 +08:00
ema
df75e51b45 Remove deploy from .appveyor.yml
Use GitHub Action instead
2024-12-07 05:24:08 +08:00
ema
4166be0422 Fix AppVeyor describe the tag error 2024-12-07 04:59:12 +08:00
ema
77b5eb454e Reduce duplicate dependencies on publish files 2024-12-07 04:58:07 +08:00
ema
a480d5e08a Update .appveyor.yml 2024-12-07 04:21:30 +08:00
ema
a1647843b3 Merge pull request #1337 from mooflu/latest-build
Github action workflow to run a build for the latest version
2024-12-07 03:32:01 +08:00
ema
e63a9d2084 Synchronize the theme with UserPreferenceChanged
New class UxTheme and apply synchronize for
1. Windows System Menu
2. Tray Context Menu
3. WPF-UI Window
2024-12-07 02:22:50 +08:00
ema
4dff887ec1 Review and clean up codes 2024-12-07 00:51:46 +08:00
ema
9d24d0fbe6 Merge pull request #1494 from KamilDev/feature/modern-messagebox
Implement modern message box
2024-12-06 23:57:57 +08:00
KamilDev
0f0bf55296 Implement modern message box 2024-12-07 01:32:41 +11:00
ema
50276003f8 Mark markdown web files as linguist-vendored 2024-12-06 17:54:31 +08:00
ema
12aa8ea8ed Merge pull request #1398 from Dreamoochy/MultiCommander
Multi Commander support
2024-12-06 17:00:58 +08:00
ema
1a9dc33926 Add the tray menu to restart QuickLook #1448 2024-12-06 16:21:42 +08:00
ema
4a765300fd Security check OS version for SetPreferredAppMode 2024-12-06 15:58:08 +08:00
ema
27e62e7e3f Merge pull request #1491 from KamilDev/feature/add-open-data-folder-to-tray
Adds "Open Data Folder" option and dark mode support to tray menu.
2024-12-06 15:15:57 +08:00
KamilDev
569f787c15 Adds "Open Data Folder" option and dark mode support to tray menu. 2024-12-06 15:48:38 +11:00
ema
fc150febcb Support markdown file ext with .mdown #1349 2024-12-06 12:35:59 +08:00
ema
72d3c3187b Support markdown viewer fallback folder #508 2024-12-06 12:31:51 +08:00
ema
9f3126b63f Fix BindingExpression return invalid type
Detail error:
System.Windows.Data Error: 5 : Value produced by BindingExpression is not valid for target property.; Value='<null>' BindingExpression:Path=; DataItem='GlassLayer' (Name='glassLayer'); target element is 'VisualBrush' (HashCode=2881685); target property is 'Viewbox' (type 'Rect')
2024-12-06 10:07:09 +08:00
ema
06e796ac0b Merge pull request #1490 from KamilDev/feature/improve-markdown-viewer
Improved MarkdownViewer
2024-12-06 10:02:20 +08:00
KamilDev
ec62cb4238 Add update mechanism to MarkdownViewer resources, move link opening behavior to WebpagePanel 2024-12-06 01:48:58 +11:00
KamilDev
cf7b6ad46f Improved MarkdownViewer
#### Features
- Uses the latest [github-markdown.css](https://github.com/sindresorhus/github-markdown-css/blob/main/github-markdown.css) file that contains styling support for both dark and light mode.
- Table of Contents has an improved design, and:
	- The width can be resized.
	- TOC headings are automatically highlighted to help track your position in the file.
- Improved fullscreen layout based on Github.com behavior.
- External links clicked will open in default browser instead of doing nothing.
- Uses [markdownItAnchor](https://github.com/valeriangalliat/markdown-it-anchor) to allow heading anchor links in the file to work.
- Uses [highlight.js](https://github.com/highlightjs/highlight.js) to provide syntax highlighting to codeblocks.
#### Changes
- Made changes to allow the `md2html.html` file to use relative file imports for better maintainability.
- MarkdownViewer can now easily be customized by users by modifying files in `<Quicklook data folder>/QuickLook.Plugin.MarkdownViewer/`
- Caching and `localStorage` is now supported thanks to these changes.
- Prevent default behavior of spacebar scrolling the page, while we use spacebar to dismiss the preview.
- Sets `WebView` `DefaultBackgroundColor` to prevent white flash in dark mode. After the page has loaded, sets `DefaultBackgroundColor` back to white to have the expected default behavior on HTML pages that don't specify any background color.
#### Clean up
- Removed the need for `jQuery`.
- Removed old polyfill code.
2024-12-04 22:16:21 +11:00
ema
a5c3d5b143 Restore AssemblyInfo 2024-12-04 16:53:51 +08:00
ema
e8327e50c4 Fix preview HEIC #1470 2024-12-04 00:20:04 +08:00
ema
3e367da060 Merge pull request #1469 from shanto/fix-everything
Fix for Everything v1.5(a). Also supports v1.4 side by side.
2024-12-03 18:12:14 +08:00
ema
d79a3425e9 Merge pull request #1397 from Clausinho/patch-1
add scoop installation route
2024-12-03 17:23:16 +08:00
ema
9edf99fe88 Fix WiX error in new compilation 2024-12-02 22:34:36 +08:00
ema
507b157a40 Convert to .NET SDK type csproj 2024-11-30 17:00:22 +08:00
Shaan
6c800b1379 Fix for Everything v1.5(a) and later. Supports both v1.4 and v1.5. Turning off alpha_instance is no longer necessary. Also fixes a bug which crashes QuickLook when the path returned by client program is quoted. 2024-09-24 23:39:50 +06:00
BackThePortal
e2f1fddb09 Add .ino extension to C++ syntax highlighting (#1415) 2024-04-11 12:25:55 +02:00
Dreamoochy
6096fb0db6 Update Multi Commander changes 2024-02-25 15:56:51 +03:00
Dreamoochy
7132d5ac69 Added Multi Commander support 2024-02-25 15:52:41 +03:00
Claus-Peter Käpplinger
b279390ea9 add scoop installation route 2024-02-23 06:19:57 +01:00
Anton Trofymenko
96cbc31979 Ukrainian Word-for-word machine translation has been replaced with semantic translation. (#1392) 2024-02-13 12:51:53 +01:00
Frank Becker
17c385be53 Github action workflow to run a build for the latest version and upload the artifacts to a "latest" pre-release 2023-08-15 10:16:29 -07:00
Alexander Eder
1d566c942d Fix colors from previous commit 2023-07-28 10:35:35 +02:00
Alexander Eder
a74f5bd289 CSV: Change background from green to blue
Fixes #638
2023-07-27 16:39:53 +02:00
Piteriuz
0539ca94c0 Update polish translation (#1328) 2023-07-27 16:26:08 +02:00
PhysShell
f1cbdd00f8 added missing translations for russian (#1285) 2023-03-31 11:12:57 +08:00
Alexander Eder
592a768cd3 Bugfix hebrew translation 2023-03-29 18:11:31 +02:00
Alexander Raab
50979700bd Add translations for new buttons for ES and DE 2023-03-25 22:56:09 +01:00
Alexander Eder
431165f3d8 Add translation possibility for missing buttons (#1116)
* Minor translation tweak

* Add translation possibility for missing buttons pt1

* Add translation possibility for missing buttons pt2

* Update ViewerWindow.xaml.cs

* Update ViewerWindow.Actions.cs

* Update ViewerWindow.Actions.cs

* Update ViewerWindow.Actions.cs

* revert fmt change

---------

Co-authored-by: Paddy Xu <xupaddy@gmail.com>
2023-03-25 20:30:17 +08:00
1kamma
f090a96aad hebrew translation (#1241)
Co-authored-by: Paddy Xu <xupaddy@gmail.com>
2023-03-25 20:21:44 +08:00
Joonel
93fcb9bd30 Ukrainian translation fixes + addition (#1244) 2023-03-25 20:19:56 +08:00
NickMihal
71c8e51d1f Greek translation (#1256)
* Add Greek language

* Add Greek language

* Add Greek language
2023-03-25 20:18:43 +08:00
MonOcean
5c9072acfc Update for commic archive file types. (#1276)
Comic book archive is not a distinct file format. It is a filename extension naming convention.
The filename extension indicates the archive type used:
.cb7 → 7z
.cbr → RAR
.cbt → TAR
.cbz → ZIP
2023-03-25 20:17:32 +08:00
Frank Becker
47540eef95 In Textviewer when OS is in dark mode and AllowDarkTheme is enabled in config file use dark background and light text (no syntax highlighting). (#1238)
With AllowDarkTheme disabled (default) use light background and light mode syntax highlighting.
2022-12-12 15:45:25 +01:00
Frank Becker
7f7d9805f1 Fix gimp xcf file extension check (#1229) 2022-11-30 10:39:36 +01:00
Frank Becker
35450bd561 Upgrade Magick.NET to latest (#1230) 2022-11-30 10:39:23 +01:00
Frank Becker
b417664dd7 Handle multi-layer gimp xcf files. (#1224) 2022-11-29 23:36:06 +01:00
Paddy Xu
c6c727d2cc try fix SDK 2022-11-23 21:17:20 +01:00
Paddy Xu
dea3d05660 Merge branch 'master' of github.com:QL-Win/QuickLook 2022-11-23 20:38:56 +01:00
Paddy Xu
7b5b01a7b4 Fix textviewer highlighting 2022-11-23 20:38:53 +01:00
Alexander Eder
0ee6e3621b Experimental support for gimp (.xcf extension) 2022-11-17 13:13:52 +01:00
Samuel Carreira
437d47ed05 TSV file extension support (#1185)
if there are more file extensions to support maybe makes sense to readapt the code to iterate over a regex.
2022-11-08 19:58:20 +01:00
Paddy Xu
b80c264cdf Fix for Tabbed File Explorer in Windows 11 22H2 2022-11-05 17:58:23 +01:00
Alexander Raab
bd9b32ff91 Minor tweak to renew appveyor 2022-08-02 23:05:04 +02:00
Paddy
7c8655aff3 Fix #1147: DWM blur in Windows 10 and 11 2022-06-14 22:13:08 +02:00
marciozomb13
df4f642b51 Brazilian Portuguese fixes and improvements. (#1101)
Brazilian Portuguese fixes and improvements.
2022-03-11 17:52:06 +01:00
Piteriuz
95492fdd80 Update Polish translation (#1097) 2022-03-07 09:53:54 +01:00
SomeDeveloping
e8524dced5 Update French translation (#1083)
Update French strings
2022-03-03 17:16:11 +01:00
Paddy Xu
698e780988 Partial revert "move theme helper ref"
This reverts commit c93be2cb51.
2022-02-20 19:31:17 +01:00
Paddy
660dc88001 #1080: dark theme support for the text viewer 2022-02-20 18:55:28 +01:00
Paddy
c93be2cb51 move theme helper ref 2022-02-20 18:54:51 +01:00
Paddy Xu
fc14b58fa5 Fix #1033 again 2022-02-14 10:17:31 +01:00
Paddy Xu
1ed5f5ba2a Update .appveyor.yml 2022-02-13 15:12:58 +01:00
Paddy
22c08f62fa Fix #329: respect monitor ICC 2022-02-13 15:01:32 +01:00
Paddy
b39a58f1b9 rename 2022-02-13 12:21:06 +01:00
Paddy
d3217a0983 restore transparency in Win11 2022-02-13 10:51:11 +01:00
Paddy
e8125c51c5 refresh SDK 2022-02-13 10:50:47 +01:00
Paddy Xu
ef51c459ab Fix #1055: do not apply white background in ImageMagick 2021-12-02 18:04:28 +01:00
711 changed files with 66072 additions and 24439 deletions

View File

@@ -3,7 +3,7 @@ branches:
only:
- master
skip_branch_with_pr: true
image: Visual Studio 2019
image: Visual Studio 2022
configuration: Release
platform: Any CPU
clone_script:
@@ -20,7 +20,7 @@ cache:
- '%USERPROFILE%\.nuget\packages -> **\project.json'
before_build:
- ps: >-
$env:GIT_TAG = git describe --always --tags
$env:GIT_TAG = git describe --always --tags --exclude latest
nuget restore -verbosity detailed
build:
@@ -38,11 +38,11 @@ artifacts:
name: QuickLook-%GIT_TAG%
- path: QuickLook-%GIT_TAG%.msi
name: QuickLook-%GIT_TAG%
deploy:
- provider: GitHub
auth_token:
secure: 5CSvkfKBq9kUho529L1tkH5ywQQFJY/A8Y6lNoHGJFi7mnSqQAaoiVPbUVU4a/KC
artifact: QuickLook-$(APPVEYOR_REPO_TAG_NAME)
draft: true
on:
APPVEYOR_REPO_TAG: true
# deploy:
# - provider: GitHub
# auth_token:
# secure: 5CSvkfKBq9kUho529L1tkH5ywQQFJY/A8Y6lNoHGJFi7mnSqQAaoiVPbUVU4a/KC
# artifact: QuickLook-$(APPVEYOR_REPO_TAG_NAME)
# draft: true
# on:
# APPVEYOR_REPO_TAG: true

View File

@@ -23,7 +23,7 @@ A clear and concise description of what you expected to happen.
**Desktop (please complete the following information):**
- OS Version: [e.g. Windows 10 1803]
- QuickLook Version: [e.g. 0.3.3 from Windows Store]
- QuickLook Version: [e.g. 4.0.2 from Microsoft Store or from MSI installer]
**Screenshots and Exception Log**
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).

80
.github/workflows/msbuild.yml vendored Normal file
View File

@@ -0,0 +1,80 @@
# run a build for the latest version and upload the artifacts to a "latest" pre-release
name: MSBuild
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
workflow_dispatch:
env:
# Path to the solution file relative to the root of the project.
SOLUTION_FILE_PATH: ./QuickLook.sln
# Configuration type to build.
# You can convert this to a build matrix if you need coverage of multiple configuration types.
# https://docs.github.com/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
BUILD_CONFIGURATION: Release
permissions:
contents: read
jobs:
build:
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
with:
submodules: recursive
fetch-depth: 0
ref: master
- name: Add MSBuild to PATH
uses: microsoft/setup-msbuild@v1.0.2
- name: Restore NuGet packages
working-directory: ${{env.GITHUB_WORKSPACE}}
run: nuget restore ${{env.SOLUTION_FILE_PATH}}
- name: Build
working-directory: ${{env.GITHUB_WORKSPACE}}
# Add additional options to the MSBuild command line here (like platform or verbosity level).
# See https://docs.microsoft.com/visualstudio/msbuild/msbuild-command-line-reference
run: msbuild /m /p:BuildInParallel=true /p:Configuration=${{env.BUILD_CONFIGURATION}} ${{env.SOLUTION_FILE_PATH}}
# upload msi and zip artifacts so the publish job below can download and then update latest release via Linux
- uses: actions/upload-artifact@v4
with:
name: quicklook-build-files
path: Build/QuickLook-*.*
publish:
# don't run in parallel - wait for build to complete first
needs: build
# one of the steps uses container action which is Linux only
runs-on: ubuntu-latest
permissions: write-all
# only run this job on push events, not pull_request
if: github.event_name == 'push'
steps:
- uses: actions/download-artifact@v4
with:
name: quicklook-build-files
- name: Update latest release
# see https://github.com/pyTooling/Actions/tree/main/releaser
uses: pyTooling/Actions/releaser@main
with:
tag: latest
rm: true
token: ${{ secrets.GITHUB_TOKEN }}
files: QuickLook-*.*

7
.gitignore vendored
View File

@@ -290,6 +290,11 @@ __pycache__/
/QuickLook.Installer/C_QuickLookComponents.wxs
/Build/*
!/Build/Assets
!/Build/AppxManifest.*
!/Build/AppxManifest.xml
!/Build/assetslayout.resfiles
!/Build/priconfig.xml
!/Build/micasetup.json
!/Build/openssl-sign.cnf
!/Build/sideload.crt
!/Build/sideload.key
!/Build/sideload.pfx

View File

@@ -1,53 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10"
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10">
<Identity Name="21090PaddyXu.QuickLook" Version="0.0.0.0"
Publisher='E=xupaddy@gmail.com, CN="Open Source Developer, Pengfei Xu", O=Open Source Developer, C=FI' />
<Properties>
<DisplayName>QuickLook</DisplayName>
<PublisherDisplayName>Paddy Xu</PublisherDisplayName>
<Description>Bring macOS &#8220;Quick Look&#8221; feature to Windows</Description>
<Logo>Assets\storelogo.png</Logo>
</Properties>
<Resources>
<Resource Language="en-us" />
<Resource uap:Scale="100" />
<Resource uap:Scale="125" />
<Resource uap:Scale="150" />
<Resource uap:Scale="200" />
<Resource uap:Scale="400" />
</Resources>
<Dependencies>
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.14316.0" MaxVersionTested="10.0.15063.0" />
</Dependencies>
<Capabilities>
<rescap:Capability Name="runFullTrust" />
</Capabilities>
<Applications>
<Application Id="Main" Executable="Package\QuickLook.exe" EntryPoint="Windows.FullTrustApplication">
<Extensions>
<desktop:Extension Category="windows.startupTask" Executable="Package\QuickLook.exe"
EntryPoint="Windows.FullTrustApplication">
<desktop:StartupTask TaskId="QuickLookTask" Enabled="true" DisplayName="QuickLook" />
</desktop:Extension>
</Extensions>
<uap:VisualElements DisplayName="QuickLook"
Description="Bring macOS &#8220;Quick Look&#8221; feature to Windows"
BackgroundColor="transparent"
Square150x150Logo="Assets\Square150x150Logo.png"
Square44x44Logo="Assets\Square44x44Logo.png">
<uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png"
Square310x310Logo="Assets\LargeTile.png"
Square71x71Logo="Assets\SmallTile.png">
<uap:ShowNameOnTiles>
<uap:ShowOn Tile="square150x150Logo" />
<uap:ShowOn Tile="wide310x150Logo" />
<uap:ShowOn Tile="square310x310Logo" />
</uap:ShowNameOnTiles>
</uap:DefaultTile>
</uap:VisualElements>
</Application>
</Applications>
</Package>

View File

@@ -3,10 +3,15 @@
xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10"
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10">
<!-- Invalid package identity name: QL-Win.QuickLook (expected: 21090PaddyXu.QuickLook) -->
<!-- Invalid package family name: QL-Win.QuickLook_wgqddy12gm212 (expected: 21090PaddyXu.QuickLook_egxr34yet59cg) -->
<!-- Invalid package publisher name: CN=F4F538EC-55CB-41B8-9531-25CC140D0339 (expected: CN=CE36AF3D-FF94-43EB-9908-7EC8FD1D29FB) -->
<Identity Name="21090PaddyXu.QuickLook" Version="0.0.0.0" Publisher="CN=CE36AF3D-FF94-43EB-9908-7EC8FD1D29FB" />
<Properties>
<DisplayName>QuickLook</DisplayName>
<PublisherDisplayName>Paddy Xu</PublisherDisplayName>
<!-- We can not set the name to QL-Win, see the following error message -->
<!-- Package acceptance validation error: The PublisherDisplayName element in the app manifest of QuickLook-4.0.1.0.appx is QL-Win, which doesn't match your publisher display name: emako. -->
<PublisherDisplayName>emako</PublisherDisplayName>
<Description>Bring macOS &#8220;Quick Look&#8221; feature to Windows</Description>
<Logo>Assets\storelogo.png</Logo>
</Properties>
@@ -19,7 +24,7 @@
<Resource uap:Scale="400" />
</Resources>
<Dependencies>
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.14316.0" MaxVersionTested="10.0.15063.0" />
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.14316.0" MaxVersionTested="10.0.26100.0" />
</Dependencies>
<Capabilities>
<rescap:Capability Name="runFullTrust" />

BIN
Build/Assets/Branding/1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 569 KiB

BIN
Build/Assets/Branding/2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

BIN
Build/Assets/Branding/3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 970 KiB

BIN
Build/Assets/Branding/4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

BIN
Build/Assets/Branding/5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 288 KiB

BIN
Build/Assets/Branding/6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 383 KiB

BIN
Build/Assets/Branding/7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

46
Build/micasetup.json Normal file
View File

@@ -0,0 +1,46 @@
{
"Template": "${MicaDir}/template/default.7z",
"Package": "./Package.7z",
"Output": "./${AppName}.exe",
"AppName": "QuickLook",
"KeyName": "QuickLook",
"ExeName": "QuickLook.exe",
"Publisher": "QL-Win",
"Version": "${Package}./${ExeName}|3",
"TargetFramework": "net472",
"Guid": "8B4A9CE5-67B5-4A94-81CB-3771F688FDEB",
"Favicon": "./Assets/Square44x44Logo.altform-unplated_targetsize-256.png",
"Icon": "./Assets/Square44x44Logo.altform-unplated_targetsize-256.setup.png",
"UnIcon": "./Assets/Square44x44Logo.altform-unplated_targetsize-256.uninst.png",
"LicenseFile": "../LICENSE-GPL.txt",
"License": null,
"LicenseType": null,
"RequestExecutionLevel": "admin",
"SingleInstanceMutex": null,
"IsCreateDesktopShortcut": true,
"IsCreateUninst": true,
"IsCreateStartMenu": true,
"IsPinToStartMenu": false,
"IsCreateQuickLaunch": true,
"IsCreateRegistryKeys": true,
"IsCreateAsAutoRun": false,
"IsCustomizeVisiableAutoRun": false,
"AutoRunLaunchCommand": "/autostart",
"IsUseFolderPickerPreferClassic": false,
"IsUseInstallPathPreferX86": false,
"IsUseInstallPathPreferAppDataLocalPrograms": true,
"IsUseInstallPathPreferAppDataRoaming": false,
"IsUseRegistryPreferX86": null,
"IsAllowFullFolderSecurity": true,
"IsAllowFirewall": true,
"IsRefreshExplorer": true,
"IsInstallCertificate": false,
"IsEnableUninstallDelayUntilReboot": true,
"IsUseTempPathFork": false,
"IsEnvironmentVariable": false,
"OverlayInstallRemoveExt": "exe,dll,pdb,config,winmd,txt,bat,ax,manifest,xshd",
"UnpackingPassword": null,
"MessageOfPage1": null,
"MessageOfPage2": null,
"MessageOfPage3": null
}

13
Build/openssl-sign.cnf Normal file
View File

@@ -0,0 +1,13 @@
[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
x509_extensions = v3_req
[dn]
CN = CE36AF3D-FF94-43EB-9908-7EC8FD1D29FB
[v3_req]
keyUsage = critical, digitalSignature
extendedKeyUsage = codeSigning

20
Build/sideload.crt Normal file
View File

@@ -0,0 +1,20 @@
-----BEGIN CERTIFICATE-----
MIIDMjCCAhqgAwIBAgIUBIWdItfat0Fw6npbHI2W7HE/0KYwDQYJKoZIhvcNAQEL
BQAwLzEtMCsGA1UEAwwkQ0UzNkFGM0QtRkY5NC00M0VCLTk5MDgtN0VDOEZEMUQy
OUZCMB4XDTI1MDUxMzE3NDgzNVoXDTI4MDUxMjE3NDgzNVowLzEtMCsGA1UEAwwk
Q0UzNkFGM0QtRkY5NC00M0VCLTk5MDgtN0VDOEZEMUQyOUZCMIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnAtbhjH01YmWv1U98kMj3epdpuZLE04pGXOR
xfdBb1zX8Q75hy5SmIaHrsow7fTXfHsUzuJEmanllMbJGUpi46fLsb8Ijd4uQgXO
wSDfIXrm34Buzpk6EKwEWmRMyORmfPwy0A+XdTHydDhEXndy1eGPJ1ZZnldVI8Ho
ZF2MW35QBZDjlWZh3RppWNMksvlngrOX4PFfJ+DtOQUvNswbpyqVATMFBk9kShGM
XHuieibzDlzxGNKSn3tDvutLBW5hm7iLqEuAeM7dwSac4C+N5FKWnXJndkN3k8AN
nD0MHlErN1dLoJQqvAaCarZr8RSPhdanVOylMGkt97NLYZrLTQIDAQABo0YwRDAO
BgNVHQ8BAf8EBAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwHQYDVR0OBBYEFJEL
e4QaWs4H2djQ6nnnc/30sZ/nMA0GCSqGSIb3DQEBCwUAA4IBAQBYBXkl/vEsGUHI
qogCfb/DxFlsm059sxHAIhaNjuoTlgwzgj6KSPbKsfnYVMHZFqkg4AaTuRs9iqTL
TStM14OjG95gn+7fJ4zxqquEEytk9yb2xj9ZpLAvzZzUrw5qo1lmM7yPRso38l62
9g1G1/MVP6pO03QWKzvSV+IlU3DIP3M2r74G8dexL5/Cut1LkOc/tn2ZYt3Ij95e
RM2vqxzK2pw6IAVG3wdNGAyN9K8BATRuAXFV6RXkeEBHFNV3wpyq4W+H6hpsrMJM
rMZUUqLa8BTUQAsZ1jmL+dRmj2rESeOaOO9jPks4J4c8+v8aJQBmZhvxRyjyMtdL
pWHSCCgm
-----END CERTIFICATE-----

28
Build/sideload.key Normal file
View File

@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCcC1uGMfTViZa/
VT3yQyPd6l2m5ksTTikZc5HF90FvXNfxDvmHLlKYhoeuyjDt9Nd8exTO4kSZqeWU
xskZSmLjp8uxvwiN3i5CBc7BIN8heubfgG7OmToQrARaZEzI5GZ8/DLQD5d1MfJ0
OERed3LV4Y8nVlmeV1UjwehkXYxbflAFkOOVZmHdGmlY0ySy+WeCs5fg8V8n4O05
BS82zBunKpUBMwUGT2RKEYxce6J6JvMOXPEY0pKfe0O+60sFbmGbuIuoS4B4zt3B
JpzgL43kUpadcmd2Q3eTwA2cPQweUSs3V0uglCq8BoJqtmvxFI+F1qdU7KUwaS33
s0thmstNAgMBAAECggEABS51XWPhmt5E5K6Pw4XKNkS207jC68MFJ1oIkE0bsvcf
boWORe2vrW6OKSt/627dYZNJXMNI/tyUNIKooSUwr8QzGysE6DJlUSjrNXYszT+i
VJqUU1o614c2unT+fbnj01OhMPp2OjHXOK0OTCAQQ/IySYlFqYssgbxJxgdl2+XX
rDiSk5PvZ0Z8PUuG7EvNbRAnUmIQDVTd81My0kPk4M0w8Rg2p0sIN5klIDxTzC98
5iUvS+53xch4f8jJOr8s7J/56R+tnIoqfVkIDI3Q4CUhq3s0DAC7GP4vpoynGXn0
pLzHvOttFbqgcHkS2zrVOXKwl4Zym4p+kMCub6BCmwKBgQDcGzCvrMon4fIJrymG
lmGZMeN8acjD0MKDT8JPgHkwXTz61AbOC2EGoOpWNqrYGOCv6xSMPiub1un6Y5X2
KIuAJm+bY+py0Ed+EzZjrFkQpGt6xQ3FY2aFvA5uS3esgcF+OtcUrXEEq0dK9bZ6
HB9P90QuND72bvfx9wjLon0dvwKBgQC1fcRbLpqA2lSGglcRoioA/okMPyMk7jH3
n3IHjnpjsBu1FPrWH8Tqtop4vrEVS1cxM7P7FXWwWPqUH/2XbCk1R3T9ZD+i1kHi
qvSqp4L0dfTk6ibZpywGXRnpQzT5kKJTrSSx9L7Ni00HcvCI1+p4XNdJZm7jNDSy
dGSPg1ox8wKBgB6TaF//ENYZfRX7TzlzCnvNglx2FX2eMmcrXULOBgfB7AasDYXx
7riNAgCX94OtcQj/DwusV0J+yGIQE3TujPJwZHChoJ/ybvwEjzmpZ3X4YTXcydzx
wfwx848+zJEaNVbjtZ0Zuul7IZw4JfEwluj04HPKrjRtleP2/THMkLThAoGBAJYh
BwB2OJBGCo2J3ARWJHDWHP/oamXuM58mYekmTs+PqhvM0wG1HesaPMlM1KdMvz+Q
CV21jrjlocJOBDPx4NSV24yQFKPaoH2j9OgF0SnvOTjzCFgbFSveb8SpN3UJ031s
SGJ8lijpBjsXNSm9kdMm2V96QFfpo33LEjQ077NJAoGARnnvnenmfwlu/5Oq2Ojs
WWzOxXTpiGXLnbUNUvQMvqXxGygCGoA18vVveLr6eKfojM8iKtGF91S9NsUkBEkd
VKOFnc9OQ5dtoBkN6XZBUCmJCzQZS20A3jq9oionsJlIWOgb/X3L1cS2SZ3ocgKS
lCCN2IGaKiGJCPJprpFW7fg=
-----END PRIVATE KEY-----

BIN
Build/sideload.pfx Normal file

Binary file not shown.

112
CHANGELOG.md Normal file
View File

@@ -0,0 +1,112 @@
## 4.1.1
- Add built-in ThumbnailViewer plugin [#1662](https://github.com/QL-Win/QuickLook/issues/1662)
- Add built-in HelixViewer for 3d models [#1662](https://github.com/QL-Win/QuickLook/issues/1662)
- Add FBX model support using AssimpNet [#1479](https://github.com/QL-Win/QuickLook/issues/1479)
- Add `SVGA` and `Lottie Files` animation preview support
- Add MathJax inline math support to Markdown [#1640](https://github.com/QL-Win/QuickLook/issues/1640)
- Add `SubRip Subtitle (.srt) files`, `Protobuf`, `NSIS`, `.gitmodules`, `.dotsettings`, `.gitignore`, `.gitattributes`, `Markdown`, `reStructuredText`, `simple QML syntax`, `.env`, `Configuration (.conf;.config;.cfg)` highlighting [#1002](https://github.com/QL-Win/QuickLook/issues/1002)
- Add dark mode highlighting for `PowerShell`, `Registry`, `C`, `C++`, `Java`, `Rust`, `SQL`, `Ruby`, `R`, `PHP`, `Pascal`, `Objective-C`, `Lisp`, `Kotlin`, `Erlang`, `Dart`, `Swift`, `VisualSolution`, `CMake`
- Add `MakefileDetector`, `CMakeListsDetector for CMakeLists.txt`, `DockerfileDetector`, `HostsDetector for hosts` for text viewer
- Improve QuickLook initialization speed
- Optimize JSONDetector with Span
- Set RichTextBox background to transparent
- Revert Add Sandbox detection from 4.1.0 which will call crash
## 4.1.0
- Add built-in AppViewer plugin for `.msi`, `.appx`, `.msix`, `.wgt`, `.wgtu`, `.apk`, `.ipa`, `.hap`, `.deb`, `.dmg`, `.appimage`, `.rpm`, `.aab`
- Add built-in ELF viewer plugin for ELF-type files
- Add reload feature by JSuttHoops but you should enable `AutoReload` option firstly
- New option ProcessRenderMode
- Use format detector feature for TextViewer, only `JSON` / `XML` available now
- Add support more highlighting for `HLSL`, `XML`, `TXT`, `Properties`, `Lyric`, `Log`, `Python`, `JavaScript`, `Vue`, `CSS`, `Go`, `YAML`, `F#`, `INI`, `TypeScript`, `VB`, `SubStation Alpha` and `Lua`
- No markdown resource extraction [#1661](https://github.com/QL-Win/QuickLook/issues/1661) [#1670](https://github.com/QL-Win/QuickLook/issues/1670)
- Support X11 and more JPEG2000 image formats
- Support JXR image but SDR only [#1680](https://github.com/QL-Win/QuickLook/issues/1680)
- Enable window dragging in video viewer panel [#425](https://github.com/QL-Win/QuickLook/issues/425)
- Add SVG support using WebView2 in ImageViewer
- Support RTL for .txt file [#1612](https://github.com/QL-Win/QuickLook/issues/1612)
- Add `Alt+Z` shortcut to toggle word wrap [#1487](https://github.com/QL-Win/QuickLook/issues/1487)
- Improve startup speed [#1521](https://github.com/QL-Win/QuickLook/issues/1521)
- Improve PDF magic detection
- Improve GroupBox UI/UX
- Attempt to fix the crash [#1648](https://github.com/QL-Win/QuickLook/issues/1648) `This is an experimental fix, the idea is to remove the tree to prevent the DUCE command`
- Update font pangram for FontViewer
- Update de translations by King3R
- Manually resolve the assembly fails [#1618](https://github.com/QL-Win/QuickLook/issues/1618)
- Merge OfficeViewer-Native plugin [#1662](https://github.com/QL-Win/QuickLook/issues/1662)
- New option CheckPreviewHandler for OfficeViewer-Native
- Add Sandbox detection
- Revert the DataGrid style of CSV [#1664](https://github.com/QL-Win/QuickLook/issues/1664)
- Remove the WoW64HookHelper from release [#1634](https://github.com/QL-Win/QuickLook/issues/1634)
- Fix share button was not visible in win11
- Fix generic theme resources [#1652](https://github.com/QL-Win/QuickLook/issues/1652)
- Fix old version volume exception [#1653](https://github.com/QL-Win/QuickLook/issues/1653)
- Fix CaptionTextButtonStyle not static anymore
- Fix unsupported ColorContexts in Windows [#1671](https://github.com/QL-Win/QuickLook/issues/1671)
- ~~Fix long path issue [#1643](https://github.com/QL-Win/QuickLook/issues/1643)~~
## 4.0.2
- Support .pcx image [#1638](https://github.com/QL-Win/QuickLook/issues/1638)
- Improve PE parsing with extended buffer size
- Fix flickering [#1628](https://github.com/QL-Win/QuickLook/issues/1628)
- Fix DpiAwareness for PerMonitor [#1626](https://github.com/QL-Win/QuickLook/issues/1626)
- Hide PEViewer Title just like InfoPanel
- Avoid audio cover null exception in xaml
## 4.0.1
- Support more Markdown file extensions [#1562](https://github.com/QL-Win/QuickLook/issues/1562), [#1601](https://github.com/QL-Win/QuickLook/issues/1601)
- Support CLI options [#1620](https://github.com/QL-Win/QuickLook/issues/1620)
- Update pt-BR translations in Translations.config
- Delay initialization of MarkdownViewer
- Make .exe installer use MSI path by default [#1596](https://github.com/QL-Win/QuickLook/issues/1596)
- Fix style issues in the Search Panel [#1592](https://github.com/QL-Win/QuickLook/issues/1592)
- Fix volume control not working [#1578](https://github.com/QL-Win/QuickLook/issues/1578)
- Fix exception when checking for updates [#1577](https://github.com/QL-Win/QuickLook/issues/1577)
## 4.0.0
- Add built-in PE viewer plugin
- Add built-in font viewer plugin
- Update translations
- Update dependent packages
- Add support for Multi Commander
- Add support for both Everything v1.4 and v1.5(a)
- Add "Open Data Folder" and dark mode support to tray menu
- Add "Restart QuickLook" option to tray menu [#1448](https://github.com/QL-Win/QuickLook/issues/1448)
- Implement modern message box UI
- Replace icons with Segoe Fluent Icons
- Detect and auto-fix Windows blocking issues [#1495](https://github.com/QL-Win/QuickLook/issues/1495)
- Adjust tray menu position
- Use MicaSetup to create EXE installer
- Fix plugin installer description length limit
- Prevent crash when WMI fails [#1379](https://github.com/QL-Win/QuickLook/issues/1379)
- Show toast when "Prevent Closing" cannot be cancelled [#1368](https://github.com/QL-Win/QuickLook/issues/1368)
- Add support for multi-layer GIMP .xcf files [#1224](https://github.com/QL-Win/QuickLook/issues/1224) for ImageViewer
- Fix .xcf file extension check [#1229](https://github.com/QL-Win/QuickLook/issues/1229) for ImageViewer
- Fix HEIC preview rendering [#1470](https://github.com/QL-Win/QuickLook/issues/1470) for ImageViewer
- Add support for .qoi, .icns, .dds, .svgz, .psb, .cur, and .ani formats for ImageViewer
- Improve animated WebP support (x64 only) [#1024](https://github.com/QL-Win/QuickLook/issues/1024) [#1324](https://github.com/QL-Win/QuickLook/issues/1324) for ImageViewer
- Improve GIF decoding performance [#993](https://github.com/QL-Win/QuickLook/issues/993) for ImageViewer
- Add copy button to image viewer [#1399](https://github.com/QL-Win/QuickLook/issues/1399) for ImageViewer
- Fix SVG rendering error [#1430](https://github.com/QL-Win/QuickLook/issues/1430) for ImageViewer
- Add double-encoding detection [#471](https://github.com/QL-Win/QuickLook/issues/471) [#600](https://github.com/QL-Win/QuickLook/issues/600) for TextViewer
- Improve dark mode rendering for TextViewer
- Catch exceptions from XSHD loader for TextViewer
- Add syntax highlighting for shell scripts [#668](https://github.com/QL-Win/QuickLook/issues/668) for TextViewer
- Add dark mode support for C# syntax highlighting for TextViewer
- Improve support for comic archive formats [#1276](https://github.com/QL-Win/QuickLook/issues/1276) for ArchiveViewer
- Redesign file list with Fluent UI for ArchiveViewer
- Change default background color to blue for CsvViewer
- Fix issue with non-UTF8 CSV encoding for CsvViewer
- Improve rendering and stability for MarkdownViewer
- Add support for password-protected PDFs [#155](https://github.com/QL-Win/QuickLook/issues/155) for PDFViewer
- Enable auto-resizing of the viewer window for PDFViewer
- Fix audio cover parsing error for multiple embedded images for VideoViewer
- Add lyric (.lrc) support for audio files [#1506](https://github.com/QL-Win/QuickLook/issues/1506) for VideoViewer
- Add support for .mid audio format [#931](https://github.com/QL-Win/QuickLook/issues/931) for VideoViewer
- Fix time label overflow in long videos for VideoViewer

90
CodeMaid.config Normal file
View File

@@ -0,0 +1,90 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="SteveCadwallader.CodeMaid.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</sectionGroup>
</configSections>
<userSettings>
<SteveCadwallader.CodeMaid.Properties.Settings>
<setting name="General_Theme" serializeAs="String">
<value>1</value>
</setting>
<setting name="Cleaning_AutoCleanupOnFileSave" serializeAs="String">
<value>True</value>
</setting>
<setting name="ThirdParty_UseXAMLStylerCleanup" serializeAs="String">
<value>False</value>
</setting>
<setting name="Cleaning_RemoveEndOfFileTrailingNewLine" serializeAs="String">
<value>True</value>
</setting>
<setting name="Cleaning_IncludeCPlusPlus" serializeAs="String">
<value>False</value>
</setting>
<setting name="Cleaning_IncludeXAML" serializeAs="String">
<value>False</value>
</setting>
<setting name="Cleaning_IncludeXML" serializeAs="String">
<value>False</value>
</setting>
<setting name="Cleaning_IncludePHP" serializeAs="String">
<value>False</value>
</setting>
<setting name="Cleaning_IncludeCSS" serializeAs="String">
<value>False</value>
</setting>
<setting name="Cleaning_IncludeHTML" serializeAs="String">
<value>False</value>
</setting>
<setting name="Cleaning_IncludeTypeScript" serializeAs="String">
<value>False</value>
</setting>
<setting name="Cleaning_IncludeJSON" serializeAs="String">
<value>False</value>
</setting>
<setting name="Cleaning_IncludeJavaScript" serializeAs="String">
<value>False</value>
</setting>
<setting name="Cleaning_IncludeSCSS" serializeAs="String">
<value>False</value>
</setting>
<setting name="Cleaning_IncludeLESS" serializeAs="String">
<value>False</value>
</setting>
<setting name="Cleaning_IncludeR" serializeAs="String">
<value>False</value>
</setting>
<setting name="Cleaning_IncludePowerShell" serializeAs="String">
<value>False</value>
</setting>
<setting name="Cleaning_InsertEndOfFileTrailingNewLine" serializeAs="String">
<value>True</value>
</setting>
<setting name="Cleaning_InsertExplicitAccessModifiersOnClasses"
serializeAs="String">
<value>False</value>
</setting>
<setting name="Cleaning_InsertExplicitAccessModifiersOnDelegates"
serializeAs="String">
<value>False</value>
</setting>
<setting name="Cleaning_InsertExplicitAccessModifiersOnEnumerations"
serializeAs="String">
<value>False</value>
</setting>
<setting name="Cleaning_InsertExplicitAccessModifiersOnInterfaces"
serializeAs="String">
<value>False</value>
</setting>
<setting name="Cleaning_InsertExplicitAccessModifiersOnStructs"
serializeAs="String">
<value>False</value>
</setting>
<setting name="Cleaning_InsertExplicitAccessModifiersOnMethods"
serializeAs="String">
<value>False</value>
</setting>
</SteveCadwallader.CodeMaid.Properties.Settings>
</userSettings>
</configuration>

7
QuickLook.Appx/.gitignore vendored Normal file
View File

@@ -0,0 +1,7 @@
.vs/*
[Bb]in/
[Oo]bj/
AppPackages/*
BundleArtifacts/*
*.user
*.cache

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 299 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 319 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 577 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 782 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 782 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 607 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 951 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

@@ -0,0 +1,51 @@
<?xml version="1.0" encoding="utf-8"?>
<Package
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap rescap">
<Identity
Name="CE36AF3D-FF94-43EB-9908-7EC8FD1D29FB"
Publisher="CN=CE36AF3D-FF94-43EB-9908-7EC8FD1D29FB"
Version="4.0.2.0" />
<Properties>
<DisplayName>QuickLook</DisplayName>
<PublisherDisplayName>ema</PublisherDisplayName>
<Logo>Images\StoreLogo.png</Logo>
</Properties>
<Dependencies>
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.0.0" MaxVersionTested="10.0.0.0" />
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.14393.0" MaxVersionTested="10.0.14393.0" />
</Dependencies>
<Resources>
<Resource Language="x-generate"/>
</Resources>
<Applications>
<Application Id="App"
Executable="$targetnametoken$.exe"
EntryPoint="$targetentrypoint$">
<uap:VisualElements
DisplayName="QuickLook"
Description="Bring macOS “Quick Look” feature to Windows"
BackgroundColor="transparent"
Square150x150Logo="Images\Square150x150Logo.png"
Square44x44Logo="Images\Square44x44Logo.png">
<uap:DefaultTile Wide310x150Logo="Images\Wide310x150Logo.png" Square71x71Logo="Images\SmallTile.png" Square310x310Logo="Images\LargeTile.png"/>
<uap:SplashScreen Image="Images\SplashScreen.png" />
<uap:LockScreen BadgeLogo="Images\BadgeLogo.png" Notification="badgeAndTileText"/>
<uap:InitialRotationPreference>
<uap:Rotation Preference="landscape"/></uap:InitialRotationPreference>
</uap:VisualElements>
</Application>
</Applications>
<Capabilities>
<rescap:Capability Name="runFullTrust" />
</Capabilities>
</Package>

View File

@@ -0,0 +1,113 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '15.0'">
<VisualStudioVersion>15.0</VisualStudioVersion>
</PropertyGroup>
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup>
<WapProjPath Condition="'$(WapProjPath)'==''">$(MSBuildExtensionsPath)\Microsoft\DesktopBridge\</WapProjPath>
</PropertyGroup>
<Import Project="$(WapProjPath)\Microsoft.DesktopBridge.props" />
<PropertyGroup>
<ProjectGuid>0b2465a9-2dc4-41c6-9fd5-af357969b85c</ProjectGuid>
<TargetPlatformVersion>10.0.26100.0</TargetPlatformVersion>
<TargetPlatformMinVersion>10.0.18362.0</TargetPlatformMinVersion>
<DefaultLanguage>en-US</DefaultLanguage>
<AppxPackageSigningEnabled>True</AppxPackageSigningEnabled>
<NoWarn>$(NoWarn);NU1702</NoWarn>
<PackageCertificateThumbprint>2C4426FFCBF7BB78EA1856105CCAAC44F7D91F04</PackageCertificateThumbprint>
<GenerateAppInstallerFile>False</GenerateAppInstallerFile>
<AppxPackageSigningTimestampDigestAlgorithm>SHA256</AppxPackageSigningTimestampDigestAlgorithm>
<AppxAutoIncrementPackageRevision>False</AppxAutoIncrementPackageRevision>
<GenerateTestArtifacts>True</GenerateTestArtifacts>
<AppxBundlePlatforms>x64</AppxBundlePlatforms>
<HoursBetweenUpdateChecks>0</HoursBetweenUpdateChecks>
<AppxSymbolPackageEnabled>True</AppxSymbolPackageEnabled>
<EntryPointProjectUniqueName>..\QuickLook\QuickLook.csproj</EntryPointProjectUniqueName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<AppxBundle>Always</AppxBundle>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<AppxBundle>Always</AppxBundle>
</PropertyGroup>
<ItemGroup>
<AppxManifest Include="Package.appxmanifest">
<SubType>Designer</SubType>
</AppxManifest>
</ItemGroup>
<ItemGroup>
<Content Include="Images\Wide310x150Logo.scale-400.png" />
<Content Include="Images\BadgeLogo.scale-100.png" />
<Content Include="Images\BadgeLogo.scale-125.png" />
<Content Include="Images\BadgeLogo.scale-150.png" />
<Content Include="Images\BadgeLogo.scale-200.png" />
<Content Include="Images\BadgeLogo.scale-400.png" />
<Content Include="Images\LargeTile.scale-100.png" />
<Content Include="Images\LargeTile.scale-125.png" />
<Content Include="Images\LargeTile.scale-150.png" />
<Content Include="Images\LargeTile.scale-200.png" />
<Content Include="Images\LargeTile.scale-400.png" />
<Content Include="Images\SmallTile.scale-100.png" />
<Content Include="Images\SmallTile.scale-125.png" />
<Content Include="Images\SmallTile.scale-150.png" />
<Content Include="Images\SmallTile.scale-200.png" />
<Content Include="Images\SmallTile.scale-400.png" />
<Content Include="Images\SplashScreen.scale-100.png" />
<Content Include="Images\SplashScreen.scale-125.png" />
<Content Include="Images\SplashScreen.scale-150.png" />
<Content Include="Images\SplashScreen.scale-200.png" />
<Content Include="Images\SplashScreen.scale-400.png" />
<Content Include="Images\Square150x150Logo.scale-100.png" />
<Content Include="Images\Square150x150Logo.scale-125.png" />
<Content Include="Images\Square150x150Logo.scale-150.png" />
<Content Include="Images\Square150x150Logo.scale-200.png" />
<Content Include="Images\Square150x150Logo.scale-400.png" />
<Content Include="Images\Square44x44Logo.altform-lightunplated_targetsize-16.png" />
<Content Include="Images\Square44x44Logo.altform-lightunplated_targetsize-24.png" />
<Content Include="Images\Square44x44Logo.altform-lightunplated_targetsize-256.png" />
<Content Include="Images\Square44x44Logo.altform-lightunplated_targetsize-32.png" />
<Content Include="Images\Square44x44Logo.altform-lightunplated_targetsize-48.png" />
<Content Include="Images\Square44x44Logo.altform-unplated_targetsize-16.png" />
<Content Include="Images\Square44x44Logo.altform-unplated_targetsize-256.png" />
<Content Include="Images\Square44x44Logo.altform-unplated_targetsize-32.png" />
<Content Include="Images\Square44x44Logo.altform-unplated_targetsize-48.png" />
<Content Include="Images\Square44x44Logo.scale-100.png" />
<Content Include="Images\Square44x44Logo.scale-125.png" />
<Content Include="Images\Square44x44Logo.scale-150.png" />
<Content Include="Images\Square44x44Logo.scale-200.png" />
<Content Include="Images\Square44x44Logo.scale-400.png" />
<Content Include="Images\Square44x44Logo.targetsize-16.png" />
<Content Include="Images\Square44x44Logo.targetsize-24.png" />
<Content Include="Images\Square44x44Logo.targetsize-24_altform-unplated.png" />
<Content Include="Images\Square44x44Logo.targetsize-256.png" />
<Content Include="Images\Square44x44Logo.targetsize-32.png" />
<Content Include="Images\Square44x44Logo.targetsize-48.png" />
<Content Include="Images\StoreLogo.scale-100.png" />
<Content Include="Images\StoreLogo.scale-125.png" />
<Content Include="Images\StoreLogo.scale-150.png" />
<Content Include="Images\StoreLogo.scale-200.png" />
<Content Include="Images\StoreLogo.scale-400.png" />
<Content Include="Images\Wide310x150Logo.scale-100.png" />
<Content Include="Images\Wide310x150Logo.scale-125.png" />
<Content Include="Images\Wide310x150Logo.scale-150.png" />
<Content Include="Images\Wide310x150Logo.scale-200.png" />
<None Include="sideload.pfx" />
</ItemGroup>
<Import Project="$(WapProjPath)\Microsoft.DesktopBridge.targets" />
<ItemGroup>
<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.26100.1" PrivateAssets="all" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\QuickLook\QuickLook.csproj" />
</ItemGroup>
</Project>

View File

@@ -2,7 +2,7 @@
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="QuickLook" Language="1033"
Version="!(bind.FileVersion.fil22F7B7F07E63622AD2451459086A3CF2)" Manufacturer="Paddy Xu"
Version="!(bind.FileVersion.fil22F7B7F07E63622AD2451459086A3CF2)" Manufacturer="QL-Win"
UpgradeCode="c83b9c02-87d6-494e-9f5f-cf4c3900a54d">
<Package InstallerVersion="500" Compressed="yes" Platform="x86" InstallScope="perUser" />

View File

@@ -1,14 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" InitialTargets="EnsureWixToolsetInstalled" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project ToolsVersion="Current" DefaultTargets="Build" InitialTargets="EnsureWixToolsetInstalled" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>3.10</ProductVersion>
<ProductVersion>3.14</ProductVersion>
<ProjectGuid>f0214fc2-efbe-426c-842d-b42bc37d9525</ProjectGuid>
<SchemaVersion>2.0</SchemaVersion>
<OutputName>QuickLook</OutputName>
<OutputType>Package</OutputType>
<OutputPath>..\Build\</OutputPath>
<LangVersion>latest</LangVersion>
<IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
@@ -32,9 +33,9 @@
<Content Include="gpl.rtf" />
</ItemGroup>
<Import Project="$(WixTargetsPath)" Condition=" '$(WixTargetsPath)' != '' " />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets" Condition=" '$(WixTargetsPath)' == '' AND Exists('$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets') " />
<Import Project="$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets" Condition=" '$(WixTargetsPath)' == '' AND Exists('$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets') " />
<Target Name="EnsureWixToolsetInstalled" Condition=" '$(WixTargetsImported)' != 'true' ">
<Error Text="The WiX Toolset v3.11 (or newer) build tools must be installed to build this project. To download the WiX Toolset, see http://wixtoolset.org/releases/" />
<Error Text="The WiX Toolset v3.14 (or newer) build tools must be installed to build this project. To download the WiX Toolset, see http://wixtoolset.org/releases/" />
</Target>
<PropertyGroup>
<PostBuildEvent>powershell -file "$(SolutionDir)Scripts\rename-msi.ps1"
@@ -44,16 +45,16 @@ powershell -file "$(SolutionDir)Scripts\pack-zip.ps1"</PostBuildEvent>
<PropertyGroup>
<PreBuildEvent>rmdir /S /Q "$(SolutionDir)Build\Package"
robocopy "$(SolutionDir)Build\$(Configuration)" "$(SolutionDir)Build\Package" %2a.%2a /e /njh /njs /ndl /nfl /nc /ns /np /xf %2a.pdb /xf %2a.obj /xf %2a.ipdb /xf %2a.iobj /xf %2a.exp /xf %2a.lib /xf %2a.ilk /xf %2a.xml
robocopy "$(SolutionDir)Build\$(Configuration)" "$(SolutionDir)Build\Package" *.* /e /njh /njs /ndl /nfl /nc /ns /np /xf *.pdb /xf *.obj /xf *.ipdb /xf *.iobj /xf *.exp /xf *.lib /xf *.ilk /xf *.xml
"$(WIX)bin\heat" dir "$(SolutionDir)Build\Package" -dr INSTALLFOLDER -cg QuickLookComponents -gg -g1 -sf -srd -sreg -var "var.PackageDir" -out "$(ProjectDir)C_QuickLookComponents.wxs"</PreBuildEvent>
</PropertyGroup>
<!--
To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Wix.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Wix.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -1,4 +1,4 @@
// Copyright © 2017 Paddy Xu
// Copyright © 2017-2025 QL-Win Contributors
//
// This file is part of QuickLook program.
//
@@ -34,111 +34,111 @@ PCHAR pXmlBuffer;
void DOpus::GetSelected(PWCHAR buffer)
{
/*
* CPU Disasm
* 6A44B588 |. 68 A839526A PUSH OFFSET 6A5239A8 ; /WindowName = "Directory Opus"
* 6A44B58D |. 68 6459526A PUSH OFFSET 6A525964 ; |ClassName = "DOpus.ParentWindow"
* 6A44B592 |. 894424 40 MOV DWORD PTR SS:[ESP+40],EAX ; |
* 6A44B596 |. C74424 30 140 MOV DWORD PTR SS:[ESP+30],14 ; |
* 6A44B59E |. FFD7 CALL EDI ; \USER32.FindWindowW
* ...
* 00BC2E9B |. 50 PUSH EAX ; /lParam = 12FE80C -> 15 ;
* 00BC2E9C |. 57 PUSH EDI ; |wParam ; class = dopusrt.getinfo
* 00BC2E9D |. 6A 4A PUSH 4A ; |Msg = WM_COPYDATA
* 00BC2E9F |. FF75 FC PUSH DWORD PTR SS:[LOCAL.1] ; |hWnd => [LOCAL.1] ; class = DOpus.ParentWindow, text = Directory Opus
* 00BC2EA2 |. FF15 0802C000 CALL DWORD PTR DS:[<&USER32.SendMessageW ; \USER32.SendMessageW
*
* CPU Stack
* 012FE80C |00000015 
* 012FE810 |00000010
* 012FE814 |013A26C0 ; UNICODE "listsel"
*/
/*
* CPU Disasm
* 6A44B588 |. 68 A839526A PUSH OFFSET 6A5239A8 ; /WindowName = "Directory Opus"
* 6A44B58D |. 68 6459526A PUSH OFFSET 6A525964 ; |ClassName = "DOpus.ParentWindow"
* 6A44B592 |. 894424 40 MOV DWORD PTR SS:[ESP+40],EAX ; |
* 6A44B596 |. C74424 30 140 MOV DWORD PTR SS:[ESP+30],14 ; |
* 6A44B59E |. FFD7 CALL EDI ; \USER32.FindWindowW
* ...
* 00BC2E9B |. 50 PUSH EAX ; /lParam = 12FE80C -> 15 ;
* 00BC2E9C |. 57 PUSH EDI ; |wParam ; class = dopusrt.getinfo
* 00BC2E9D |. 6A 4A PUSH 4A ; |Msg = WM_COPYDATA
* 00BC2E9F |. FF75 FC PUSH DWORD PTR SS:[LOCAL.1] ; |hWnd => [LOCAL.1] ; class = DOpus.ParentWindow, text = Directory Opus
* 00BC2EA2 |. FF15 0802C000 CALL DWORD PTR DS:[<&USER32.SendMessageW ; \USER32.SendMessageW
*
* CPU Stack
* 012FE80C |00000015 
* 012FE810 |00000010
* 012FE814 |013A26C0 ; UNICODE "listsel"
*/
if (hMsgWnd == nullptr)
PrepareMessageWindow();
if (hMsgWnd == nullptr)
return;
if (hMsgWnd == nullptr)
PrepareMessageWindow();
if (hMsgWnd == nullptr)
return;
PWCHAR data = DOPUS_IPC_LP_DATA;
COPYDATASTRUCT cds;
cds.dwData = DOPUS_IPC_LP_INFO;
cds.cbData = static_cast<DWORD>(wcslen(data) + 1) * sizeof WCHAR;
cds.lpData = data;
PWCHAR data = DOPUS_IPC_LP_DATA;
COPYDATASTRUCT cds;
cds.dwData = DOPUS_IPC_LP_INFO;
cds.cbData = static_cast<DWORD>(wcslen(data) + 1) * sizeof WCHAR;
cds.lpData = data;
auto ret = SendMessage(FindWindow(DOPUS_CLASS, DOPUS_NAME), WM_COPYDATA, reinterpret_cast<WPARAM>(hMsgWnd),
reinterpret_cast<LPARAM>(&cds));
if (!ret)
return;
auto ret = SendMessage(FindWindow(DOPUS_CLASS, DOPUS_NAME), WM_COPYDATA, reinterpret_cast<WPARAM>(hMsgWnd),
reinterpret_cast<LPARAM>(&cds));
if (!ret)
return;
WaitForSingleObject(hGetResultEvent, 2000);
WaitForSingleObject(hGetResultEvent, 2000);
ParseXmlBuffer(buffer);
ParseXmlBuffer(buffer);
delete[] pXmlBuffer;
delete[] pXmlBuffer;
}
void DOpus::ParseXmlBuffer(PWCHAR buffer)
{
/*
* <?xml version="1.0" encoding="UTF-8"?>
* <results command="listsel" result="1">
* <items display_path="C:\folder" lister="0x707f6" path="C:\folder" tab="0xb0844">
* <item id="11" name="1.jpg" path="C:\folder\1.jpg" type="0" />
* <item id="12" name="2.zip" path="C:\folder\2.zip" type="1" />
* ...
*/
/*
* <?xml version="1.0" encoding="UTF-8"?>
* <results command="listsel" result="1">
* <items display_path="C:\folder" lister="0x707f6" path="C:\folder" tab="0xb0844">
* <item id="11" name="1.jpg" path="C:\folder\1.jpg" type="0" />
* <item id="12" name="2.zip" path="C:\folder\2.zip" type="1" />
* ...
*/
using namespace rapidxml;
using namespace rapidxml;
xml_document<> doc;
doc.parse<0>(pXmlBuffer);
xml_document<> doc;
doc.parse<0>(pXmlBuffer);
auto results = doc.first_node("results");
auto items = results->first_node("items");
for (auto item = items->first_node("item"); item; item = item->next_sibling("item"))
{
auto path = item->first_attribute("path")->value();
auto results = doc.first_node("results");
auto items = results->first_node("items");
for (auto item = items->first_node("item"); item; item = item->next_sibling("item"))
{
auto path = item->first_attribute("path")->value();
auto size = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, path, -1, nullptr, 0);
auto b = new WCHAR[size];
MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, path, -1, b, size);
auto size = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, path, -1, nullptr, 0);
auto b = new WCHAR[size];
MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, path, -1, b, size);
wcscpy_s(buffer, wcslen(b) + 1, b); // DOpus supports Long Path
wcscpy_s(buffer, wcslen(b) + 1, b); // DOpus supports Long Path
delete[] b;
return; // we now cares only the first result
}
delete[] b;
return; // we now cares only the first result
}
}
void DOpus::PrepareMessageWindow()
{
WNDCLASSEX wx = {sizeof wx};
wx.cbSize = sizeof(WNDCLASSEX);
wx.lpfnWndProc = msgWindowProc;
wx.lpszClassName = MSGWINDOW_CLASS;
WNDCLASSEX wx = {sizeof wx};
wx.cbSize = sizeof(WNDCLASSEX);
wx.lpfnWndProc = msgWindowProc;
wx.lpszClassName = MSGWINDOW_CLASS;
if (RegisterClassEx(&wx))
hMsgWnd = CreateWindowEx(0, MSGWINDOW_CLASS, L"", 0, 0, 0, 0, 0, HWND_MESSAGE, nullptr, nullptr, nullptr);
if (RegisterClassEx(&wx))
hMsgWnd = CreateWindowEx(0, MSGWINDOW_CLASS, L"", 0, 0, 0, 0, 0, HWND_MESSAGE, nullptr, nullptr, nullptr);
hGetResultEvent = CreateEvent(nullptr, FALSE, FALSE, nullptr);
hGetResultEvent = CreateEvent(nullptr, FALSE, FALSE, nullptr);
}
LRESULT CALLBACK DOpus::msgWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_COPYDATA:
{
auto cds = reinterpret_cast<PCOPYDATASTRUCT>(lParam);
auto buf = static_cast<PCHAR>(cds->lpData);
switch (uMsg)
{
case WM_COPYDATA:
{
auto cds = reinterpret_cast<PCOPYDATASTRUCT>(lParam);
auto buf = static_cast<PCHAR>(cds->lpData);
pXmlBuffer = new CHAR[cds->cbData + 1]{'\0'};
memcpy(pXmlBuffer, buf, cds->cbData);
pXmlBuffer = new CHAR[cds->cbData + 1]{'\0'};
memcpy(pXmlBuffer, buf, cds->cbData);
SetEvent(hGetResultEvent);
return 0;
}
default:
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
SetEvent(hGetResultEvent);
return 0;
}
default:
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
}

View File

@@ -1,4 +1,4 @@
// Copyright © 2017 Paddy Xu
// Copyright © 2017-2025 QL-Win Contributors
//
// This file is part of QuickLook program.
//
@@ -19,9 +19,9 @@
class DOpus
{
public:
static void PrepareMessageWindow();
static void GetSelected(PWCHAR buffer);
static void PrepareMessageWindow();
static void GetSelected(PWCHAR buffer);
private:
static void ParseXmlBuffer(PWCHAR buffer);
static LRESULT CALLBACK msgWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
static void ParseXmlBuffer(PWCHAR buffer);
static LRESULT CALLBACK msgWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
};

View File

@@ -1,4 +1,4 @@
// Copyright © 2017 Paddy Xu
// Copyright © 2017-2025 QL-Win Contributors
//
// This file is part of QuickLook program.
//
@@ -34,122 +34,122 @@ static WCHAR filePathBuffer[MAX_PATH] = {'\0'};
void DialogHook::GetSelected(PWCHAR buffer)
{
if (HelperMethods::IsUWP())
return;
if (HelperMethods::IsUWP())
return;
auto hwndfg = GetForegroundWindow();
DWORD pid = 0;
auto tid = GetWindowThreadProcessId(hwndfg, &pid);
auto hwndfg = GetForegroundWindow();
DWORD pid = 0;
auto tid = GetWindowThreadProcessId(hwndfg, &pid);
auto hProc = OpenProcess(PROCESS_QUERY_INFORMATION, false, pid);
if (hProc == nullptr)
return;
auto hProc = OpenProcess(PROCESS_QUERY_INFORMATION, false, pid);
if (hProc == nullptr)
return;
if (WM_HOOK_NOTIFY == 0)
WM_HOOK_NOTIFY = RegisterWindowMessage(L"WM_QUICKLOOK_HOOK_NOTIFY_MSG");
if (WM_HOOK_NOTIFY == 0)
WM_HOOK_NOTIFY = RegisterWindowMessage(L"WM_QUICKLOOK_HOOK_NOTIFY_MSG");
BOOL isTargetWoW64 = false;
if (!IsWow64Process(hProc, &isTargetWoW64))
return;
BOOL isTargetWoW64 = false;
if (!IsWow64Process(hProc, &isTargetWoW64))
return;
CloseHandle(hProc);
CloseHandle(hProc);
BOOL isSelfWoW64 = false;
if (!IsWow64Process(GetCurrentProcess(), &isSelfWoW64))
return;
BOOL isSelfWoW64 = false;
if (!IsWow64Process(GetCurrentProcess(), &isSelfWoW64))
return;
// if QuickLook is 64bit and target is 32bit, obtain result from the helper
if (isTargetWoW64 && !isSelfWoW64)
{
GetSelectedFromWoW64HookHelper(buffer);
}
else
{
if (ghHook != nullptr)
UnhookWindowsHookEx(ghHook);
ghHook = SetWindowsHookEx(WH_CALLWNDPROC, static_cast<HOOKPROC>(MsgHookProc), ModuleFromAddress(MsgHookProc), tid);
if (ghHook == nullptr)
return;
// if QuickLook is 64bit and target is 32bit, obtain result from the helper
if (isTargetWoW64 && !isSelfWoW64)
{
GetSelectedFromWoW64HookHelper(buffer);
}
else
{
if (ghHook != nullptr)
UnhookWindowsHookEx(ghHook);
ghHook = SetWindowsHookEx(WH_CALLWNDPROC, static_cast<HOOKPROC>(MsgHookProc), ModuleFromAddress(MsgHookProc), tid);
if (ghHook == nullptr)
return;
SendMessage(hwndfg, WM_HOOK_NOTIFY, 0, 0);
GetLongPathName(filePathBuffer, buffer, MAX_PATH_EX);
}
SendMessage(hwndfg, WM_HOOK_NOTIFY, 0, 0);
GetLongPathName(filePathBuffer, buffer, MAX_PATH_EX);
}
}
void DialogHook::getSelectedInternal(CComPtr<IShellBrowser> psb, PWCHAR buffer)
{
CComPtr<IShellView> psv;
if (FAILED(psb->QueryActiveShellView(&psv)))
return;
CComPtr<IShellView> psv;
if (FAILED(psb->QueryActiveShellView(&psv)))
return;
CComPtr<IDataObject> dao;
if (FAILED(psv->GetItemObject(SVGIO_SELECTION, IID_IDataObject, reinterpret_cast<void**>(&dao))))
return;
CComPtr<IDataObject> dao;
if (FAILED(psv->GetItemObject(SVGIO_SELECTION, IID_IDataObject, reinterpret_cast<void**>(&dao))))
return;
return HelperMethods::ObtainFirstItem(dao, buffer);
return HelperMethods::ObtainFirstItem(dao, buffer);
}
void DialogHook::GetSelectedFromWoW64HookHelper(PWCHAR buffer)
{
if (!WoW64HookHelper::CheckStatus())
if (!WoW64HookHelper::Launch())
return;
if (!WoW64HookHelper::CheckStatus())
if (!WoW64HookHelper::Launch())
return;
auto hHelperWnd = FindWindowEx(HWND_MESSAGE, nullptr, WoW64HookHelper::GetMsgWindowClassName(), nullptr);
if (hHelperWnd == nullptr)
return;
auto hHelperWnd = FindWindowEx(HWND_MESSAGE, nullptr, WoW64HookHelper::GetMsgWindowClassName(), nullptr);
if (hHelperWnd == nullptr)
return;
auto hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, nullptr, PAGE_READWRITE, 0, MAX_PATH * sizeof WCHAR,
SHARED_MEM_NAME);
if (hMapFile == nullptr)
return;
auto hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, nullptr, PAGE_READWRITE, 0, MAX_PATH * sizeof WCHAR,
SHARED_MEM_NAME);
if (hMapFile == nullptr)
return;
auto sharedBuffer = static_cast<PWCHAR>(MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, MAX_PATH * sizeof WCHAR));
if (sharedBuffer == nullptr)
{
CloseHandle(hMapFile);
return;
}
auto sharedBuffer = static_cast<PWCHAR>(MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, MAX_PATH * sizeof WCHAR));
if (sharedBuffer == nullptr)
{
CloseHandle(hMapFile);
return;
}
SendMessage(hHelperWnd, WM_HOOK_NOTIFY, 0, 0);
SendMessage(hHelperWnd, WM_HOOK_NOTIFY, 0, 0);
// the sharedBuffer should now ready
GetLongPathName(sharedBuffer, buffer, MAX_PATH_EX);
// the sharedBuffer should now ready
GetLongPathName(sharedBuffer, buffer, MAX_PATH_EX);
UnmapViewOfFile(sharedBuffer);
CloseHandle(hMapFile);
UnmapViewOfFile(sharedBuffer);
CloseHandle(hMapFile);
}
HMODULE DialogHook::ModuleFromAddress(PVOID pv)
{
MEMORY_BASIC_INFORMATION mbi;
return VirtualQuery(pv, &mbi, sizeof mbi) != 0 ? static_cast<HMODULE>(mbi.AllocationBase) : nullptr;
MEMORY_BASIC_INFORMATION mbi;
return VirtualQuery(pv, &mbi, sizeof mbi) != 0 ? static_cast<HMODULE>(mbi.AllocationBase) : nullptr;
}
LRESULT DialogHook::MsgHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode < 0)
goto CONTINUE;
if (nCode < 0)
goto CONTINUE;
auto pMSG = reinterpret_cast<CWPSTRUCT*>(lParam);
auto pMSG = reinterpret_cast<CWPSTRUCT*>(lParam);
// only response to WM_HOOK_NOTIFY
if (pMSG->message != WM_HOOK_NOTIFY)
goto CONTINUE;
// only response to WM_HOOK_NOTIFY
if (pMSG->message != WM_HOOK_NOTIFY)
goto CONTINUE;
UnhookWindowsHookEx(ghHook);
ghHook = nullptr;
UnhookWindowsHookEx(ghHook);
ghHook = nullptr;
// get current selected item
auto psb = reinterpret_cast<IShellBrowser*>(SendMessage(GetForegroundWindow(), WM_USER + 7, 0, 0));
if (psb == nullptr)
goto CONTINUE;
// get current selected item
auto psb = reinterpret_cast<IShellBrowser*>(SendMessage(GetForegroundWindow(), WM_USER + 7, 0, 0));
if (psb == nullptr)
goto CONTINUE;
getSelectedInternal(psb, filePathBuffer);
getSelectedInternal(psb, filePathBuffer);
return 0;
return 0;
CONTINUE:
return CallNextHookEx(ghHook, nCode, wParam, lParam);
return CallNextHookEx(ghHook, nCode, wParam, lParam);
}

View File

@@ -1,4 +1,4 @@
// Copyright © 2017 Paddy Xu
// Copyright © 2017-2025 QL-Win Contributors
//
// This file is part of QuickLook program.
//
@@ -19,11 +19,11 @@
class DialogHook
{
public:
static void GetSelected(PWCHAR buffer);
static void GetSelected(PWCHAR buffer);
private:
static void getSelectedInternal(CComPtr<IShellBrowser> psb, PWCHAR buffer);
static void GetSelectedFromWoW64HookHelper(PWCHAR buffer);
static HMODULE ModuleFromAddress(PVOID pv);
static LRESULT CALLBACK MsgHookProc(int nCode, WPARAM wParam, LPARAM lParam);
static void getSelectedInternal(CComPtr<IShellBrowser> psb, PWCHAR buffer);
static void GetSelectedFromWoW64HookHelper(PWCHAR buffer);
static HMODULE ModuleFromAddress(PVOID pv);
static LRESULT CALLBACK MsgHookProc(int nCode, WPARAM wParam, LPARAM lParam);
};

View File

@@ -1,4 +1,4 @@
// Copyright © 2017 Paddy Xu
// Copyright © 2017-2025 QL-Win Contributors
//
// This file is part of QuickLook program.
//
@@ -20,23 +20,25 @@
#include "Shell32.h"
#include "WoW64HookHelper.h"
#include "DOpus.h"
#include "MultiCommander.h"
#define EXPORT extern "C" __declspec(dllexport)
EXPORT void Init()
{
#ifdef WIN64
WoW64HookHelper::Launch();
WoW64HookHelper::Launch();
#endif
DOpus::PrepareMessageWindow();
DOpus::PrepareMessageWindow();
MultiCommander::PrepareMessageWindow();
}
EXPORT Shell32::FocusedWindowType GetFocusedWindowType()
{
return Shell32::GetFocusedWindowType();
return Shell32::GetFocusedWindowType();
}
EXPORT void GetCurrentSelection(PWCHAR buffer)
{
Shell32::GetCurrentSelection(buffer);
Shell32::GetCurrentSelection(buffer);
}

View File

@@ -1,4 +1,4 @@
// Copyright © 2017 Paddy Xu
// Copyright © 2017-2025 QL-Win Contributors
//
// This file is part of QuickLook program.
//
@@ -18,44 +18,68 @@
#include "stdafx.h"
#include "Everything.h"
#define EVERYTHING_IPC_SEARCH_CLIENT_WNDCLASSW L"EVERYTHING"
#define EVERYTHING_IPC_ID_FILE_COPY_FULL_PATH_AND_NAME 41007
void Everything::GetSelected(PWCHAR buffer)
{
if (SendMessage(
FindWindow(EVERYTHING_IPC_SEARCH_CLIENT_WNDCLASSW, nullptr),
WM_COMMAND,
MAKEWPARAM(EVERYTHING_IPC_ID_FILE_COPY_FULL_PATH_AND_NAME, 0),
0))
return;
auto hWinFG = GetForegroundWindow();
// Everything v1.5 IPC via hidden window.
HWND hWinI = FindWindowExW(hWinFG, NULL, EVERYTHING_IPC_HIDDEN_WIN_CLASS, NULL);
if (hWinI != nullptr) {
int pLength = GetWindowTextLength(hWinI);
wchar_t* pText = new wchar_t[pLength + 1];
GetWindowText(hWinI, pText, pLength + 1);
wcsncpy_s(buffer, MAX_PATH_EX, pText, pLength);
return; // Success. Clipboard access unnecessary.
}
if (!OpenClipboard(nullptr))
return;
HWND hWin = FindWindowW(EVERYTHING_IPC_WINDOW_CLASS, NULL);
auto hData = GetClipboardData(CF_UNICODETEXT);
if (hData == nullptr)
return;
if (hWin != nullptr) {
// Everything IPC Clipboard
SendMessageW(
hWin,
WM_COMMAND,
MAKEWPARAM(EVERYTHING_IPC_COPY_TO_CLIPBOARD, 0),
0);
auto pText = static_cast<PWCHAR>(GlobalLock(hData));
if (pText == nullptr)
return;
Sleep(100);
if (!OpenClipboard(nullptr))
return;
auto hData = GetClipboardData(CF_UNICODETEXT);
if (hData == nullptr)
return;
auto p = wcsstr(pText, L"\r\n");
auto l = p == nullptr ? wcslen(pText) : p - pText;
wcsncpy_s(buffer, MAX_PATH_EX, pText, l); // Everything supports Long Path
auto pText = static_cast<PWCHAR>(GlobalLock(hData));
if (pText == nullptr)
return;
GlobalUnlock(hData);
auto p = wcsstr(pText, L"\r\n");
auto l = p == nullptr ? wcslen(pText) : p - pText;
wcsncpy_s(buffer, MAX_PATH_EX, pText, l); // Everything supports Long Path
GlobalUnlock(hData);
CloseClipboard();
}
}
CloseClipboard();
bool Everything::MatchClass(PWCHAR classBuffer)
{
WCHAR sMatchC[256] = { '\0' };
WCHAR sMatchS[256] = EVERYTHING_IPC_WINDOW_CLASS;
size_t iLen = wcslen(sMatchS);
wcsncpy_s(sMatchC, classBuffer, iLen);
return (0 == wcscmp(sMatchC, sMatchS));
}
void Everything::backupClipboard()
{
// TODO
// TODO
}
void Everything::restoreClipboard()
{
// TODO
// TODO
}

View File

@@ -1,4 +1,4 @@
// Copyright © 2017 Paddy Xu
// Copyright © 2017-2025 QL-Win Contributors
//
// This file is part of QuickLook program.
//
@@ -15,13 +15,18 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#define EVERYTHING_IPC_HIDDEN_WIN_CLASS L"EVERYTHING_RESULT_LIST_FOCUS"
#define EVERYTHING_IPC_WINDOW_CLASS L"EVERYTHING"
#define EVERYTHING_IPC_COPY_TO_CLIPBOARD 41007
#pragma once
class Everything
{
public:
static void GetSelected(PWCHAR buffer);
static void GetSelected(PWCHAR buffer);
static bool MatchClass(PWCHAR classBuffer);
private:
static void backupClipboard();
static void restoreClipboard();
static void backupClipboard();
static void restoreClipboard();
};

View File

@@ -1,4 +1,4 @@
// Copyright © 2017 Paddy Xu
// Copyright © 2017-2025 QL-Win Contributors
//
// This file is part of QuickLook program.
//
@@ -16,126 +16,169 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "stdafx.h"
#include "strsafe.h"
#include "HelperMethods.h"
void HelperMethods::GetSelectedInternal(CComQIPtr<IWebBrowserApp> pwba, PWCHAR buffer)
void HelperMethods::GetSelectedInternal(CComPtr<IShellBrowser> psb, PWCHAR buffer)
{
CComQIPtr<IServiceProvider> psp;
if (FAILED(pwba->QueryInterface(IID_IServiceProvider, reinterpret_cast<void**>(&psp))))
return;
CComPtr<IShellView> psv;
if (FAILED(psb->QueryActiveShellView(&psv)))
return;
CComPtr<IShellBrowser> psb;
if (FAILED(psp->QueryService(SID_STopLevelBrowser, IID_IShellBrowser, reinterpret_cast<LPVOID*>(&psb))))
return;
CComPtr<IDataObject> dao;
if (FAILED(psv->GetItemObject(SVGIO_SELECTION, IID_IDataObject, reinterpret_cast<void**>(&dao))))
return;
CComPtr<IShellView> psv;
if (FAILED(psb->QueryActiveShellView(&psv)))
return;
CComPtr<IDataObject> dao;
if (FAILED(psv->GetItemObject(SVGIO_SELECTION, IID_IDataObject, reinterpret_cast<void**>(&dao))))
return;
return ObtainFirstItem(dao, buffer);
return ObtainFirstItem(dao, buffer);
}
void HelperMethods::ObtainFirstItem(CComPtr<IDataObject> dao, PWCHAR buffer)
{
FORMATETC formatetc;
STGMEDIUM medium = {sizeof medium};
if (!dao || !buffer)
return;
formatetc.cfFormat = CF_HDROP;
formatetc.ptd = nullptr;
formatetc.dwAspect = DVASPECT_CONTENT;
formatetc.lindex = -1;
formatetc.tymed = TYMED_HGLOBAL;
FORMATETC formatetc = {};
STGMEDIUM medium = {};
medium.tymed = TYMED_HGLOBAL;
formatetc.cfFormat = CF_HDROP;
formatetc.ptd = nullptr;
formatetc.dwAspect = DVASPECT_CONTENT;
formatetc.lindex = -1;
formatetc.tymed = TYMED_HGLOBAL;
if (FAILED(dao->GetData(&formatetc, &medium)))
return;
medium.tymed = TYMED_HGLOBAL;
int n = DragQueryFile(HDROP(medium.hGlobal), 0xFFFFFFFF, nullptr, 0);
// Try CF_HDROP first
// If the file path is too long, the call might fail but CFSTR_SHELLIDLIST will do it
// https://github.com/QL-Win/QuickLook/issues/1643
if (SUCCEEDED(dao->GetData(&formatetc, &medium)))
{
HDROP hDrop = HDROP(medium.hGlobal);
int count = DragQueryFile(hDrop, 0xFFFFFFFF, nullptr, 0);
if (count >= 1)
{
WCHAR localBuffer[MAX_PATH] = { '\0' };
if (DragQueryFileW(hDrop, 0, localBuffer, MAX_PATH) > 0)
{
GetLongPathName(localBuffer, buffer, MAX_PATH_EX);
ReleaseStgMedium(&medium);
return;
}
ReleaseStgMedium(&medium);
}
}
if (n < 1)
return;
// If CF_HDROP fails, try CFSTR_SHELLIDLIST
// Support Desktop Icons (This PC, Recycle Bin and so on)
// https://github.com/QL-Win/QuickLook/issues/1610
static const CLIPFORMAT cfShellIDList = (CLIPFORMAT)RegisterClipboardFormatW(CFSTR_SHELLIDLIST);
formatetc.cfFormat = cfShellIDList;
WCHAR localBuffer[MAX_PATH] = { '\0' };
DragQueryFile(HDROP(medium.hGlobal), 0, localBuffer, MAX_PATH);
GetLongPathName(localBuffer, buffer, MAX_PATH_EX);
if (SUCCEEDED(dao->GetData(&formatetc, &medium)))
{
CIDA* pida = (CIDA*)GlobalLock(medium.hGlobal);
if (!pida)
{
ReleaseStgMedium(&medium);
return;
}
ITEMIDLIST* pidlFolder = (ITEMIDLIST*)((BYTE*)pida + pida->aoffset[0]);
ITEMIDLIST* pidlItem = (ITEMIDLIST*)((BYTE*)pida + pida->aoffset[1]);
PIDLIST_ABSOLUTE pidlFull = ILCombine(pidlFolder, pidlItem);
GlobalUnlock(medium.hGlobal);
ReleaseStgMedium(&medium);
if (!pidlFull)
return;
// Convert to IShellItem to get canonical parsing path
CComPtr<IShellItem> shellItem;
if (SUCCEEDED(SHCreateItemFromIDList(pidlFull, IID_PPV_ARGS(&shellItem))))
{
PWSTR pszPath = nullptr;
if (SUCCEEDED(shellItem->GetDisplayName(SIGDN_DESKTOPABSOLUTEPARSING, &pszPath)))
{
StringCchCopyW(buffer, MAX_PATH_EX, pszPath); // returns e.g., ::{645FF040-5081-101B-9F08-00AA002F954E}
CoTaskMemFree(pszPath);
}
}
ILFree(pidlFull);
}
}
bool HelperMethods::IsListaryToolbarVisible()
{
auto CALLBACK findListaryWindowProc = [](__in HWND hwnd, __in LPARAM lParam)-> BOOL
{
WCHAR classBuffer[MAX_PATH] = {'\0'};
if (FAILED(GetClassName(hwnd, classBuffer, MAX_PATH)))
return TRUE;
auto CALLBACK findListaryWindowProc = [](__in HWND hwnd, __in LPARAM lParam)-> BOOL
{
WCHAR classBuffer[MAX_PATH] = {'\0'};
if (FAILED(GetClassName(hwnd, classBuffer, MAX_PATH)))
return TRUE;
if (wcsncmp(classBuffer, L"Listary_WidgetWin_", 18) == 0)
{
if (IsWindowVisible(hwnd))
{
*reinterpret_cast<bool*>(lParam) = true;
return FALSE;
}
}
return TRUE;
};
if (wcsncmp(classBuffer, L"Listary_WidgetWin_", 18) == 0)
{
if (IsWindowVisible(hwnd))
{
*reinterpret_cast<bool*>(lParam) = true;
return FALSE;
}
}
return TRUE;
};
auto found = false;
EnumWindows(findListaryWindowProc, reinterpret_cast<LPARAM>(&found));
auto found = false;
EnumWindows(findListaryWindowProc, reinterpret_cast<LPARAM>(&found));
return found;
return found;
}
// Windows 10 1909 replaced the search box in the File Explorer by a UWP control.
// gti.flags is always 0 for UWP applications.
bool HelperMethods::IsExplorerSearchBoxFocused()
{
auto* hwnd = GetFocusedControl();
auto* hwnd = GetFocusedControl();
WCHAR classBuffer[MAX_PATH] = { '\0' };
if (FAILED(GetClassName(hwnd, classBuffer, MAX_PATH)))
return false;
WCHAR classBuffer[MAX_PATH] = { '\0' };
if (FAILED(GetClassName(hwnd, classBuffer, MAX_PATH)))
return false;
return wcscmp(classBuffer, L"Windows.UI.Core.CoreWindow") == 0;
return wcscmp(classBuffer, L"Windows.UI.Core.CoreWindow") == 0;
}
bool HelperMethods::IsCursorActivated(HWND hwnd)
{
auto tId = GetWindowThreadProcessId(hwnd, nullptr);
auto tId = GetWindowThreadProcessId(hwnd, nullptr);
GUITHREADINFO gti = { sizeof gti };
GetGUIThreadInfo(tId, &gti);
GUITHREADINFO gti = { sizeof gti };
GetGUIThreadInfo(tId, &gti);
return gti.flags || gti.hwndCaret || IsListaryToolbarVisible();
return gti.flags || gti.hwndCaret || IsListaryToolbarVisible();
}
bool HelperMethods::IsUWP()
{
auto pGCPFN = decltype(&GetCurrentPackageFullName)(
GetProcAddress(GetModuleHandle(L"kernel32.dll"), "GetCurrentPackageFullName"));
auto pGCPFN = decltype(&GetCurrentPackageFullName)(
GetProcAddress(GetModuleHandle(L"kernel32.dll"), "GetCurrentPackageFullName"));
if (!pGCPFN)
return false;
if (!pGCPFN)
return false;
UINT32 pn = 0;
return pGCPFN(&pn, nullptr) == ERROR_INSUFFICIENT_BUFFER;
UINT32 pn = 0;
return pGCPFN(&pn, nullptr) == ERROR_INSUFFICIENT_BUFFER;
}
HWND HelperMethods::GetFocusedControl()
{
auto tid = GetWindowThreadProcessId(GetForegroundWindow(), nullptr);
auto tid = GetWindowThreadProcessId(GetForegroundWindow(), nullptr);
if (0 == AttachThreadInput(GetCurrentThreadId(), tid, TRUE))
return nullptr;
if (0 == AttachThreadInput(GetCurrentThreadId(), tid, TRUE))
return nullptr;
auto* hwnd = GetFocus();
auto* hwnd = GetFocus();
AttachThreadInput(GetCurrentThreadId(), tid, FALSE);
AttachThreadInput(GetCurrentThreadId(), tid, FALSE);
return hwnd;
return hwnd;
}

View File

@@ -1,4 +1,4 @@
// Copyright © 2017 Paddy Xu
// Copyright © 2017-2025 QL-Win Contributors
//
// This file is part of QuickLook program.
//
@@ -19,13 +19,13 @@
class HelperMethods
{
public:
static void GetSelectedInternal(CComQIPtr<IWebBrowserApp> pWebBrowserApp, PWCHAR buffer);
static void ObtainFirstItem(CComPtr<IDataObject> dao, PWCHAR buffer);
static bool IsCursorActivated(HWND hwndfg);
static bool IsExplorerSearchBoxFocused();
static bool HelperMethods::IsUWP();
static void GetSelectedInternal(CComPtr<IShellBrowser> psb, PWCHAR buffer);
static void ObtainFirstItem(CComPtr<IDataObject> dao, PWCHAR buffer);
static bool IsCursorActivated(HWND hwndfg);
static bool IsExplorerSearchBoxFocused();
static bool HelperMethods::IsUWP();
private:
static bool IsListaryToolbarVisible();
static HWND GetFocusedControl();
static bool IsListaryToolbarVisible();
static HWND GetFocusedControl();
};

View File

@@ -0,0 +1,100 @@
// Copyright © 2017-2025 QL-Win Contributors
//
// This file is part of QuickLook program.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "stdafx.h"
#include "MultiCommander.h"
HWND MultiCommander::hMsgWnd = nullptr;
HANDLE MultiCommander::hGetResultEvent = nullptr;
PCHAR MultiCommander::pCurrentItemPath = nullptr;
void MultiCommander::GetSelected(PWCHAR buffer)
{
if (false == PrepareMessageWindow()) {
return;
}
COPYDATASTRUCT cds;
cds.dwData = MULTICMD_CPF_GETCURITEMFULL | MULTICMD_CPF_SOURCE;
cds.cbData = 0;
cds.lpData = nullptr;
ResetEvent(hGetResultEvent);
auto ret = SendMessage(
FindWindow(MULTICMD_CLASS, nullptr),
WM_COPYDATA,
reinterpret_cast<WPARAM>(hMsgWnd),
reinterpret_cast<LPARAM>(&cds)
);
if (!ret || WAIT_OBJECT_0 != WaitForSingleObject(hGetResultEvent, 2000)) {
return;
}
auto path = reinterpret_cast<PWCHAR>(pCurrentItemPath);
wcscpy_s(buffer, wcslen(path) + 1, path);
delete[] pCurrentItemPath;
pCurrentItemPath = nullptr;
}
bool MultiCommander::PrepareMessageWindow()
{
if (nullptr == hMsgWnd) {
WNDCLASSEX wx = {};
wx.cbSize = sizeof(WNDCLASSEX);
wx.lpfnWndProc = msgWindowProc;
wx.lpszClassName = MULTICMD_MSGWINDOW_CLASS;
if (RegisterClassEx(&wx))
hMsgWnd = CreateWindowEx(0, MULTICMD_MSGWINDOW_CLASS, L"", 0, 0, 0, 0, 0, HWND_MESSAGE, nullptr, nullptr, nullptr);
if (nullptr == hMsgWnd) {
return false;
}
}
if (nullptr == hGetResultEvent) {
hGetResultEvent = CreateEvent(nullptr, TRUE, FALSE, nullptr);
}
return (nullptr != hGetResultEvent);
}
LRESULT CALLBACK MultiCommander::msgWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_COPYDATA:
{
delete[] pCurrentItemPath;
auto cds = reinterpret_cast<PCOPYDATASTRUCT>(lParam);
auto buf = static_cast<PCHAR>(cds->lpData);
pCurrentItemPath = new CHAR[cds->cbData + 1]{ '\0' };
memcpy(pCurrentItemPath, buf, cds->cbData);
SetEvent(hGetResultEvent);
return 0;
}
default:
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
}

View File

@@ -0,0 +1,39 @@
// Copyright © 2017-2025 QL-Win Contributors
//
// This file is part of QuickLook program.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#pragma once
#define MULTICMD_CPF_GETCURITEMFULL 0x00000010L // Get full path of current item (file or folder) in focus
#define MULTICMD_CPF_SOURCE 0x00000400L // Go to the new path in the source panel side
#define MULTICMD_CLASS L"MultiCommander MainWnd"
#define MULTICMD_MSGWINDOW_CLASS L"QuickLook.Native.MultiCmd.MsgWindow"
class MultiCommander
{
public:
static void GetSelected(PWCHAR buffer);
static bool PrepareMessageWindow();
MultiCommander() = delete;
private:
static HWND hMsgWnd;
static HANDLE hGetResultEvent;
static PCHAR pCurrentItemPath;
static LRESULT CALLBACK msgWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
};

View File

@@ -22,13 +22,13 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
@@ -86,6 +86,7 @@
<ClInclude Include="DOpus.h" />
<ClInclude Include="Everything.h" />
<ClInclude Include="HelperMethods.h" />
<ClInclude Include="MultiCommander.h" />
<ClInclude Include="rapidxml.hpp" />
<ClInclude Include="WoW64HookHelper.h" />
<ClInclude Include="Shell32.h" />
@@ -106,6 +107,7 @@
<ClCompile Include="Everything.cpp" />
<ClCompile Include="HelperMethods.cpp" />
<ClCompile Include="DllExport.cpp" />
<ClCompile Include="MultiCommander.cpp" />
<ClCompile Include="Shell32.cpp" />
<ClCompile Include="stdafx.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
@@ -116,4 +118,4 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
</Project>

View File

@@ -42,6 +42,9 @@
<ClInclude Include="rapidxml.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="MultiCommander.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="stdafx.cpp">
@@ -71,5 +74,8 @@
<ClCompile Include="DOpus.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="MultiCommander.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>
</Project>

View File

@@ -1,4 +1,4 @@
// Copyright © 2017 Paddy Xu
// Copyright © 2017-2025 QL-Win Contributors
//
// This file is part of QuickLook program.
//
@@ -22,138 +22,163 @@
#include "DialogHook.h"
#include "Everything.h"
#include "DOpus.h"
#include "MultiCommander.h"
using namespace std;
Shell32::FocusedWindowType Shell32::GetFocusedWindowType()
{
auto hwndfg = GetForegroundWindow();
auto hwndfg = GetForegroundWindow();
if (HelperMethods::IsCursorActivated(hwndfg))
return INVALID;
if (HelperMethods::IsCursorActivated(hwndfg))
return INVALID;
WCHAR classBuffer[MAX_PATH] = { '\0' };
if (FAILED(GetClassName(hwndfg, classBuffer, MAX_PATH)))
return INVALID;
WCHAR classBuffer[MAX_PATH] = { '\0' };
if (FAILED(GetClassName(hwndfg, classBuffer, MAX_PATH)))
return INVALID;
if (wcscmp(classBuffer, L"dopus.lister") == 0)
{
return DOPUS;
}
if (wcscmp(classBuffer, L"EVERYTHING") == 0 || wcscmp(classBuffer, L"EVERYTHING_SHELL_EXECUTE") == 0)
{
return EVERYTHING;
}
if (wcscmp(classBuffer, L"WorkerW") == 0 || wcscmp(classBuffer, L"Progman") == 0)
{
if (FindWindowEx(hwndfg, nullptr, L"SHELLDLL_DefView", nullptr) != nullptr)
{
return DESKTOP;
}
}
if (wcscmp(classBuffer, L"ExploreWClass") == 0 || wcscmp(classBuffer, L"CabinetWClass") == 0)
{
if (!HelperMethods::IsExplorerSearchBoxFocused())
{
return EXPLORER;
}
}
if (wcscmp(classBuffer, L"#32770") == 0)
{
if (FindWindowEx(hwndfg, nullptr, L"DUIViewWndClassName", nullptr) != nullptr)
{
if (!HelperMethods::IsExplorerSearchBoxFocused())
{
return DIALOG;
}
}
}
if (wcscmp(classBuffer, MULTICMD_CLASS) == 0)
{
return MULTICOMMANDER;
}
if (wcscmp(classBuffer, L"dopus.lister") == 0)
{
return DOPUS;
}
if (Everything::MatchClass(classBuffer))
{
return EVERYTHING;
}
if (wcscmp(classBuffer, L"WorkerW") == 0 || wcscmp(classBuffer, L"Progman") == 0)
{
if (FindWindowEx(hwndfg, nullptr, L"SHELLDLL_DefView", nullptr) != nullptr)
{
return DESKTOP;
}
}
if (wcscmp(classBuffer, L"ExploreWClass") == 0 || wcscmp(classBuffer, L"CabinetWClass") == 0)
{
if (!HelperMethods::IsExplorerSearchBoxFocused())
{
return EXPLORER;
}
}
if (wcscmp(classBuffer, L"#32770") == 0)
{
if (FindWindowEx(hwndfg, nullptr, L"DUIViewWndClassName", nullptr) != nullptr)
{
if (!HelperMethods::IsExplorerSearchBoxFocused())
{
return DIALOG;
}
}
}
return INVALID;
return INVALID;
}
void Shell32::GetCurrentSelection(PWCHAR buffer)
{
switch (GetFocusedWindowType())
{
case DESKTOP:
getSelectedFromDesktop(buffer);
break;
case EXPLORER:
getSelectedFromExplorer(buffer);
break;
case DIALOG:
DialogHook::GetSelected(buffer);
break;
case EVERYTHING:
Everything::GetSelected(buffer);
break;
case DOPUS:
DOpus::GetSelected(buffer);
break;
default:
break;
}
switch (GetFocusedWindowType())
{
case DESKTOP:
getSelectedFromDesktop(buffer);
break;
case EXPLORER:
getSelectedFromExplorer(buffer);
break;
case DIALOG:
DialogHook::GetSelected(buffer);
break;
case EVERYTHING:
Everything::GetSelected(buffer);
break;
case DOPUS:
DOpus::GetSelected(buffer);
break;
case MULTICOMMANDER:
MultiCommander::GetSelected(buffer);
break;
default:
break;
}
}
void Shell32::getSelectedFromExplorer(PWCHAR buffer)
{
CoInitialize(nullptr);
CoInitialize(nullptr);
CComPtr<IShellWindows> psw;
if (FAILED(psw.CoCreateInstance(CLSID_ShellWindows)))
return;
CComPtr<IShellWindows> psw;
if (FAILED(psw.CoCreateInstance(CLSID_ShellWindows)))
return;
auto hwndfg = GetForegroundWindow();
auto hwndfgw = GetForegroundWindow();
auto hwndfgt = FindWindowEx(hwndfgw, nullptr, L"ShellTabWindowClass", nullptr);
auto count = 0L;
psw->get_Count(&count);
auto count = 0L;
psw->get_Count(&count);
for (auto i = 0; i < count; i++)
{
VARIANT vi;
VariantInit(&vi);
V_VT(&vi) = VT_I4;
V_I4(&vi) = i;
for (auto i = 0; i < count; i++)
{
VARIANT vi;
VariantInit(&vi);
V_VT(&vi) = VT_I4;
V_I4(&vi) = i;
CComPtr<IDispatch> pdisp;
if (S_OK != psw->Item(vi, &pdisp))
continue;
CComPtr<IDispatch> pdisp;
if (S_OK != psw->Item(vi, &pdisp))
continue;
CComQIPtr<IWebBrowserApp> pwba;
if (FAILED(pdisp->QueryInterface(IID_IWebBrowserApp, reinterpret_cast<void**>(&pwba))))
continue;
CComPtr<IServiceProvider> psp;
if (FAILED(pdisp->QueryInterface(IID_IServiceProvider, reinterpret_cast<void**>(&psp))))
continue;
HWND hwndwba;
if (FAILED(pwba->get_HWND(reinterpret_cast<LONG_PTR*>(&hwndwba))))
continue;
CComPtr<IShellBrowser> psb;
if (FAILED(psp->QueryService(IID_IShellBrowser, IID_IShellBrowser, reinterpret_cast<LPVOID*>(&psb))))
continue;
if (hwndwba != hwndfg || HelperMethods::IsCursorActivated(hwndwba))
continue;
HWND phwnd;
if (FAILED(psb->GetWindow(&phwnd)))
continue;
HelperMethods::GetSelectedInternal(pwba, buffer);
}
if (hwndfgw != phwnd && (hwndfgt != nullptr && hwndfgt != phwnd))
continue;
if (HelperMethods::IsCursorActivated(0))
continue;
HelperMethods::GetSelectedInternal(psb, buffer);
return;
}
}
void Shell32::getSelectedFromDesktop(PWCHAR buffer)
{
CoInitialize(nullptr);
CoInitialize(nullptr);
CComPtr<IShellWindows> psw;
CComQIPtr<IWebBrowserApp> pwba;
CComPtr<IShellWindows> psw;
CComPtr<IWebBrowserApp> pwba;
if (FAILED(psw.CoCreateInstance(CLSID_ShellWindows)))
return;
if (FAILED(psw.CoCreateInstance(CLSID_ShellWindows)))
return;
VARIANT pvarLoc;
VariantInit(&pvarLoc);
long phwnd;
if (FAILED(psw->FindWindowSW(&pvarLoc, &pvarLoc, SWC_DESKTOP, &phwnd, SWFO_NEEDDISPATCH, reinterpret_cast<IDispatch**>(
&pwba))))
return;
VARIANT pvarLoc;
VariantInit(&pvarLoc);
long phwnd;
if (FAILED(psw->FindWindowSW(&pvarLoc, &pvarLoc, SWC_DESKTOP, &phwnd, SWFO_NEEDDISPATCH, reinterpret_cast<IDispatch**>(
&pwba))))
return;
if (HelperMethods::IsCursorActivated(reinterpret_cast<HWND>(LongToHandle(phwnd))))
return;
if (HelperMethods::IsCursorActivated(reinterpret_cast<HWND>(LongToHandle(phwnd))))
return;
HelperMethods::GetSelectedInternal(pwba, buffer);
CComPtr<IServiceProvider> psp;
if (FAILED(pwba->QueryInterface(IID_IServiceProvider, reinterpret_cast<void**>(&psp))))
return;
CComPtr<IShellBrowser> psb;
if (FAILED(psp->QueryService(IID_IShellBrowser, IID_IShellBrowser, reinterpret_cast<LPVOID*>(&psb))))
return;
HelperMethods::GetSelectedInternal(psb, buffer);
}

View File

@@ -1,4 +1,4 @@
// Copyright © 2017 Paddy Xu
// Copyright © 2017-2025 QL-Win Contributors
//
// This file is part of QuickLook program.
//
@@ -22,20 +22,21 @@
class Shell32
{
public:
enum FocusedWindowType
{
INVALID,
DESKTOP,
EXPLORER,
DIALOG,
EVERYTHING,
DOPUS,
};
enum FocusedWindowType
{
INVALID,
DESKTOP,
EXPLORER,
DIALOG,
EVERYTHING,
DOPUS,
MULTICOMMANDER,
};
static FocusedWindowType GetFocusedWindowType();
static void GetCurrentSelection(PWCHAR buffer);
static FocusedWindowType GetFocusedWindowType();
static void GetCurrentSelection(PWCHAR buffer);
private:
static void getSelectedFromDesktop(PWCHAR buffer);
static void getSelectedFromExplorer(PWCHAR buffer);
static void getSelectedFromDesktop(PWCHAR buffer);
static void getSelectedFromExplorer(PWCHAR buffer);
};

View File

@@ -1,4 +1,4 @@
// Copyright © 2017 Paddy Xu
// Copyright © 2017-2025 QL-Win Contributors
//
// This file is part of QuickLook program.
//
@@ -27,54 +27,54 @@ HANDLE hJob = nullptr;
bool WoW64HookHelper::CheckStatus()
{
DWORD running = -1;
GetExitCodeProcess(hHelper, &running);
return running == STILL_ACTIVE;
DWORD running = -1;
GetExitCodeProcess(hHelper, &running);
return running == STILL_ACTIVE;
}
bool WoW64HookHelper::Launch()
{
#ifndef WIN64
return true;
return true;
#endif
if (HelperMethods::IsUWP())
return true;
if (HelperMethods::IsUWP())
return true;
if (CheckStatus())
return true;
if (CheckStatus())
return true;
createJob();
createJob();
WCHAR fullPath[MAX_PATH] = {'\0'};
GetModuleFileName(nullptr, fullPath, MAX_PATH - 1);
auto p = wcsrchr(fullPath, L'\\');
memcpy(p, HELPER_FILE, wcslen(HELPER_FILE) * sizeof WCHAR);
WCHAR fullPath[MAX_PATH] = {'\0'};
GetModuleFileName(nullptr, fullPath, MAX_PATH - 1);
auto p = wcsrchr(fullPath, L'\\');
memcpy(p, HELPER_FILE, wcslen(HELPER_FILE) * sizeof WCHAR);
STARTUPINFO si = {sizeof si};
PROCESS_INFORMATION pi = {nullptr};
si.cb = sizeof si;
STARTUPINFO si = {sizeof si};
PROCESS_INFORMATION pi = {nullptr};
si.cb = sizeof si;
CreateProcess(fullPath, RUN_ARG, nullptr, nullptr, false, 0, nullptr, nullptr, &si, &pi);
hHelper = pi.hProcess;
CreateProcess(fullPath, RUN_ARG, nullptr, nullptr, false, 0, nullptr, nullptr, &si, &pi);
hHelper = pi.hProcess;
AssignProcessToJobObject(hJob, hHelper);
AssignProcessToJobObject(hJob, hHelper);
return CheckStatus();
return CheckStatus();
}
void WoW64HookHelper::createJob()
{
if (hJob != nullptr)
return;
if (hJob != nullptr)
return;
hJob = CreateJobObject(nullptr, nullptr);
hJob = CreateJobObject(nullptr, nullptr);
JOBOBJECT_BASIC_LIMIT_INFORMATION BasicLimitInformation = {sizeof BasicLimitInformation};
BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE;
JOBOBJECT_EXTENDED_LIMIT_INFORMATION lpJobObjectInfo = {sizeof lpJobObjectInfo};
lpJobObjectInfo.BasicLimitInformation = BasicLimitInformation;
JOBOBJECT_BASIC_LIMIT_INFORMATION BasicLimitInformation = {sizeof BasicLimitInformation};
BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE;
JOBOBJECT_EXTENDED_LIMIT_INFORMATION lpJobObjectInfo = {sizeof lpJobObjectInfo};
lpJobObjectInfo.BasicLimitInformation = BasicLimitInformation;
SetInformationJobObject(hJob, JobObjectExtendedLimitInformation, &lpJobObjectInfo,
sizeof JOBOBJECT_EXTENDED_LIMIT_INFORMATION);
SetInformationJobObject(hJob, JobObjectExtendedLimitInformation, &lpJobObjectInfo,
sizeof JOBOBJECT_EXTENDED_LIMIT_INFORMATION);
}

View File

@@ -1,4 +1,4 @@
// Copyright © 2017 Paddy Xu
// Copyright © 2017-2025 QL-Win Contributors
//
// This file is part of QuickLook program.
//
@@ -22,14 +22,14 @@
class WoW64HookHelper
{
public:
static PWCHAR GetMsgWindowClassName()
{
return L"QUICKLOOK_WOW64HOOKHELPER_MSG_CLASS";
}
static PWCHAR GetMsgWindowClassName()
{
return L"QUICKLOOK_WOW64HOOKHELPER_MSG_CLASS";
}
static bool CheckStatus();
static bool Launch();
static bool CheckStatus();
static bool Launch();
private:
static void createJob();
static void createJob();
};

Some files were not shown because too many files have changed in this diff Show More