新しいデスクトップを作成し、そのデスクトップにプロセスを起動するためのコードがいくつかあります。
いくつかの選択された 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;
}
}