我有一些代码可以创建一个新桌面并在该桌面中启动一个进程。
一些选择 Windows XP 机器,当这段代码运行时,我可以看到它切换到新桌面并启动该过程,但几乎立即,桌面切换回正常桌面。
这段代码在大约 98% 的机器上运行良好,我似乎无法找出任何原因导致它在其他机器上不起作用。
应该SwitchDesktop
靠谱吗?我可以挂钩SwitchDesktop
可能从另一个应用程序调用的调用吗?
我的代码:
int DLL_EXP_IMP WINAPI Process_Desktop(char *szDesktopName, char *szPath)
{
HDESK hOriginalThread;
HDESK hOriginalInput;
HDESK hNewDesktop;
int procSuccess;
// Save original ...
hOriginalThread = GetThreadDesktop(GetCurrentThreadId());
hOriginalInput = OpenInputDesktop(0, FALSE, DESKTOP_SWITCHDESKTOP);
// Create a new Desktop and switch to it
hNewDesktop = CreateDesktop(szDesktopName, NULL, NULL, DF_ALLOWOTHERACCOUNTHOOK, GENERIC_ALL, NULL);
SetThreadDesktop(hNewDesktop);
SwitchDesktop(hNewDesktop);
// This call blocks until the process exits, and is confirmed to work on the affected machines
procSuccess = StartProcess(szDesktopName, szPath);
// Restore original ...
SwitchDesktop(hOriginalInput);
SetThreadDesktop(hOriginalThread);
// Close the Desktop
CloseDesktop(hNewDesktop);
if (procSuccess != 0)
{
return procSuccess;
}
else
{
return 0;
}
}