フォーカスを表示したいWindowsシェルエクステンション(簡単なコンテキストメニュー)からWPFアプリケーションを起動しました。C#シェルエクステンションから起動されたC#UIアプリケーションにフォーカスを移す
は、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#ウィンドウがフォーカスに設定されています。
よろしく、
最後に、私はこのリンクに従いますhttps://www.roelvanlisdonk.nl/2014/09/05/reliable-bring-external-process-window-to-foreground-without-c/そしてそれは動作します! – Henry