Как из обычного классического desktop приложения написанного на C++ запустить приложение установленное из Windows Store? По аналогии с QProcess
Приложение UWP можно запустить, используя его зарегистрированный протокол:
system("explorer protocol://");
где protocol - имя одного из ключей реестра в разделе
HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\PackageRepository\Packages\(PackageID)\(AppUserModelID)\windows.protocol
Например:
calculator для стандартного калькулятора Windows
microsoft-edge для Microsoft Edge
Приложение Win32, запакованное для Windows Store, можно запустить обычным запуском его exe-файла.
Если приложение UWP не регистрирует ни одного протокола, его можно запустить через его зарегистрированные псевдонимы командной строки: Command-Line Activation of Universal Windows Apps.
Произвольное приложение можно запустить, используя IApplicationActivationManager::ActivateApplication. Пример кода для Visual C++ (требует Windows 8-10 SDK):
#include <stdlib.h>
#include <stdio.h>
#include <shlobj.h>
#include <stdio.h>
#include <shobjidl.h>
#include <objbase.h>
#include <atlbase.h>
#include <string>
HRESULT LaunchApp(const std::wstring& strAppUserModelId, PDWORD pdwProcessId)
{
CComPtr<IApplicationActivationManager> spAppActivationManager;
HRESULT hrResult = E_INVALIDARG;
if (!strAppUserModelId.empty())
{
// Instantiate IApplicationActivationManager
hrResult = CoCreateInstance(CLSID_ApplicationActivationManager,
NULL,
CLSCTX_LOCAL_SERVER,
IID_IApplicationActivationManager,
(LPVOID*)&spAppActivationManager);
if (SUCCEEDED(hrResult))
{
// This call ensures that the app is launched as the foreground window
hrResult = CoAllowSetForegroundWindow(spAppActivationManager, NULL);
// Launch the app
if (SUCCEEDED(hrResult))
{
hrResult = spAppActivationManager->ActivateApplication(strAppUserModelId.c_str(),
NULL,
AO_NONE,
pdwProcessId);
}
}
}
return hrResult;
}
int main(void)
{
HRESULT hrResult = S_OK;
if (SUCCEEDED(CoInitializeEx(NULL, COINIT_APARTMENTTHREADED)))
{
DWORD dwProcessId;
hrResult = LaunchApp(std::wstring(L"Microsoft.WindowsCalculator_8wekyb3d8bbwe!App"), &dwProcessId); //AppUserModelID для стандартного калькулятора
if (FAILED(hrResult)) {
wprintf(L"Failed with HRESULT 0x%x", (UINT)hrResult);
}
CoUninitialize();
}
getchar();
return 0;
}
Источник: https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/7cf9693f-0b87-423f-8557-23b61a8c10cc/how-do-i-programmatically-launch-a-windows-store-app-from-my-desktop-app?forum=windowsgeneraldevelopmentissues
Для запуска необходим AppUserModelID, который можно найти поиском в реестре по упомянутому выше разделу PackageRepository (имя вложенного ключа) или разделам HKEY_CLASSES_ROOT\AppX(...)\Application
(значение свойства AppUserModelID).
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Существует ли способ построить в классе группу "одинаковых" методов, но использующих каждый одно уникальное свойство/параметр, при помощи...
Возник такой вопрос: как реализовать решение следующей задачи на C++? Вводятся число N - количество строкВ каждой из N строк через пробел вводятся...
Делаю приложение, которое запускается на Windows 7/10 от пользователя с правами администратораПри этом запускается оно в обычном режиме (с ограниченными...
хочу хранить в векторе некоторые структуры,(много)Интересует вопрос почему такой код работает быстрее