【发布时间】:2016-11-18 13:14:51
【问题描述】:
我有一个从 Windows Shell 扩展(一个简单的上下文菜单)启动的 WPF 应用程序,我想显示它的焦点。
UI 应用程序在从命令行启动时显示为焦点并处于活动状态,但是当我使用 windows 功能 CreateProcessAsUserW 并从上下文菜单启动它时显示没有焦点。在以下代码中创建流程时缺少一些参数配置?
bool launchProcessAsCurrentUser(HANDLE token, const std::wstring& command)
{
bool result = false;
void* environment = nullptr;
PROCESS_INFORMATION processInfo{ 0 };
STARTUPINFOW startupInfo { 0 };
ZeroMemory(&startupInfo, sizeof(startupInfo));
startupInfo.cb = sizeof(startupInfo);
const bool impersonateUser = ImpersonateLoggedOnUser(token);
if (impersonateUser && CreateEnvironmentBlock(&environment, token, FALSE))
{
SECURITY_ATTRIBUTES secA{ 0 };
SECURITY_ATTRIBUTES secB{ 0 };
result = CreateProcessAsUserW(token,
0,
const_cast<LPWSTR>(command.c_str()),
&secA,
&secB,
FALSE, CREATE_NO_WINDOW | NORMAL_PRIORITY_CLASS | CREATE_UNICODE_ENVIRONMENT,
environment,
0,
&startupInfo,
&processInfo);
DestroyEnvironmentBlock(environment);
}
else
{
//Log error
}
if (impersonateUser)
{
RevertToSelf();
}
return result;
}
注意: C# 窗口在显示之前设置为焦点。
最好的问候,
【问题讨论】:
-
最后,我点击了这个链接roelvanlisdonk.nl/2014/09/05/…,它成功了!