2015-11-26 4 views
2

Я хочу сделать (программно, используя WinAPI) то же самое, что делает Windows, когда вы нажимаете «Переключить пользователя» в меню «Пуск». А именно, чтобы показать экран, на котором перечислены все доступные учетные записи пользователей, и вы можете переключиться на другую учетную запись, все еще регистрируемую как предыдущую. Насколько я знаю, это называется быстрым переключением пользователей. У меня нет учетных данных, моя задача - разрешить пользователям моего приложения переключиться на другую учетную запись, используя свои собственные учетные данные.Показать экран переключения пользователя Windows

Кроме того, есть ли способ узнать, включена ли опция в меню «Пуск»? Потому что, если это не так, я не хочу показывать этот параметр в своем приложении.

UPDATE

Я использовал ::ExitWindowsEx() для выхода из, но не EWX_ флага для переключения.

С уважением,

+1

Почему не могут пользователи просто сделать это сами? Почему другому приложению необходимо предоставить больше пользовательского интерфейса, когда существующий пользовательский интерфейс работает отлично? –

+1

@DavidHeffernan Ответ прост: альтернативный пусковой механизм, адаптированный к специальным аппаратным средствам/прецедентам. – noober

+1

Если вы хотите заменить экран Windows по умолчанию, вы можете написать собственный модуль GINA https://msdn.microsoft.com/en-us/library/windows/desktop/aa380543(v=vs.85).aspx. В противном случае, похоже, что запуск экрана «Быстрое переключение пользователей Windows по умолчанию» вызывает вызов недокументированной функции «ShellStartCredentialServer» в Microsoft GINA по умолчанию, согласно http://www.remkoweijnen.nl/blog/2008/11/26/executing-a -fast-пользователь включение программно-часть-1 /. Излишне говорить, что вызов недокументированных API - это плохая идея. Ах, и с Vista нет GINA. – PeterK

ответ

3

Это звучит, как вы хотите, WTSDisconnectSession() функцию:

Отключает вошедшего пользователя из указанного удаленного рабочего стола Services сессии без закрытия сессии. Если впоследствии пользователь входит в систему на том же узле узла сеанса удаленных рабочих столов (RD Session Host) , пользователь повторно подключается к тому же сеансу.

Вы можете использовать его как это:

WTSDisconnectSession(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, FALSE); 
+0

Работает отлично. Спасибо. – noober

+0

BTW, он не работает на нескольких виртуальных машинах, работающих под управлением Oracle VirtualBox. Если вы протестируете решение на виртуальных машинах, имейте в виду, что это не настоящая проблема. – noober

Смежные вопросы