Запуск полноэкранного приложения на другом рабочем столе

Тема в разделе "WASM.WIN32", создана пользователем GLEB, 21 май 2011.

  1. GLEB

    GLEB New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2007
    Сообщения:
    83
    Приветствую!
    Необходимо запустить графическое приложение на отдельном рабочем столе.

    Код (Text):
    1.     HDESK desktop = CreateDesktop(L"3dmark_desktop", NULL, NULL, 0, GENERIC_ALL, NULL);
    2.     HDESK old = OpenInputDesktop(0, FALSE, DESKTOP_SWITCHDESKTOP);//GetThreadDesktop(GetCurrentThreadId());
    3.  
    4.     SetThreadDesktop(desktop);
    5.     SwitchDesktop(desktop);
    6.  
    7.     STARTUPINFO         si;
    8.     PROCESS_INFORMATION pi;
    9.     DWORD dwFlags = NORMAL_PRIORITY_CLASS;
    10.     ZeroMemory(&si, sizeof(STARTUPINFO));
    11.     si.cb = sizeof(STARTUPINFO);
    12.     si.lpDesktop = L"3dmark_desktop";
    13.     wchar_t path[MAX_PATH] = L"C:\\3DMark06\\3dmark06.exe -nosysteminfo";
    14.  
    15.     if ( CreateProcess(NULL, path, NULL, NULL, TRUE, dwFlags, NULL, L"C:\\3DMark06", &si, &pi) )
    16.     {
    17.         WaitForSingleObject(pi.hProcess, INFINITE);
    18.         CloseHandle(pi.hProcess);
    19.         CloseHandle(pi.hThread);
    20.     }
    21.  
    22.     Sleep(10000);
    23.  
    24.     SetThreadDesktop(old);
    25.     SwitchDesktop(old);
    26.     CloseDesktop(desktop);
    Всё работает нормально, но при возврате из полноэкранного режима и оконный, вижу только черный экран, 3DMARK тут не причем, такая проблема с любым полноэкранным приложением.

    Ввод работает, через клавиатуру можно завершить приложение и тогда нормально произойдет переключение на Default рабочий стол, или нажимаю ctrl+alt+del, переключается на Winlogon, а оттуда уже на мой "3dmark_desktop"

    Это можно как-нибудь исправить?
     
  2. GLEB

    GLEB New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2007
    Сообщения:
    83
    Проверил на разных компах, проблема наблюдается только в Windows7 при использовании Aero, причем только когда включены все возможности аэро (прозрачные заголовки), а с использованием упрощенной схемы, когда заголовки непрозрачные, все работает нормально.

    Кстати, новый рабочий стол если включено аэро почемуто создается с упрощенной темой, может в этом дело?
     
  3. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Провёл эксперимент с помощью этой утилитки от Руссиновича: баг на Win7 подтверждаю. Убрать чёрный экран помогает переключение на предыдущий десктоп и обратно.

    Так что пиши в саппорт ;)
     
  4. GLEB

    GLEB New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2007
    Сообщения:
    83
    Twister
    Самое простое и быстрое решение в моем случае это наверно временное отключение Aero Glass

    DwmIsCompositionEnabled
    DwmEnableComposition

    Тем более что при запуске 3dmark-а оно полюбому отключается.