7

Когда MacOS загружается и пользователям предлагается выбрать учетную запись (и), в которые он хочет войти, пользователи могут либо щелкнуть мышью по имени / значку учетной записи, либо просто ввести имя учетной записи.

Я хочу сделать то же самое на экране входа в Windows7: появляется экран входа в систему, я начинаю вводить имя своей учетной записи, я выбираю учетную запись с помощью ввода, а затем я набираю пароль и ввожу снова. Не используется мышь.

(Я знаю о циклическом переключении и трудно следить за почти невидимым маркером того, где фокус находится прямо сейчас)

3 ответа3

9

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

В статье « Создание пользовательского опыта входа в систему с поставщиками учетных данных для Windows Vista» объясняются основы перехода Microsoft от более ранней модели GINA. Он разрабатывает образец, который демонстрирует новые функции через гибридного поставщика учетных данных, который позволяет сохранять имя пользователя, пароль и имя домена на смарт-карте, так что после вставки карты пользователь автоматически входит в систему.

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

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

8

Подумав об этом еще раз, есть гораздо более простые способы сделать это:

  1. Вариант 1 (подтверждено): старый добрый трюк, позволяющий запустить программу на экране входа в систему. :-)

    1. Возьмите в собственность и замените % WINDIR%\System32\osk.exe программой, начиная с шага 4.

    2. Зайдите в Ease of Access Center, используйте компьютер без мыши или клавиатуры.

    3. Включить использование экранной клавиатуры.

    4. Сохраните и вернитесь, с левой стороны нажмите Изменить административные настройки.

    5. Нажмите, чтобы применить настройки к рабочему столу входа и сохранить.

  2. Вариант второй (Должен работать): Сервисы всегда запускаются, поэтому они могут запускать программы на экране входа в систему.

    1. Напишите сервис C / C #, который запускается рано, возможно, установите его тип запуска для загрузки в реестре.

    2. Пусть служба обнаруживает C / C # при запуске winlogon.exe, после чего запускает нашу программу.

  3. Вариант третий (кажется, не работает): Планировщик заданий предоставляет опции для него, я попытался запустить на основе "Запуск" и "Событие Winlogon WGA", но оба не удалось, возможно, мне нужно установить другого пользователя чем "Система" для этого, чтобы работать ... Альтернатива: Winlogon Notification DLL

  4. Это позволяет нам запускать собственную письменную программу на экране входа в систему!

    • Используя SetWindowsHookEx, вы можете создать хук WH_KEYBOARD для обработки ввода.

      • Альтернатива: создать окно с графическим интерфейсом и дать этому окну фокус.
      • Альтернатива 2: если вы скрываете пользователей, вы можете отслеживать поле имени пользователя, см. AutoItX ниже.
         
    • Используя WMI, вы можете перечислить всех локальных пользователей.

    • Вызов функций AutoItX позволяет манипулировать экраном входа Windows из вашего приложения. Это также позволит нам определить, находимся ли мы на экране входа в систему, проверив, работает ли проводник.

      AutoItWindow показывает, что на экране: Class: AUTHUI.DLL: LogonUI Logon Window и поле пароля называется Edit1 , так что вы можете фактически прочитать напечатанные данные.

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

    Я бы предложил C++ (Native) или C # (PInvokes для вызовов API, простой WMI), но может подойти любой язык ...

  5. Альтернатива:

Я думаю, что было бы возможно использовать только скомпилированный скрипт AutoIt для выполнения этой задачи, так как вы можете отслеживать и манипулировать полем имени пользователя, а также перечислять WMI, и это единственное, что вам нужно, чтобы это работало. Возможно, вам нужно отключить функцию иконки в трее ...

Вы можете использовать AutoIt Window Info (поместите его как osk.exe), чтобы увидеть имена классов на экране входа в систему.

0

Windows Vista и Windows 7 делают это из коробки (вроде) для входа в домен.

Это работает только в тех выпусках Windows, которые поддерживают присоединение к домену. Возможно, вам удастся создать сценарий, который сделает это для вас в других выпусках - дайте мне знать, и я посмотрю на него.

Запустите Group Policy Editor (Start > Run > gpedit.msc).

Найдите Computer Config \ Windows Settings \ Параметры Security Settings \ Local Policies \ Security Options \ Interactive logon: Do not display last user name и установите для него Enabled

При следующем входе в систему вы сможете ввести желаемое имя пользователя.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .