Приветствую! Необходимо запустить графическое приложение на отдельном рабочем столе. Код (Text): HDESK desktop = CreateDesktop(L"3dmark_desktop", NULL, NULL, 0, GENERIC_ALL, NULL); HDESK old = OpenInputDesktop(0, FALSE, DESKTOP_SWITCHDESKTOP);//GetThreadDesktop(GetCurrentThreadId()); SetThreadDesktop(desktop); SwitchDesktop(desktop); STARTUPINFO si; PROCESS_INFORMATION pi; DWORD dwFlags = NORMAL_PRIORITY_CLASS; ZeroMemory(&si, sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); si.lpDesktop = L"3dmark_desktop"; wchar_t path[MAX_PATH] = L"C:\\3DMark06\\3dmark06.exe -nosysteminfo"; if ( CreateProcess(NULL, path, NULL, NULL, TRUE, dwFlags, NULL, L"C:\\3DMark06", &si, &pi) ) { WaitForSingleObject(pi.hProcess, INFINITE); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); } Sleep(10000); SetThreadDesktop(old); SwitchDesktop(old); CloseDesktop(desktop); Всё работает нормально, но при возврате из полноэкранного режима и оконный, вижу только черный экран, 3DMARK тут не причем, такая проблема с любым полноэкранным приложением. Ввод работает, через клавиатуру можно завершить приложение и тогда нормально произойдет переключение на Default рабочий стол, или нажимаю ctrl+alt+del, переключается на Winlogon, а оттуда уже на мой "3dmark_desktop" Это можно как-нибудь исправить?
Проверил на разных компах, проблема наблюдается только в Windows7 при использовании Aero, причем только когда включены все возможности аэро (прозрачные заголовки), а с использованием упрощенной схемы, когда заголовки непрозрачные, все работает нормально. Кстати, новый рабочий стол если включено аэро почемуто создается с упрощенной темой, может в этом дело?
Провёл эксперимент с помощью этой утилитки от Руссиновича: баг на Win7 подтверждаю. Убрать чёрный экран помогает переключение на предыдущий десктоп и обратно. Так что пиши в саппорт
Twister Самое простое и быстрое решение в моем случае это наверно временное отключение Aero Glass DwmIsCompositionEnabled DwmEnableComposition Тем более что при запуске 3dmark-а оно полюбому отключается.