Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > CreateDesktop не работают горячие клавиши


Автор: Friackazoid 23.6.2010, 16:45
Всем доброго времени суток!

Есть такая проблема, после создания еще одного рабочего стола и запуска в нем LiteStep (менеджер рабочего стола типа експлорера) в нем не работают горячие клавиши. Точнее работают но действие от них происходит на первом рабочем столе.

Код

    DWORD curid;
    HDESK newdesk, olddesk;
    STARTUPINFO info={sizeof(info)};
    PROCESS_INFORMATION processInfo;

    memset(&info, 0, sizeof(info));
    memset(&info, 0, sizeof(processInfo));
    info.cb = sizeof(info);
    info.dwFlags = 0;
    info.lpDesktop = "Desk1";

    curid = GetCurrentThreadId();
    olddesk = GetThreadDesktop(curid);
    newdesk = CreateDesktopW (L"Desk1", NULL, NULL, NULL, 0x10000000 , NULL);
    newdesk = OpenDesktopW (L"Desk1", 0, 0, 0x10000000);

    if (!newdesk || !olddesk)
        return -1;

    if (CreateProcess("litestep.exe", NULL, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &info, &processInfo)) {
        if (SwitchDesktop(newdesk) && SetThreadDesktop(newdesk)) {
            ::WaitForSingleObject(processInfo.hProcess, INFINITE);
            SwitchDesktop (olddesk);
        }
        CloseHandle(processInfo.hProcess);
        CloseHandle(processInfo.hThread);
    }

    CloseDesktop (newdesk);

    return (EXIT_SUCCESS);


В тоже время в утилите Русиновича Desktops таких проблем не возникает.

Вопрос, надо как то по другому создавать рабочий стол\запускать процесс или необходимо вручную отбиндить горячие клавиши от предыдущего рабочего стола? И если второе то как?

Автор: xvr 24.6.2010, 08:23
Цитата(Friackazoid @  23.6.2010,  16:45 Найти цитируемый пост)
В тоже время в утилите Русиновича Desktops таких проблем не возникает.
Может потому что он там первым делом запускает explorer?


Автор: Friackazoid 24.6.2010, 09:46
xvr
Нет проблема явно не в этом. Я пробовала вместо LiteStep запускать explorer.exe получается тоже самое. К тому же при запуске, LiteStep выставлен в качестве шела в winlogon

Автор: xvr 24.6.2010, 10:43
Попробуйте переключиться на новый десктоп ДО создания процесса

Автор: Friackazoid 24.6.2010, 11:11
Нет, к сожалению не помогает  ::'(

Автор: xvr 24.6.2010, 11:33
Тогда дизассемблировать Desktops.exe  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)