mirror of
https://github.com/microsoft/PowerToys.git
synced 2025-12-16 11:48:06 +01:00
[Workspaces] Fix snapshotting Steam (#34627)
This commit is contained in:
@@ -12,6 +12,7 @@
|
|||||||
#include <workspaces-common/WindowFilter.h>
|
#include <workspaces-common/WindowFilter.h>
|
||||||
|
|
||||||
#include <WorkspacesLib/AppUtils.h>
|
#include <WorkspacesLib/AppUtils.h>
|
||||||
|
#include <TlHelp32.h>
|
||||||
|
|
||||||
namespace SnapshotUtils
|
namespace SnapshotUtils
|
||||||
{
|
{
|
||||||
@@ -168,6 +169,28 @@ namespace SnapshotUtils
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DWORD GetParentPid(DWORD pid)
|
||||||
|
{
|
||||||
|
DWORD res = 0;
|
||||||
|
HANDLE h = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
|
||||||
|
PROCESSENTRY32 pe = { 0 };
|
||||||
|
pe.dwSize = sizeof(PROCESSENTRY32);
|
||||||
|
|
||||||
|
if (Process32First(h, &pe))
|
||||||
|
{
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (pe.th32ProcessID == pid)
|
||||||
|
{
|
||||||
|
res = pe.th32ParentProcessID;
|
||||||
|
}
|
||||||
|
} while (Process32Next(h, &pe));
|
||||||
|
}
|
||||||
|
|
||||||
|
CloseHandle(h);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<WorkspacesData::WorkspacesProject::Application> GetApps(const std::function<unsigned int(HWND)> getMonitorNumberFromWindowHandle)
|
std::vector<WorkspacesData::WorkspacesProject::Application> GetApps(const std::function<unsigned int(HWND)> getMonitorNumberFromWindowHandle)
|
||||||
{
|
{
|
||||||
std::vector<WorkspacesData::WorkspacesProject::Application> apps{};
|
std::vector<WorkspacesData::WorkspacesProject::Application> apps{};
|
||||||
@@ -245,14 +268,31 @@ namespace SnapshotUtils
|
|||||||
auto data = Utils::Apps::GetApp(processPath, installedApps);
|
auto data = Utils::Apps::GetApp(processPath, installedApps);
|
||||||
if (!data.has_value() || data->name.empty())
|
if (!data.has_value() || data->name.empty())
|
||||||
{
|
{
|
||||||
Logger::debug(L"Installed app not found: {}, {}", title, processPath);
|
Logger::info(L"Installed app not found: {}, try parent process", processPath);
|
||||||
|
|
||||||
|
// try with parent process (fix for Steam)
|
||||||
|
auto parentPid = GetParentPid(pid);
|
||||||
|
auto parentProcessPath = get_process_path(parentPid);
|
||||||
|
if (!parentProcessPath.empty())
|
||||||
|
{
|
||||||
|
data = Utils::Apps::GetApp(parentProcessPath, installedApps);
|
||||||
|
if (!data.has_value() || data->name.empty())
|
||||||
|
{
|
||||||
|
Logger::info(L"Installed parent app not found: {}", processPath);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Logger::info(L"Parent process path not found");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
WorkspacesData::WorkspacesProject::Application app{
|
WorkspacesData::WorkspacesProject::Application app{
|
||||||
.name = data.value().name,
|
.name = data.value().name,
|
||||||
.title = title,
|
.title = title,
|
||||||
.path = processPath,
|
.path = data.value().installPath,
|
||||||
.packageFullName = data.value().packageFullName,
|
.packageFullName = data.value().packageFullName,
|
||||||
.appUserModelId = data.value().appUserModelId,
|
.appUserModelId = data.value().appUserModelId,
|
||||||
.commandLineArgs = L"", // GetCommandLineArgs(pid, wbemHelper),
|
.commandLineArgs = L"", // GetCommandLineArgs(pid, wbemHelper),
|
||||||
|
|||||||
Reference in New Issue
Block a user