窗口当次强制置顶

在实际开发中,可能需要当次把窗口置顶。使用BringWindowToTop发现效果不是很理想,有时候不能置顶。

BOOL ForceForegroundWindow(HWND hWnd)
{
	if (!hWnd || !::IsWindow(hWnd))
		return FALSE;

	HWND hWndCurrentWindow = ::GetForegroundWindow();
	if (hWndCurrentWindow == NULL)
	{
		return ::SetForegroundWindow(hWnd);
	}

	DWORD dwCurProcId, dwCurThreadId = ::GetWindowThreadProcessId(hWndCurrentWindow, &dwCurProcId);
	DWORD dwHWndProcId;
	::GetWindowThreadProcessId(hWnd, &dwHWndProcId);

	BOOL bReturn = FALSE;

	if (dwHWndProcId == dwCurProcId)
	{
		bReturn = ::SetForegroundWindow(hWnd);
	}
	else
	{
		DWORD dwMyThreadId = ::GetCurrentThreadId();

		if (::AttachThreadInput(dwMyThreadId, dwCurThreadId, TRUE))
		{
			bReturn = ::SetForegroundWindow(hWnd);
			::AttachThreadInput(dwMyThreadId, dwCurThreadId, FALSE);
		}
		else
		{
			bReturn = ::SetForegroundWindow(hWnd);
		}
	}

	return bReturn;
}
发布了124 篇原创文章 · 获赞 28 · 访问量 10万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览