Компьютер Шаг за Шагом

Переключение между пользователями windows 7. Очень быстрое переключение пользователей Windows

Если внимательно посмотреть на экран, показанный на рис. 4.8, то можно заметить еще одно интересное новшество в Windows XP - опцию быстрого переключения пользователей (пользовательских сессий, Fast User Switching), которую следует обсудить более подробно.

Указанная возможность предназначена для обеспечения быстрого и удобного метода усиления технологии разделения данных в профилях Windows NT, а также эффективного механизма переключения между учетными записями пользователей.

Если это свойство активизировано, то пользователям нет необходимости выходить из системы (log off), поскольку учетные записи пользователей постоянно подключены. Таким образом, можно быстро переключаться между всеми открытыми учетными записями. При этом тем пользователям, которые до этого работали в системе, не нужно из нее выходить и защищать свои работающие приложения или активные соединения с Интернетом.

Система Windows XP с зарегистрированными в ней пользователями вновь отображает окно приглашения, в то время как все приложения продолжают выполняться. Кроме того, на экране будет отображено количество подключенных пользователей, уведомление о наличии непрочитанных сообщений электронной почты, а также количество выполняемых программ.

Windows XP Professional также предоставляет пользователям возможность доступа к данным и приложениям с других машин. На рабочих станциях, используемых в сфере бизнеса, оснащенных операционной системой Windows XP Professional, у пользователей есть возможность получения удаленного доступа к своим настольным компьютерам. Так, например, вы можете заблокировать свой офисный компьютер, уйти домой, и подключиться к нему из дома. >

Рис. 4.9. Вкладка Автономные файлы окна Свойства папки

Примечание : Обе функциональных возможности - Fast User Switching и Remote Desktop - используют технологию терминальных служб и позволяют работать с более ранними приложениями Microsoft Win32, не требуя при этом внесения в них каких-либо изменений. Если приложение, которое вы используете, сертифицировано для работы в Windows 2000, или соответствует спецификации "Application Specification for Windows 2000", то оно будет успешно выполняться и в Windows XP.

Следует отметить, что возможность быстрого переключения пользователей не будет действовать на рабочих станциях под управлением Windows XP Professional, входящих в домен.

В системах Windows XP Home Edition или Windows XP Professional, функционирующих на автономных рабочих станциях или входящих в состав рабочих групп, предусмотрена возможность включения/блокировки режима Fast User Switching, путем установки/сброса флажка (Use Fast User Switching). Если этот флажок затенен, как показано на рис. 4.8, откройте окно Свойства папки (Folder Options), перейдите на вкладку Автономные файлы (Offline Files) (рис. 4.9) и сбросьте флажок Использовать автономные файлы (Enable Offline Files). Подтвердите внесенные изменения, а затем снова откройте окно Учетные записи пользователей (User Accounts). Флажок Использовать быстрое переключение пользователей (Use Fast User Switching) теперь станет доступным (рис. 4.10). >

Рис. 4.10. Флажок Использовать быстрое переключение пользователей стал доступным

Если ПК пользуетесь не только вы, но и другие люди, то для каждого из них можно сделать собственную учетную запись. Вы можете настроить «учетку» так, как вам удобно: изменить заставку Рабочего стола, внешний вид папок, Панель задач, установить необходимые именно вам программы и многое другое.

Для любого пользователя создается учетная запись с правами «Администратора» или «Гостя». В первом случае у человека будет больше возможностей. Он сможет открывать некоторые программы, которые будут недоступны другим «юзерам», добавлять и удалять учетные записи.

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

Как добавить новую «Учетную запись»?

Чтобы создать учетную запись для нового пользователя, понадобится зайти в меню «Пуск» и кликнуть по иконке, которая расположена вверху окна. Перейдя по ссылке «Управление другой учетной записью», отметьте пункт, позволяющий создать «учетку».

Откроется страница, на которой вы увидите графу, куда понадобится вписать имя пользователя и указать тип доступа (Администратор или Обычный). Теперь нажмите «Создание учетной записи».

