【发布时间】:2017-05-02 08:36:00
【问题描述】:
我创建了一个将键盘输入发送到cmd.exe 的应用程序。
这在以普通用户身份运行 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 后通过屏幕键盘发送输入?
-
@DavidHeffernan 我认为您不应该删除您的答案-通常几乎完全是这样。 uiAccess 令牌是一种深奥的解决方法,在很多情况下正确实施是相当不切实际的。
-
@m.m osk.exe 已签名。
标签: windows delphi cmd admin uipi