SetThreadDesktop (error 170).
От: Аноним  
Дата: 28.04.05 18:05
Оценка:
Здраствуйте. В проектах на билдере некоректно работает функция
SetThreadDesktop (error 170). Если проект компилировать как консольный — все ок, но у меня сервис (интерактивный, спод система) также не работает в обычном приложении. Окон никаких я не ставлю да и хуков тоде
Код


bool MakeInteractive()
{
    HWINSTA hOldWin = GetProcessWindowStation();
    HWINSTA hWinSta0 = OpenWindowStation("WinSta0", FALSE, MAXIMUM_ALLOWED);
    HDESK hThreadDesktop = GetThreadDesktop(GetCurrentThreadId());

    if (!hWinSta0)
    {
        return false;
    }

    SetProcessWindowStation(hWinSta0);
    CloseWindowStation(hWinSta0);

    HDESK hDefault = OpenDesktop("Default", DF_ALLOWOTHERACCOUNTHOOK, TRUE, DESKTOP_HOOKCONTROL|DESKTOP_CREATEWINDOW );
    /*test*/HDESK  hInputDesk = OpenInputDesktop(DF_ALLOWOTHERACCOUNTHOOK, FALSE, DESKTOP_CREATEWINDOW);
    if (!hDefault)
    {
        PutsInMyFile("MakeInteractive:\n");
        return false;

    }

    if ( !SetThreadDesktop( hDefault ) )
    {
        CloseDesktop(hDefault);
        CloseDesktop(hInputDesk);
        if (IsTest)
        {
               DWORD er = GetLastError(); //ïîëó÷èòü êîä îøèáêè
                char erStr[1024];
                sprintf(erStr,"Error SetThreadDesktop :-( %d \n", (int)er);
            PutsInMyFile(erStr);
        };
        return false;
    }
    CloseDesktop(hDefault);
    CloseDesktop(hInputDesk);
    return true;
}


WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR comandLineOption , int)
{
MakeInteractive();
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.