Как добавить элемент в контекстное меню проводника для приложения UWP - PullRequest
0 голосов
/ 15 мая 2019

Я конвертировал свое приложение WPF с помощью Desktop App Converter в пакет appx. Мне нужно иметь пункт в контекстном меню проводника. То есть пользователь щелкает правой кнопкой мыши по файлу и видит мой пункт «Выполнить действия с приложением» в главном меню. При выборе элемента мое приложение начинается с аргументов командной строки выбранного файла. Мне не нужно "windows.fileTypeAssociation" и "открыть с помощью приложения" в подменю. Я хочу, чтобы мой пункт находился в меню верхнего уровня.

Итак, шаги, которые я сделал:

  1. С приложением Desktop App Converter у меня есть пакет appx и папка PackageFiles.
  2. В папке Package я изменил файл AppxManifest.xml:

    ...
    <Extensions>
    <desktop4:Extension Category="windows.fileExplorerContextMenus">
      <desktop4:FileExplorerContextMenus>  
        <desktop4:ItemType  Type=".jpg">
          <desktop4:Verb Id="Foo" Clsid="91dce9db-f066-366b-be01-abcdd41e5cf1"/>
        </desktop4:ItemType>
      </desktop4:FileExplorerContextMenus>
     </desktop4:Extension>
    </Extensions>
    ...
    
  3. Установить приложение с помощью команд: add-appxpackage -path \ AppxManifest.xml -Register

Примечание. Я не нашел, где я могу получить ClsId для своего приложения, и это GUID другого приложения.

Так что после всех этих действий я не увидел никаких новых пунктов в контекстном меню. Я пытался сделать "windows.fileTypeAssociation" раньше аналогичным образом. Это сработало для меня.

Исследуя subj, я обнаружил, что многие коллеги безуспешно пытались решить эту проблему, например:

https://github.com/MicrosoftDocs/winrt-related/issues/117

https://social.microsoft.com/Forums/azure/ru-RU/ef1af46e-a06d-4ba3-9ec8-48ce3ceb0abc/visual-studio-2017-windows-application-packaging-desktop4fileexplorercontextmenus-not-working?forum=wpdevelop&prof=required

https://social.msdn.microsoft.com/Forums/expression/en-US/d81ed0c7-a96a-4b47-a685-3f927fef9438/uwphow-to-add-an-item-into-windows-explorer-context-menu?forum=wpdevelop

Сводка. Возможно ли реализовать пункт контекстного меню проводника для UWP? Если возможно, что я делаю не так? Кто-то сделал это с успехом? Есть рабочие решения, примеры? Толковые мануалы? А где взять "Clsid"?

1 Ответ

0 голосов
/ 24 мая 2019

CLSID может быть упакованным COM-сервером, объявленным в манифесте того же приложения.Вот пример:

 <desktop4:Extension Category="windows.fileExplorerContextMenus">
          <desktop4:FileExplorerContextMenus>
           <desktop4:ItemType Type=".txt">
              <desktop4:Verb Id="Command2" Clsid="E694BDCD-DCEB-42B6-9C1A-8A604F8XXXXX" />
            </desktop4:ItemType>
          </desktop4:FileExplorerContextMenus>
        </desktop4:Extension>
                <com:Extension Category="windows.comServer">
          <com:ComServer>
            <com:SurrogateServer  DisplayName="context menu verb handler 2">
              <com:Class Id="E694BDCD-DCEB-42B6-9C1A-8A604F89F2D1" Path="Providers.dll" ThreadingModel="STA"/>
            </com:SurrogateServer>
          </com:ComServer>
        </com:Extension>

Clsid - это comserver, который должен реализовать IExplorerCommand, представляющий глагол контекстного меню.

...