Как проверить, работает ли программа в локальной консоли? - PullRequest
1 голос
/ 28 октября 2008

В Windows Server 2003, как я могу проверить, работает ли моя программа в локальной консоли («на экране серверного компьютера») вместо удаленного сеанса?

Я использую Delphi Win32, поэтому любой метод на основе Windows API должен работать ..

Ответы [ 4 ]

2 голосов
/ 25 марта 2009

Для меня ProcessIdToSessionId вернул 0 как при запуске непосредственно на физической консоли, так и при входе в административный сеанс (mstsc /admin).

Однако, когда вы входите через RDP, Windows (в данном случае XP Pro) создает новый сеанс, который он показывает на физической консоли, на котором просто отображается экран «Этот компьютер заблокирован». WTSGetActiveConsoleSessionId возвращает идентификатор сеанса для этого второго сеанса, который в моем случае был 2.

Таким образом, несмотря на то, что ваше приложение работает на консоли, теперь есть два сеанса консоли, и ваше приложение не работает на активном. В моем коде я сравниваю идентификатор сессии вместо 0.

2 голосов
/ 05 ноября 2008

WTSGetActiveConsoleSessionId () должен возвращать идентификатор сеанса, подключенного к консоли. Затем вы можете сравнить этот идентификатор сеанса с текущим идентификатором сеанса вашего приложения, чтобы определить, работаете ли вы на консоли или нет. Vista (не уверенная в Windows Server 2008) не обязательно дает сеансу консоли идентификатор 1 (быстрое переключение пользователей, кто-нибудь?).

2 голосов
/ 28 октября 2008

Не скажет ли вам номер сеанса это?

ProcessIdToSessionId (GetCurrentProcessId (), & dwSessionNum)

Вам также необходимо проверить версию ОС, используя GetVersionEx: для всего, вплоть до XP / Server 2003, сеанс 0 является локальным (сервис или интерактивная консоль), все что выше, является виртуальным. Для Vista / 2008 сеансы 0 и 1 являются локальными (0 - сервис, 1 - консоль), все остальное - виртуальное.

Полагаю, ваши устройства Delphi объявили бы номер сессии как var, поэтому вам не понадобится амперсанд.

0 голосов
/ 04 декабря 2008

Брайан прав, с тех пор я столкнулся с Vista, сообщающей идентификатор сеанса 2 для интерактивной консоли, несмотря на то, что быстрое переключение пользователей не использовалось. Конечно, это может быть просто ошибка: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...