掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ShellExecuteで実行するとウィンドウが後ろに下がってしまいます (ID:71880)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
ウィンドウ画面を表示 --> A ファイルをShellExecuteExで起動 --> B AからBを起動してBを閉じるとAの上に別のウィンドウが来てる、 ということですか? > 理想はそのファイルが閉じたら、ボタンを押したウィンドウがアクティブに > なることです。 もし、自分とは別プロセスのウィンドウがアクティブになってしまっている 場合には、以下のようにするとうまくいくと思います。 SHELLEXECUTEINFO info; ZeroMemory(&info, sizeof(SHELLEXECUTEINFO)); info.cbSize = sizeof(SHELLEXECUTEINFO); info.fMask = SEE_MASK_NOCLOSEPROCESS; info.hwnd = GetSafeHwnd(); // 適当なウィンドウを指定します info.lpFile = szFileName; info.lpVerb = L"open"; info.nShow = SW_SHOW; bRet = ShellExecuteEx(&info); if (bRet) { // 起動したファイルの終了を待つ WaitForSingleObject(info.hProcess, INFINITE); CloseHandle(info.hProcess); // 自分が自分をアクティブにする SetForegroundWindowEx(hWnd); // <-- アクティブにしたいウィンドウを指定 } // サポート用の関数 void SetForegroundWindowEx(HWND hWnd) { int nTargetID, nForegroundID; DWORD sp_time; nForegroundID = GetWindowThreadProcessId(GetForegroundWindow(), NULL); nTargetID = GetWindowThreadProcessId(hWnd, NULL); AttachThreadInput(nTargetID, nForegroundID, TRUE); SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, &sp_time, 0); SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, (LPVOID) 0, 0); SetForegroundWindow(hWnd); SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, (LPVOID) sp_time, 0); AttachThreadInput(nTargetID, nForegroundID, FALSE); }
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.