В основном происходит то, что Windows переключается на защищенный рабочий стол, делает его текущим, поэтому с ним теперь связан ввод данных.
Старый рабочий стол остается там, где он был: все HWND на рабочем столевсе еще там, и любой поток, подключенный к этому рабочему столу, может получить доступ к этим HWND, узнать их местоположение и так далее.Вы все еще можете отправлять сообщения в окна на этом рабочем столе, если поток, отправляющий сообщение, также находится на этом рабочем столе.
Однако, поскольку рабочий стол теперь неактивен, он не может получать ввод.GetForegroundWindow вернет NULL (IIRC), и вы больше не можете использовать SendInput, так как ввод теперь принадлежит [потоку] на другом рабочем столе;никакие элементы управления на этом неактивном рабочем столе не могут получить фокус.
Обратите внимание, что отправка сообщений о нажатии клавиш элементу управления, который не имеет фокуса, может иногда вызывать непредвиденное поведение, поскольку приложение или элемент управления обычно не ожидают получения ввода с клавиатуры без предварительной фокусировки.(Это может быть проблематично для элементов управления, которые устанавливают некоторый входной контекст в WM_SETFOCUS и очищают его, например, в WM_KILLFOCUS.)
Короче говоря, пользовательский интерфейс все еще существует: вы можете выполнять определенные запросы к нему, но вы больше не можете автоматизировать его, как на обычном рабочем столе, отправляя ввод, и некоторые другие функции, связанные с фокусом или вводом, могут не работать.
Я не очень знаком с AutoHotKey, но названиеи описание функциональности предполагает, что он сильно зависит от базового Win32 SendInput API.Это не работает вообще для ввода с клавиатуры, когда рабочий стол неактивен.
Чтобы получить достаточный обзор работы рабочих столов и их связи с рабочими станциями, заблокированным рабочим столом и т. Д., Ознакомьтесь с Настольная статья на MSDN .
Одна проблема, с которой я сталкивался в прошлом с настольными компьютерами и автоматизацией, заключается в следующем: как оставить длительный тест, использующий некоторую форму автоматизации пользовательского ввода (мышь, симуляция клавиатуры), но все еще блокирую мой компьютер, чтобы кто-то не мог просто пройти и помешать емуПосле блокировки ПК рабочий стол становится неактивным, и автоматизация перестает работать.Аналогичная проблема возникает, если включается заставка: рабочий стол переключается, и автоматизация не срабатывает.
Одно из решений состоит в том, чтобы использовать два ПК: назовем их Main и Test: из Main откройте клиент служб удаленного терминала натестовый компьютер, а затем запустите автоматический тест на тестовом компьютере, но из окна клиента служб терминалов на главном компьютере.Теперь классная часть: вы можете минимизировать это окно TSC или даже заблокировать основной компьютер (или позволить скринсейверу включиться), и этот виртуальный сеанс будет продолжать работать, думая, что он все еще активен - просто никто его не платитвнимание.Это один из способов создания «подключенного» сеанса с активным рабочим столом, но тот, которому никто не может помешать, поскольку он защищен за заблокированным рабочим столом основного компьютера.