diff --git a/QuickLook.Plugin/QuickLook.Plugin.ChmViewer/Plugin.cs b/QuickLook.Plugin/QuickLook.Plugin.ChmViewer/Plugin.cs
new file mode 100644
index 0000000..a8d958b
--- /dev/null
+++ b/QuickLook.Plugin/QuickLook.Plugin.ChmViewer/Plugin.cs
@@ -0,0 +1,57 @@
+// Copyright © 2017-2026 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 .
+
+using QuickLook.Common.Plugin;
+using System;
+using System.IO;
+using System.Windows;
+
+namespace QuickLook.Plugin.ChmViewer;
+
+public sealed class Plugin : IViewer
+{
+ public int Priority => 0;
+
+ public void Init()
+ {
+ }
+
+ public bool CanHandle(string path)
+ {
+ return false;
+#pragma warning disable CS0162 // Unreachable code detected
+ return !Directory.Exists(path)
+ && Path.GetExtension(path).Equals(".chm", StringComparison.OrdinalIgnoreCase);
+#pragma warning restore CS0162 // Unreachable code detected
+ }
+
+ public void Prepare(string path, ContextObject context)
+ {
+ context.Title = Path.GetFileName(path);
+ context.IsBlocked = true;
+ context.PreferredSize = new Size { Width = 800, Height = 600 };
+ }
+
+ public void View(string path, ContextObject context)
+ {
+ context.IsBusy = false;
+ }
+
+ public void Cleanup()
+ {
+ }
+}
diff --git a/QuickLook.Plugin/QuickLook.Plugin.ChmViewer/QuickLook.Plugin.ChmViewer.csproj b/QuickLook.Plugin/QuickLook.Plugin.ChmViewer/QuickLook.Plugin.ChmViewer.csproj
new file mode 100644
index 0000000..4d6aa2f
--- /dev/null
+++ b/QuickLook.Plugin/QuickLook.Plugin.ChmViewer/QuickLook.Plugin.ChmViewer.csproj
@@ -0,0 +1,81 @@
+
+
+
+ Library
+ net462
+ QuickLook.Plugin.ChmViewer
+ QuickLook.Plugin.ChmViewer
+ 512
+ false
+ true
+ latest
+ false
+ false
+ false
+ MinimumRecommendedRules.ruleset
+ {C6E87A2A-8BC0-4D15-B7CA-8A061B79B8D5}
+ AnyCPU
+ AnyCPU;x64;ARM64
+
+
+
+ true
+ full
+ false
+ ..\..\Build\Debug\QuickLook.Plugin\QuickLook.Plugin.ChmViewer\
+ DEBUG;TRACE
+ prompt
+
+
+
+ true
+ full
+ false
+ ..\..\Build\Debug\QuickLook.Plugin\QuickLook.Plugin.ChmViewer\
+ DEBUG;TRACE
+ prompt
+
+
+
+ pdbonly
+ true
+ ..\..\Build\Release\QuickLook.Plugin\QuickLook.Plugin.ChmViewer\
+ TRACE
+ prompt
+
+
+
+ pdbonly
+ true
+ ..\..\Build\Release\QuickLook.Plugin\QuickLook.Plugin.ChmViewer\
+ TRACE
+ prompt
+
+
+
+ true
+ full
+ ..\..\Build\Debug\QuickLook.Plugin\QuickLook.Plugin.ChmViewer\
+ DEBUG;TRACE
+ x86
+ prompt
+
+
+
+ ..\..\Build\Release\QuickLook.Plugin\QuickLook.Plugin.ChmViewer\
+ TRACE
+ true
+ pdbonly
+ x86
+ prompt
+
+
+
+
+ {85FDD6BA-871D-46C8-BD64-F6BB0CB5EA95}
+ QuickLook.Common
+ False
+
+
+
+
diff --git a/QuickLook.slnx b/QuickLook.slnx
index 1235350..ee2665e 100644
--- a/QuickLook.slnx
+++ b/QuickLook.slnx
@@ -60,6 +60,10 @@
+
+
+
+
@@ -119,6 +123,7 @@
+