Если вы не хотите, чтобы другие люди, работающие за вашим компьютером, могли удалять программы или изменять важные файлы, то установите «Обычный доступ». Если же человеку полностью доверяете, то можете дать ему права «Администратора».

Потратив всего несколько минут, вы сможете добавить нового пользователя на ваш ПК.

Как в "Виндовс" 7 переключаться между учетными записями?

Итак, если на вашем компьютере каждый пользователь ПК имеет свою «учетку», то необходимо знать, как между ними переключаться. Когда вы запускаете компьютер, появляется возможность выбрать того или иного «юзера», нажав на соответствующую иконку. Но что делать, если операционная система уже загружена? Как в Windows 7 сменить пользователя?

Для того чтобы переключиться с одной учетной записи на другую, можно применить один из способов:

  • Одновременно нажмите кнопки «Ctrl», «alt» и «Delete». Откроется «Начальный экран», где необходимо кликнуть «Сменить пользователя»;
  • Воспользуйтесь «горячими кнопками» - Win+L. На клавише «Win» изображен логотип ОС "Виндовс";
  • Войдите в «Пуск». Возле опции «Завершение работы» кликните по треугольнику, чтобы вызвать Выберите вариант «Сменить пользователя».

Вот так, достаточно просто вы можете переключаться между «учетками» пользователей.

Как сменить Windows 7?

Каждый пользователь ПК может дать своей учетной записи любое имя или изменить уже существующее.

Например, если вы приобрели б/у компьютер, то, скорее всего, захотите поменять имя пользователя. Сделать это можно также, воспользовавшись одним из двух простых способов:

  • Вызовите «Командную строку» и впишите туда «lusrmgr.msc» (без кавычек). Появится окно, где необходимо выбрать подраздел «Пользователи». Справа кликните по тому «юзеру», которого желаете переименовать. В контекстном меню нажмите на соответствующую опцию, а затем кнопку «Enter». Теперь снова нажмите по уже переименованному пользователю ПКМ и перейдите в «Свойства». Вам нужна вкладка «Общие». Здесь еще раз укажите новое имя.
  • Войдите в меню «Пуск» и нажмите на квадратную иконку вверху окна. Перейдите по ссылке «Изменить имя своей учетной записи». Впишите свой вариант и кликните «Переименовать».

Как поменять пароль пользователя?

Вы уже знаете как в Windows 7 сменить пользователя, но что делать, если необходимо изменить пароль? Сделать это можно, нажав кнопки «Ctrl», «Delete» и «Alt». Теперь выберите «Сменить пароль…» и впишите текущий пароль, а потом два раза новый. Последний шаг - подтвердите ваши действия.

Как вариант, можете зайти в «Пуск» и кликнуть по иконке пользователя. В открывшемся окне перейдите по ссылке «Изменение своего пароля». В соответствующие поля впишите действующий и новый пароль два раза.

Теперь вы сможете сменить пароль пользователя Windows 7, тем самым обезопасив себя от кражи ценной информации, которая находится на вашей учетной записи.

Заключение

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

Пользователь сможет настроить внешний вид ОС так, как ему удобно. Например, некоторые люди желают, чтобы «Панель задач» была расположена вверху экрана или сбоку. Одни «юзеры» не любят менять стандартные обои Windows, другие - хотят видеть на Рабочем столе что-то яркое или смешное. Есть возможность любую «Учетную запись» настроить в соответствии со своими предпочтениями, а зная, как в Windows 7 сменить пользователя, все останутся довольны, ведь при необходимости смогут переключиться на свою «учетку».

Гугление выдало:

  • Для переключения сессий используйте функции wtsapi32.dll: WTSEnumerateSessions , WTSConnectSession , WTSDisconnectSession (Сейчас, когда смотрю описание этих функций, оно говорит что работает с удаленными рабочими сессиями, и честно-говоря, я в небольшом недоумении, но у меня работает локально, безупречно).
  • Для хоткеев, используйте функции user32.dll: RegisterHotKey , UnregisterHotKey . Тут все просто.
