窗口的最前端显示
来源:互联网 发布:卖家中心登陆淘宝网 编辑:程序博客网 时间:2024/04/30 13:09
需求:窗口最前端显示,窗口保持激活状态
但是用过很多方法都不可以
类似API:SetWindowPos(),ActivateTopParent()等等总是出现问题,后来codeobject找到了解决的方法,在这里分享一下
2种方式
1,类似Alt+Tab键切换窗口(因为是模拟按键,貌似会遗留下按键状态的异常,不过可以解决)
void SetForegroundWindowInternal(HWND hWnd)
{
if(!::IsWindow(hWnd)) return;
BYTE keyState[256] = {0};
//to unlock SetForegroundWindow we need to imitate Alt pressing
if(::GetKeyboardState((LPBYTE)&keyState))
{
if(!(keyState[VK_MENU] & 0x80))
{
::keybd_event(VK_MENU, 0, KEYEVENTF_EXTENDEDKEY | 0, 0);
}
}
::SetForegroundWindow(hWnd);
if(::GetKeyboardState((LPBYTE)&keyState))
{
if(!(keyState[VK_MENU] & 0x80))
{
::keybd_event(VK_MENU, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
}
}
}
2
原文:http://www.codeproject.com/Tips/76427/How-to-bring-window-to-top-with-SetForegroundWindo.aspxvoid SetForegroundWindowInternal(HWND hWnd)
{
if(!::IsWindow(hWnd)) return;
//relation time of SetForegroundWindow lock
DWORD lockTimeOut = 0;
HWND hCurrWnd = ::GetForegroundWindow();
DWORD dwThisTID = ::GetCurrentThreadId(),
dwCurrTID = ::GetWindowThreadProcessId(hCurrWnd,0);
//we need to bypass some limitations from Microsoft :)
if(dwThisTID != dwCurrTID)
{
::AttachThreadInput(dwThisTID, dwCurrTID, TRUE);
::SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT,0,&lockTimeOut,0);
::SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT,0,0,SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE);
::AllowSetForegroundWindow(ASFW_ANY);
}
::SetForegroundWindow(hWnd);
if(dwThisTID != dwCurrTID)
{
::SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT,0,(PVOID)lockTimeOut,SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE);
::AttachThreadInput(dwThisTID, dwCurrTID, FALSE);
}
}
- 窗口的最前端显示
- MFC 窗口最前端显示
- MFC让窗口最前端显示
- delphi中让窗口最前端显示
- 判断最前端的窗口
- 如何用AHK脚本,把当前窗口最前端显示?有时候查看的时候方便
- NSIS如何让安装程序的窗口置顶?(显示在最前端)
- GetForegroundWindow获取系统最前端的窗口
- mfc 窗口最前端显示 及 最大化 最小化
- WIN7 活动窗口不能显示到最前端
- win7活动窗口不能显示到最前端
- C#窗口前端显示
- win32窗口前端显示
- MFC窗口前端显示
- mfc窗口置于最前端
- 将window.open打开的窗口保持在最前端
- WPF 窗体显示最前端
- 002最前端显示窗体
- java 实现下载
- [故事]穆罕默德•尤努斯:赶走贫困的人(附一:《穷人的银行家》题记 赤贫沙漠上的清泉——译序)
- 按键精灵--VS挤房器_Fly_v2.5版
- 算法导论 MIT视频教程
- 什么时候应该使用Web Service
- 窗口的最前端显示
- poj1679——The Unique MST
- 系统(C)盘总文件大小与占用空间不符的解决办法
- linux下测试RTC驱动date和hwclock
- 关于程序输出音标及个别音节显示乱码的问题
- 我偏要用360浏览器来看我的QQ空间, 腾讯能拿我咋的?
- 什么样的文件应该放入项目仓库里
- Common Techniques to Improve Shadow Depth Maps
- .NET 4.0新功能介绍:In Process Side By Side