Как отправить входы в Winlogon в C#

Как я могу поменять рабочие столы? Я заинтересован в отправке событий мыши на рабочий стол winlogon (я буду запускать приложение под системной учетной записью). Дело в том, что ничего не происходит, когда я вызываю mouse_event(или любую другую функцию (keybd_event,sendinput,sendkeys и т. Д.). Ничего не происходит, даже если я все еще на рабочем столе по умолчанию. Setthreaddesktop возвращает true, так что это означает, что изменение завершилось успешно. Я даже пытался поставить сообщение с тем же результатом.

Я создал новый поток, потому что в противном случае setthreaddesktop возвращает код ошибки 170 (ресурс используется).

      bool dd = false;
      StringBuilder name = new StringBuilder(200, 200);

       uint sss = 0;
      IntPtr hDesktop = OpenInputDesktop(1, true, desktop_ReadObjects | desktop_WriteObjects);

      System.Threading.Tasks.Task.Factory.StartNew(() =>
        {   dd = SetThreadDesktop(hDesktop);
            CloseDesktop(hDesktop);
            bool get = GetUserObjectInformation(hDesktop, 2, name, 100, ref sss);
                SendKeys.Send("X");
            mouse_event(MOUSEEVENTF_LEFTDOWN, 400, 400, 0, 0);
            mouse_event(MOUSEEVENTF_LEFTUP, 400, 400, 0, 0);
            mouse_event(MOUSEEVENTF_RIGHTDOWN, 400, 400, 0, 0);
            mouse_event(MOUSEEVENTF_RIGHTUP, 400, 400, 0, 0);
}).Wait();

Редактировать: если я не использую SetThreadDesktop, mouse_event работает

Спасибо,

1 ответ

Рабочий стол для входа в Windows защищен и требует специальных разрешений для запуска процессов и циклов сообщений.

Если вы работаете в SYSTEM, вы можете продублировать свой собственный токен безопасности и изменить SessionId с помощью SetTokenInformation, чтобы создать новый процесс (используя CreateProcessAsUser) на рабочем столе WinSta0\Winlogon целевого пользовательского сеанса.

Кроме того, вы можете дублировать маркер безопасности другого процесса, выполняющегося как SYSTEM, в сеансе целевого пользователя, такого как winlogon.exe и lsass.exe. См.: Запуск процесса на экране приветствия Windows 7

В любом случае, вы будете делать много вызовов Win32 для выполнения этой задачи.

Другие вопросы по тегам