启用UIAccess
时,有几个关于拖放无效的问题。有些提供了使用ChangeWindowMessageFilter
或ChangeWindowMessageFilterEx
和WM_DROPFILES
的部分解决方案。但是,这不适用于wpf
个应用程序。
有什么想法吗?
答案 0 :(得分:1)
通常情况下启用了UIAccess
启用的应用High Integrity
- 这就是阻止拖放工作的原因。
我尝试将应用程序本身内的完整性级别更改为中级,但这没有任何影响。
对于寻求解决方案的其他人来说,这就是我想出来的。在其他UIAccess
启用的流程中,您可以使用CreateProcessAsUser
启动流程....以下是代码
HANDLE hToken;
HANDLE hTokenDup;
DWORD dwUIAccess = 1;
OpenProcessToken(GetCurrentProcess(), TOKEN_DUPLICATE, &hToken);
DuplicateTokenEx(hToken, MAXIMUM_ALLOWED, NULL, SecurityIdentification, TokenPrimary, &hTokenDup);
// enable UIAccess
SetTokenInformation(hTokenDup, TokenUIAccess, &dwUIAccess, sizeof(dwUIAccess));
// medium integrity sig
ConvertStringSidToSid(L"S-1-16-8192", &pSid);
TOKEN_MANDATORY_LABEL tml = { 0 };
tml.Label.Attributes = SE_GROUP_INTEGRITY;
tml.Label.Sid = pSid;
// set medium integrity
SetTokenInformation(hTokenDup, TokenIntegrityLevel, &tml, sizeof(tml) + GetLengthSid(pSid));
FreeSid(pSid);
CreateProcessAsUser(hTokenDup, pathToExe, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)
希望这会有所帮助......