mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-05 18:57:19 +02:00
Safeguarding end user links in settings (#4226)
* first adjustment to wiki move * Image Resizer and deleting imgs for FZ * updating stuff to aka links * updating app to leverage aka links * moving files to wiki * KBM adjustment * updating * getting PT Run moved over * Shortcut guide and fixing launcher's readme text * Update README.md * img for shortcut guide moved to wiki * updated setting img to be aka link as well
This commit is contained in:
@@ -1,22 +1,8 @@
|
||||
# File Explorer
|
||||
|
||||
File Explorer add-ons, right now are just limited to Preview Pane additions for File Explorer.
|
||||
## End user facing:
|
||||
|
||||
## Preview Pane
|
||||
|
||||
Preview Pane is an existing feature in the File Explorer which shows a lightweight, rich, read-only preview of the file's contents in the view's reading pane. To enable it, you just click the View tab in the ribbon and then click `Preview Pane`. Below is an example of Markdown and Svg files previews in File Explorer with PowerToys.
|
||||
|
||||

|
||||
|
||||
> Adding Custom Preview Handlers to Windows File Explorer Preview Pane.
|
||||
|
||||
[**Overview**](#overview) ·
|
||||
[**Developing**](#Developing) ·
|
||||
[**Installation**](#Installation) ·
|
||||
|
||||
## Overview
|
||||
|
||||
Preview handlers are called when an item is selected to show a lightweight, rich, read-only preview of the file's contents in the view's reading pane. This is done without launching the file's associated application. Please follow this [documentation](https://docs.microsoft.com/en-us/archive/msdn-magazine/2007/january/windows-vista-and-office-writing-your-own-preview-handlers) to start developing a preview handler, when done, continue with this documentation to learn how to integrate a preview handler into PowerToys.
|
||||
[Please visit our overview](https://aka.ms/PowerToysOverview_FileExplorerAddOns)
|
||||
|
||||
## Developing
|
||||
|
||||
@@ -81,7 +67,6 @@ namespace XYZPreviewHandler
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
#### Integrate the Preview Handler into PowerToys Settings:
|
||||
|
||||
Navigate to the [powerpreview](../previewpane/powerpreview/powerpreview.h) project and edit the `powerpreview.h` file. Add the following Settings Object instance to `m_previewHandlers` settings objects array in the constructor initialization:
|
||||
@@ -138,55 +123,6 @@ To add a new Previewer update the `Product.wxs` file in `PowerToysSetup` similar
|
||||
</Component>
|
||||
```
|
||||
|
||||
### MSIX
|
||||
|
||||
Warning: There are known issues([Issue - 1446](https://github.com/microsoft/PowerToys/issues/1446), [Issue - 1545](https://github.com/microsoft/PowerToys/issues/1545)) with MSIX Installation of Preview Handlers and it's not fully supported.
|
||||
|
||||
To add a new Previewer with MSIX update the `appxmanifest.xml` file to add file type association for preview handler and add `SurrogateServer` element with class registration. MSIX currently doesn't support .Net Assembly activation with `SurrogateServer` the logic used is shim the activation by using native dll. `dllmain.cpp` in `powerpreview` project expose the `DLLGetClassObject` method which is used to activate .net Assembly by using `CoGetClassObject`.
|
||||
|
||||
Changes required in `appxmanifest.xml`:
|
||||
|
||||
```xml
|
||||
<!-- File Type Association for new Preview Handler -->
|
||||
<!-- More details: https://docs.microsoft.com/en-us/uwp/schemas/appxpackage/uapmanifestschema/element-desktop2-desktoppreviewhandler -->
|
||||
<uap:Extension Category="windows.fileTypeAssociation">
|
||||
<uap3:FileTypeAssociation Name="xyzpreviewhandler" desktop2:AllowSilentDefaultTakeOver="true">
|
||||
<uap:SupportedFileTypes>
|
||||
<uap:FileType>.xyz</uap:FileType>
|
||||
</uap:SupportedFileTypes>
|
||||
<desktop2:DesktopPreviewHandler Clsid="74619BDA-A66B-451D-864C-A7726F5FE650"/>
|
||||
</uap3:FileTypeAssociation>
|
||||
</uap:Extension>
|
||||
<com:Extension Category="windows.comServer">
|
||||
<com:ComServer>
|
||||
<com:SurrogateServer DisplayName="Preview Handler" AppId="E39A92FE-D89A-417B-9B9D-F0B6BD564B36" SystemSurrogate="PreviewHost">
|
||||
<com:Class Id="Shim-Activator-Clsid-Guid" Path="modules\powerpreview.dll" ThreadingModel="Both"/>
|
||||
</com:SurrogateServer>
|
||||
</com:ComServer>
|
||||
</com:Extension>
|
||||
```
|
||||
Update the `PackagingLayout.xml` to include dll's required by the new Preview Handler.
|
||||
|
||||
```xml
|
||||
<File DestinationPath="modules\XYZPreviewHandler.dll" SourcePath="..\..\x64\Release\modules\XYZPreviewHandler.dll"/>
|
||||
<File DestinationPath="modules\XYZDependency.dll" SourcePath="..\..\x64\Release\modules\XYZDependency.dll"/>
|
||||
```
|
||||
|
||||
Add the actual Clsid of the new preview handler in `CLSID.h` in `powerpreview` project and class registration registry changes in `registry.dat` similar to existing preview handler. To update the `registry.dat` mount the registry hive on a empty key in registry by using `reggedit.exe` and add registry key for class registration for the new preview handler similar to MSI class registration and existing preview handlers. And export the updated `registry.dat` hive also export the `registry.reg` file for making the contents in `registry.dat` visible in source code.
|
||||
|
||||
```cpp
|
||||
// CLSID used in manifest file for Preview Handler.
|
||||
const CLSID CLSID_SHIMActivateXYZPreviewHandler = { valid - guid };
|
||||
|
||||
// Actual Clsid Guid.
|
||||
const CLSID CLSID_XYZPreviewHandler = { valid - guid };
|
||||
|
||||
// Pairs of NativeClsid vs ManagedClsid used for preview handlers.
|
||||
const std::vector<std::pair<CLSID, CLSID>> NativeToManagedClsid({
|
||||
{ CLSID_SHIMActivateXYZPreviewHandler, CLSID_XYZPreviewHandler }
|
||||
});
|
||||
```
|
||||
|
||||
## Managing Preview Handlers
|
||||
|
||||
After successful integration, your preview handler should appear in the PowerToys settings UI under the `File Explorer Preview` Tab. In here you should be able to enable and disable your preview handler.
|
||||
|
||||
@@ -51,7 +51,7 @@ bool PowerPreviewModule::get_config(_Out_ wchar_t* buffer, _Out_ int* buffer_siz
|
||||
// General Settings.
|
||||
settings.set_description(GET_RESOURCE_STRING(IDS_GENERAL_DESCRIPTION));
|
||||
settings.set_icon_key(GET_RESOURCE_STRING(IDS_ICON_KEY_NAME));
|
||||
settings.set_overview_link(L"https://github.com/microsoft/PowerToys/blob/master/src/modules/previewpane/README.md");
|
||||
settings.set_overview_link(L"https://aka.ms/PowerToysOverview_FileExplorerAddOns");
|
||||
|
||||
// Preview Pane: Settings Group Header.
|
||||
settings.add_header_szLarge(
|
||||
|
||||
Reference in New Issue
Block a user