17#if defined __has_include
18#if __has_include(<appmodel.h>)
24#if defined HAS_APPMODEL_H
56#ifndef PACKAGE_FULL_NAME_MAX_LENGTH
60#ifndef APPMODEL_ERROR_NO_PACKAGE
72#ifndef KF_FLAG_RETURN_FILTER_REDIRECTION_TARGET
81 template<
typename T,
typename U>
84 return reinterpret_cast<T
>(
reinterpret_cast<void *
>(
v));
97 cast_to_function<pGetCurrentPackageFamilyName_t>(
dllKernel32.resolve(
"GetCurrentPackageFamilyName"));
99 cast_to_function<pGetCurrentPackageFullName_t>(
dllKernel32.resolve(
"GetCurrentPackageFullName"));
120 std::array<WCHAR, PACKAGE_FULL_NAME_MAX_LENGTH + 1> name{};
121 UINT32 nameLength = name.size();
127 if (result == ERROR_INSUFFICIENT_BUFFER) {
129 qWarning() <<
"GetCurrentPackageFamilyName returned "
130 "ERROR_INSUFFICIENT_BUFFER, required length is"
133 *outName = QString();
137 if (result != ERROR_SUCCESS) {
138 qWarning() <<
"GetCurrentPackageFamilyName returned unexpected error code:" << result;
144 if (nameLength > name.size()) {
145 qWarning() <<
"GetCurrentPackageFamilyName returned a length "
146 "exceeding the buffer size:"
148 nameLength = name.size();
151 if (nameLength > 0 && name.at(nameLength - 1) == L
'\0') {
154 *outName = QString::fromWCharArray(name.data(),
static_cast<int>(nameLength));
166 std::array<WCHAR, PACKAGE_FULL_NAME_MAX_LENGTH + 1> name{};
167 UINT32 nameLength = name.size();
173 if (result == ERROR_INSUFFICIENT_BUFFER) {
175 qWarning() <<
"GetCurrentPackageFullName returned "
176 "ERROR_INSUFFICIENT_BUFFER, required length is"
179 *outName = QString();
183 if (result != ERROR_SUCCESS) {
184 qWarning() <<
"GetCurrentPackageFullName returned unexpected error code:" << result;
190 if (nameLength > name.size()) {
191 qWarning() <<
"GetCurrentPackageFullName returned a length "
192 "exceeding the buffer size:"
194 nameLength = name.size();
197 if (nameLength > 0 && name.at(nameLength - 1) == L
'\0') {
200 *outName = QString::fromWCharArray(name.data(),
static_cast<int>(nameLength));
207 PWSTR path =
nullptr;
210 if (result != S_OK) {
211 qWarning() <<
"SHGetKnownFolderPath returned error HRESULT:" << result;
215 qWarning() <<
"SHGetKnownFolderPath did not return a path";
218 QString appData = QString::fromWCharArray(path);
LONG(WINAPI *)(UINT32 *packageFamilyNameLength, PWSTR packageFamilyName) pGetCurrentPackageFamilyName_t
LONG(WINAPI *)(UINT32 *packageFullNameLength, PWSTR packageFullName) pGetCurrentPackageFullName_t
constexpr LONG APPMODEL_ERROR_NO_PACKAGE
constexpr int KF_FLAG_RETURN_FILTER_REDIRECTION_TARGET
constexpr int PACKAGE_FULL_NAME_MAX_LENGTH
bool tryGetCurrentPackageFullName(QString *outName)
bool tryGetCurrentPackageFamilyName(QString *outName)
QString getPackageRoamingAppDataLocation()
bool isRunningInPackage()
pGetCurrentPackageFamilyName_t getCurrentPackageFamilyName
~AppmodelFunctions()=default
static const AppmodelFunctions & instance()
T cast_to_function(U v) noexcept
pGetCurrentPackageFullName_t getCurrentPackageFullName