powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Смена оконной станции для процесса сервиса (с быстрым переключением пользователей)
1 сообщений из 1, страница 1 из 1
Смена оконной станции для процесса сервиса (с быстрым переключением пользователей)
    #33041761
acronim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача:
Есть сервис, который уже умеет отслеживать различные переключения пользователей. Ему нужно каждый раз устанавливать хуки на desktope активного интерактивного (:) ) пользователя.
Вроде бы все просто - меняем рабочую станцию на активную и ставим хуки, но при использовании быстрого переключения пользователей не нашол документации по определению рабочей станции активного юзверя (возможно OpenInputDesktop(?)).
Но вся беда в том что SetThreadDesktop возвращает ошибку 170 (system_busy) при вызове функции в
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR comandLineOption , int)
{
MakeInteractive();
}
при написании кода в СBuilder.
А вот если писать консольную программу, то все отлично работает.

может кто сталкивался и поборол зверя.


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;
}
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Смена оконной станции для процесса сервиса (с быстрым переключением пользователей)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]