Сразу оговорюсь, и можете кидать в меня помидорами, но писал я это дело на c#, хотя на плюсах, было бы конечно лучше, нативнее и проч, проч, проч… Но, тогда я только начал осваивать c# и нужен был опыт, а когда решение было написано, переписывать его не было необходимости, хотя перенос его не займет больше одного вечера.

Итак, для начала было написано простое win32 приложение с кнопочкой, по нажатию которой выполнялся примерно такой код:
private void SwitchUser() { IntPtr buffer = IntPtr.Zero; int count = 0; // получаем список сессий, в которых выполнен вход if (WTSEnumerateSessions(WTS_CURRENT_SERVER_HANDLE, 0, 1, ref buffer, ref count)) { WTS_SESSION_INFO sessionInfo = new WTS_SESSION_INFO; // самая сложная часть: // аккуратно преобразовать неуправляемую память в управляемую for (int index = 0; index < count; index++) sessionInfo = (WTS_SESSION_INFO)Marshal.PtrToStructure((IntPtr)((int)buffer + (Marshal.SizeOf(new WTS_SESSION_INFO()) * index)), typeof(WTS_SESSION_INFO)); int activeSessId = -1; int targetSessId = -1; // получаем Id активного, и неактивного сеанса // 0 пропускаем, там всегда "Services" for (int i = 1; i < count; i++) { if (sessionInfo[i].State == WTS_CONNECTSTATE_CLASS.WTSDisconnected) targetSessId = sessionInfo[i].SessionId; else if (sessionInfo[i].State == WTS_CONNECTSTATE_CLASS.WTSActive) activeSessId = sessionInfo[i].SessionId; } if ((activeSessId > 0) && (targetSessId > 0)) { // если есть неактивный сеанс, то переключаемся на него. WTSConnectSession(Convert.ToUInt64(targetSessId), Convert.ToUInt64(activeSessId), "", false); } else { // если неактивных нет. просто отключаемся (переходим на экран выбора пользователя) WTSDisconnectSession(WTS_CURRENT_SERVER_HANDLE, activeSessId, false); } } // обязательно чистим память WTSFreeMemory(buffer); }
При двух сеансах sessionInfo будет иметь 3 элемента: сеанс служб, сеанс 1-го пользователя, сеанс 2-го пользователя. Соответственно targetSessId и activeSessId определятся однозначно. При сеансах более 2, переключение будет происходить между активным и последним неактивным.

Но тут меня постигла небольшая неудача. Некоторые уже могли догадаться, что так дело не пойдет. В момент выполнения WTSConnectSession из приложения, отключение активного пользователя происходит, а вот включение второго пользователя – нет. Т.е. проще говоря, приложение одного пользователя не может инициировать вход другого пользователя. Но это может сделать служба! Да, очень жаль, но без системной службы у нас ничего не получится. Хорошо, создадим системную службу в которую закинем этот код. Вот тут-то и пригодится C# и.Net, так как написать службу на этих технологиях очень и очень просто . Теперь возникает следующая проблема: служба не имеет пользовательского интерфейса, т.е. пользователь не может напрямую повлиять на работу службы, а служба не может услышать действия пользователя. Навесить хоткей на службу нельзя.

Итак, вот наше решение:
Пользовательское приложение слушает пользователя, и при обнаружении хоткея, посылает сигнал системной службе, которая и выполняет переключение.

Осталось совсем немного, но и тут мне найдется что вам показать. Например то, что нам нужно десктопное приложение, без окон, но чтобы оно принимало хоткеи. Это можно сделать так, как делают все: Скрыть главное окно приложения и не показывать. Но есть решение лучше. Написать свой ApplicationContext . С блэк
Например такой:
internal class SUApplicationContext: ApplicationContext { private Hotkey hk; private Form form; private const int SWITCH_USER_COMMAND = 193; internal SUApplicationContext() { // только создаем форму, она все равно нужна // чтобы слушать хоткеи form = new Form(); // создаем глобальный хоткей Win+A hk = new Hotkey(Keys.A, false, false, false, true); // делегируем обработчик события hk.Pressed += delegate { SendSwitchCommand(); }; // регистрируем хоткей, если можем if (hk.GetCanRegister(form)) hk.Register(form); // Вешаем событие на выход Application.ApplicationExit += Application_ApplicationExit; } private void SendSwitchCommand() { // Описываем нашу службу ServiceController sc = new ServiceController("Sus"); try { // посылаем ей команду sc.ExecuteCommand(SWITCH_USER_COMMAND); } catch (Exception ex) { MessageBox.Show(ex.Message); } } void Application_ApplicationExit(object sender, EventArgs e) { // при выходе разрегистрируем хоткей if (hk.Registered) hk.Unregister(); } } static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new SUApplicationContext()); }
Здесь я использую найденный на просторах интернета интерфейс MovablePython.Hotkey над user32.dll функциями RegisterHotKey, UnregisterHotKey.

И пару строк о самой службе.
protected override void OnCustomCommand(int command) { base.OnCustomCommand(command); if (command == SWITCH_USER_COMMAND) { SwitchUser(); } }
Переопределяем событие OnCustomCommand, и при получении нашей команды, выполняем уже известную нам функцию.

Осталось зарегистрировать и запустить службу, и поставить в автозагрузку каждому пользователю приложение.

Все. Теперь после того, как вошел первый пользователь после запуска компьютера и нажал Win+A, его сеанс отключается, и появляется окно выбора пользователя. Входит второй пользователь, нажимает Win+A – появляется сеанс первого пользователя. И т. д.

На github вы можете ознакомиться с исходниками . Либо можете скачать весь проект и скомпилированные и готовые к работе исполняемые файлы.

Гугление выдало:

  • Для переключения сессий используйте функции wtsapi32.dll: WTSEnumerateSessions , WTSConnectSession , WTSDisconnectSession (Сейчас, когда смотрю описание этих функций, оно говорит что работает с удаленными рабочими сессиями, и честно-говоря, я в небольшом недоумении, но у меня работает локально, безупречно).
  • Для хоткеев, используйте функции user32.dll: RegisterHotKey , UnregisterHotKey . Тут все просто.

Сразу оговорюсь, и можете кидать в меня помидорами, но писал я это дело на c#, хотя на плюсах, было бы конечно лучше, нативнее и проч, проч, проч… Но, тогда я только начал осваивать c# и нужен был опыт, а когда решение было написано, переписывать его не было необходимости, хотя перенос его не займет больше одного вечера.

Итак, для начала было написано простое win32 приложение с кнопочкой, по нажатию которой выполнялся примерно такой код:

Private void SwitchUser() { IntPtr buffer = IntPtr.Zero; int count = 0; // получаем список сессий, в которых выполнен вход if (WTSEnumerateSessions(WTS_CURRENT_SERVER_HANDLE, 0, 1, ref buffer, ref count)) { WTS_SESSION_INFO sessionInfo = new WTS_SESSION_INFO; // самая сложная часть: // аккуратно преобразовать неуправляемую память в управляемую for (int index = 0; index < count; index++) sessionInfo = (WTS_SESSION_INFO)Marshal.PtrToStructure((IntPtr)((int)buffer + (Marshal.SizeOf(new WTS_SESSION_INFO()) * index)), typeof(WTS_SESSION_INFO)); int activeSessId = -1; int targetSessId = -1; // получаем Id активного, и неактивного сеанса // 0 пропускаем, там всегда "Services" for (int i = 1; i < count; i++) { if (sessionInfo[i].State == WTS_CONNECTSTATE_CLASS.WTSDisconnected) targetSessId = sessionInfo[i].SessionId; else if (sessionInfo[i].State == WTS_CONNECTSTATE_CLASS.WTSActive) activeSessId = sessionInfo[i].SessionId; } if ((activeSessId > 0) && (targetSessId > 0)) { // если есть неактивный сеанс, то переключаемся на него. WTSConnectSession(Convert.ToUInt64(targetSessId), Convert.ToUInt64(activeSessId), "", false); } else { // если неактивных нет. просто отключаемся (переходим на экран выбора пользователя) WTSDisconnectSession(WTS_CURRENT_SERVER_HANDLE, activeSessId, false); } } // обязательно чистим память WTSFreeMemory(buffer); }

При двух сеансах sessionInfo будет иметь 3 элемента: сеанс служб, сеанс 1-го пользователя, сеанс 2-го пользователя. Соответственно targetSessId и activeSessId определятся однозначно. При сеансах более 2, переключение будет происходить между активным и последним неактивным.

Но тут меня постигла небольшая неудача. Некоторые уже могли догадаться, что так дело не пойдет. В момент выполнения WTSConnectSession из приложения, отключение активного пользователя происходит, а вот включение второго пользователя – нет. Т.е. проще говоря, приложение одного пользователя не может инициировать вход другого пользователя. Но это может сделать служба! Да, очень жаль, но без системной службы у нас ничего не получится. Хорошо, создадим системную службу в которую закинем этот код. Вот тут-то и пригодится C# и.Net, так как написать службу на этих технологиях очень и очень просто . Теперь возникает следующая проблема: служба не имеет пользовательского интерфейса, т.е. пользователь не может напрямую повлиять на работу службы, а служба не может услышать действия пользователя. Навесить хоткей на службу нельзя.

Итак, вот наше решение:
Пользовательское приложение слушает пользователя, и при обнаружении хоткея, посылает сигнал системной службе, которая и выполняет переключение.

Осталось совсем немного, но и тут мне найдется что вам показать. Например то, что нам нужно десктопное приложение, без окон, но чтобы оно принимало хоткеи. Это можно сделать так, как делают все: Скрыть главное окно приложения и не показывать. Но есть решение лучше. Написать свой ApplicationContext . С блэк
Например такой:

Internal class SUApplicationContext: ApplicationContext { private Hotkey hk; private Form form; private const int SWITCH_USER_COMMAND = 193; internal SUApplicationContext() { // только создаем форму, она все равно нужна // чтобы слушать хоткеи form = new Form(); // создаем глобальный хоткей Win+A hk = new Hotkey(Keys.A, false, false, false, true); // делегируем обработчик события hk.Pressed += delegate { SendSwitchCommand(); }; // регистрируем хоткей, если можем if (hk.GetCanRegister(form)) hk.Register(form); // Вешаем событие на выход Application.ApplicationExit += Application_ApplicationExit; } private void SendSwitchCommand() { // Описываем нашу службу ServiceController sc = new ServiceController("Sus"); try { // посылаем ей команду sc.ExecuteCommand(SWITCH_USER_COMMAND); } catch (Exception ex) { MessageBox.Show(ex.Message); } } void Application_ApplicationExit(object sender, EventArgs e) { // при выходе разрегистрируем хоткей if (hk.Registered) hk.Unregister(); } } static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new SUApplicationContext()); }

Здесь я использую найденный на просторах интернета интерфейс MovablePython.Hotkey над user32.dll функциями RegisterHotKey, UnregisterHotKey.

И пару строк о самой службе.

Protected override void OnCustomCommand(int command) { base.OnCustomCommand(command); if (command == SWITCH_USER_COMMAND) { SwitchUser(); } }

Переопределяем событие OnCustomCommand, и при получении нашей команды, выполняем уже известную нам функцию.

Осталось зарегистрировать и запустить службу, и поставить в автозагрузку каждому пользователю приложение.

Все. Теперь после того, как вошел первый пользователь после запуска компьютера и нажал Win+A, его сеанс отключается, и появляется окно выбора пользователя. Входит второй пользователь, нажимает Win+A – появляется сеанс первого пользователя. И т. д.

На github вы можете ознакомиться с исходниками . Либо можете скачать весь проект и скомпилированные и готовые к работе исполняемые файлы.


Нажимая кнопку, вы соглашаетесь с политикой конфиденциальности и правилами сайта, изложенными в пользовательском соглашении