ウィンドウを最背面に移動する

ウィンドウを最背面に移動させるには、下記のようなコードで実現できます。

SetWindowPos(hWnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);

裏で実行させておきたいけど、最小化はさせたくない場合に使えます。
最背面に移動させるだけで、タイトルバーのクリックで前面へ持ってくることは可能です。

そうではなく、常に最背面においておきたい場合は、下記のようなコードで実現が可能なようです。

SetParent(hWnd, FindWindow(TEXT("Progman"),TEXT("Program Manager")));

ただ上記のコードで常に最背面に設定すると、タイトルバーが下記のように DWM が外れてしまったような感じになります。

ただ、ウィンドウを最背面に移動しても、最背面に移動したウィンドウがアクティブのままとなります。デスクトップの最前面に表示されているウィンドウをアクティブにするには、下記のようなコードで実現できそうです。

BOOL SetForegroundWindowActive()
{
	HWND hDesktop = GetDesktopWindow();
	if (hDesktop)
	{
		HWND hWindow = GetTopWindow(hDesktop);
		if (hWindow)
		{
			do
			{
				TCHAR szClassName[256];
				GetClassName(hWindow, szClassName, _countof(szClassName));
				if (IsWindowVisible(hWindow) && lstrcmpi(szClassName, TEXT("Shell_TrayWnd")) != 0)
				{
					SetForegroundWindow(hWindow);
					return TRUE;
				}
			} while ((hWindow = GetNextWindow(hWindow, GW_HWNDNEXT)) != NULL);
		}
	}
	return FALSE;
}

クラス名を見てタスクバーであれば除外したりしています。試行錯誤があるので、もっと良い方法があるかもしれません。


スポンサーリンク
広告1
広告1

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
広告1