То есть надо инжектнуть свой код внутрь процесса, гарантированно подключенного к активному терминалу, получить его хендл терминала, и сравнить этот хендл со своим хендлом терминала?
Какой процесс годится на эту роль?
PS: Короче, если OpenWindowStation("winsta0",...) возвращает NULL, то порисовать видимо не удастся. Я остановился на этом.
Текущий вход в систему
Модераторы: Duncon, Hawk, Romeo, Eugie
Absurd, все-таки для какого процесса тебе нужно узнать терминал?
Если для своего (возможно, запущенного под чужим логином), то это просто:
А вот для произвольного процесса в системе все сложнее...
Насчет того, какой процесс гарантированно выполняется на интерактивном терминале - любой, запущенный залогиненным в данный момент пользователем, либо сервис, запущенный под локальным системным аккаунтом с флагом SERVICE_INTERACTIVE_PROCESS.
Если для своего (возможно, запущенного под чужим логином), то это просто:
Код: Выделить всё
HWINSTA hWinSta;
TCHAR name[100];
DWORD dwNeededSize;
hWinSta = GetProcessWindowStation();
if (GetUserObjectInformation(
hWinSta, // handle to object
UOI_NAME, // type of information to retrieve
(PVOID)name, // information buffer
sizeof(name), // size of the buffer
&dwNeededSize // receives required buffer size
))
{
cout << "Current process window station name:\t" << name << endl;
// Note: "winsta0" - standard name for an interactive window station
if (lstrcmpi(name, "winsta0") == 0)
cout << "Current process window station is interactive" << endl;
else
cout << "Current process window station is not interactive" << endl;
}
Насчет того, какой процесс гарантированно выполняется на интерактивном терминале - любой, запущенный залогиненным в данный момент пользователем, либо сервис, запущенный под локальным системным аккаунтом с флагом SERVICE_INTERACTIVE_PROCESS.