Я создал приложение, которое посылает ввод с клавиатуры на cmd.exe
. Это работает при запуске cmd
как обычный пользователь, но не выполняется, когда cmd
запускается как администратор.Как отправить ввод в cmd, когда cmd запущен как администратор?
Это мой код:
Var
Wnd:hwnd;
begin
wnd:=FindWindow('ConsoleWindowClass',0);
if wnd <> 0 then
begin
setforegroundWindow(wnd);
keybd_event(Ord('A'),0,0,0);
end;
end;
Обратите внимание, что ConsoleWindowClass
это имя класса cmd
.
Как я могу отправить ввод cmd
, когда cmd
работает под управлением?
Скорее всего, вы не можете получить доступ к окну, потому что программа, из которой вы работаете, не имеет привилегий для этого. В конце концов, он запускается как администратор, и вы не можете получить доступ к тем процессам, которые не входят в ваш набор привилегий. –
Комментарий от удаленного ответа: * Вы можете включить UIAccess = true в запрошенные разрешения манифеста приложения - с оговорками. Это позволяет обходить UIPI для не-повышенных приложений, но приложение, о котором идет речь, должно быть аутентифицировано и должно быть выполнено из защищенного каталога (например,% programfiles% и т. Д.). Однако, удовлетворив это, приложение может быть установлено с помощью установщика с повышенными правами, но после этого может выполняться с разрешениями пользователя, сохраняя при этом разрешение на отправку ввода в приложения с повышенными правами. * –
Спасибо. Ваше право, но мы можем отправить ввод с помощью экранной клавиатуры после запуска cmd в качестве администратора? –