我们正在编写一个仅运行的远程桌面应用程序,该应用程序使用SendInput进行键盘(和鼠标)交互。但是,它无法与UAC提示进行交互。
我们的应用程序为此需要什么权限?
背景信息:该应用程序是由另一个复制winlogon.exe的访问令牌的进程生成的。这样可以在具有系统完整性级别的SYSTEM帐户下运行,并附加到物理控制台会话,并且具有与winlogon.exe(https://docs.microsoft.com/en-us/windows/desktop/secauthz/privilege-constants)相同的SE特权,尽管并未全部启用。
var fetched_data = [];
function getData() {
$.ajax({
type: "GET",
url: "http://localhost:5000/renderheatmap",
dataType: 'json'
}).done(function(jsonData) {
for (var i = 0; i < jsonData.length; i++) {
fetched_data.push(jsonData[i])
}
// document.getElementById('test_div').innerHTML = fetched_data;
// final_data = new Array(fetched_data);
Highcharts.chart('yourid', {
series: [{
name: 'Sales per employee',
borderWidth: 1,
data: fetched_data,
dataLabels: {
enabled: true,
color: '#000000'
}
}]
});
});
}
答案 0 :(得分:2)
SendInput
(例如SendMessage和PostMessage)仅限于在与目标进程相同的登录会话和同一桌面内的进程之间工作。 UAC提示显示在Winlogon's Secure Desktop(winsta0\Winlogon
)中,因此您需要使用OpenInputDesktop()
定期轮询当前桌面,然后使用SetThreadDesktop()
启用当前线程将消息发送到用户的桌面/安全桌面,以活动状态为准。
对于UAC,您需要像以前一样在系统帐户下运行流程,以遵守UIPI Integrity Level check。
See also: How to switch a process between default desktop and Winlogon desktop?
答案 1 :(得分:0)
可以授权您的应用程序执行这些UIAutomation /屏幕阅读器任务。
在程序集清单中创建一个条目,其中包括:
uiAccess="true"
然后,您必须使用有效的数字证书进行数字签名。
并且您必须安装在Program Files
中。
能够自动执行UAC对话框是一项严肃的工作;而且您不会无所适从。