非表示のデスクトップでアプリケーションを起動しようとしていますが、あまり進展がなく、デスクトップとウィンドウ ステーションが実際にどのようなものであるかに関する詳細なドキュメントが見つかりません。エラー処理が削除された私のコードは次のとおりです(ただし、そこにあり、エラーをキャッチしていないことを信じてください):
HWINSTA winSta = CreateWindowStation(_T("hiddenWinSta"), 0, 0, NULL);
SetProcessWindowStation(winSta);
HDESK desktop = CreateDesktop(_T("hiddenDesktop"), NULL, NULL, 0, DESKTOP_CREATEWINDOW, NULL);
OpenDesktop(_T("hiddenDesktop"), 0, TRUE, GENERIC_ALL);
SetThreadDesktop(desktop)
HWINSTA r = GetProcessWindowStation();
printf("winsta: %x %x\n", r, winSta);
HDESK curdesk = GetThreadDesktop(GetCurrentThreadId());
printf("desktop: %x %x\n", curdesk, desktop);
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
//si.lpDesktop = _T("hiddenDesktop");
ZeroMemory( &pi, sizeof(pi) );
TCHAR szCommand[MAX_PATH];
_sntprintf_s(szCommand, MAX_PATH, _T("%s"), _T("c:\\windows\\system32\\calc.exe"));
DWORD res = CreateProcess(NULL, szCommand, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
si.lpDesktop 行のコメントを外すと、恐ろしいエラー 0x000142 でプロセスが開始されません。コメントすると、現在のデスクトップで si.lpDesktop プロセスが開始されます。私は何を間違っていますか?私がやりたいことをすることさえ可能ですか (つまり、完全に見えない Windows GUI アプリを起動します)?