整理一些将窗口显示在前台办法

windows下简单的调用Setforegroundwindow有时候并不能将窗口置最前,不妨试试以下办法。

1、先置topmost,然后取消
 SetWindowPos(HWND_TOPMOST,
0, 0, 0, 0, SWP_NOSIZE |
SWP_NOMOVE);
 SetWindowPos(HWND_NOTOPMOST, 0, 0, 0, 0,
SWP_NOSIZE | SWP_NOMOVE);

2、改变系统环境参数

这些定义winuser.h里都有的
#define SPI_GETFOREGROUNDLOCKTIMEOUT 0x2000
#define SPI_SETFOREGROUNDLOCKTIMEOUT 0x2001
#define SPIF_UPDATEINIFILE 0x0001
#define SPIF_SENDWININICHANGE 0x0002

先设置环境变量
DWORD lockTime = 0;

SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, &lockTime, 0);

SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, 0,

                    
SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE);

退出程序时还原环境变量

SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, lockTime,
SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE);
3、AllowSetForegroundWindow
 HMODULE hModule = NULL;
ASFW_PTR pProcAddress = NULL;

hModule = GetModuleHandle("User32");
 if (hModule != NULL)
pProcAddress = (ASFW_PTR)GetProcAddress(hModule, "AllowSetForegroundWindow");

if (pProcAddress != NULL)
{
nResult = (*pProcAddress)(-1);
  if (nResult == FALSE )
MessageBox(NULL, "Could not set foreground permission", NULL, MB_OK | MB_ICONERROR);
}
 4、使用AttachThreadInput

AttachThreadInput这个函数可以使两个线程的输入队列共享。 如果我们把当前的焦点的输入队列跟我们要显示的窗口的输入队列共享,我们就可以让我们的窗口SetForegroundWindow 成功,然后成功 获得焦点,显示在前台。

//捕捉并设置当前焦点窗口为我们的窗口
AttachThreadInput(
GetWindowThreadProcessId(

::GetForegroundWindow(),NULL),
GetCurrentThreadId(),TRUE);

SetForegroundWindow();
SetFocus();

//释放thread
AttachThreadInput(
GetWindowThreadProcessId(

::GetForegroundWindow(),NULL),
GetCurrentThreadId(),FALSE);

//代码2

HWND hWnd = ::FindWindow(_T("#32770"),_T(“test”));

if(hWnd)
{
HWND hForeWnd =
::GetForegroundWindow();
DWORD dwForeID =
::GetWindowThreadProcessId(hForeWnd,NULL);
DWORD dwCurID =
::GetCurrentThreadId();

::AttachThreadInput(dwCurID,dwForeID,TRUE);

::ShowWindow(hWnd,SW_SHOWNORMAL);

::SetWindowPos(hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE);

::SetWindowPos(hWnd,HWND_NOTOPMOST,0,0,0,0, SWP_NOSIZE|SWP_NOMOVE);

::SetForegroundWindow(hWnd);

::AttachThreadInput(dwCurID,dwForeID,FALSE);
return 0;

}

整理一些将窗口显示在前台办法,布布扣,bubuko.com

时间: 2024-10-23 12:23:50

整理一些将窗口显示在前台办法的相关文章

MySQL客户端输出窗口显示中文乱码问题解决办法

转载:http://www.cnblogs.com/xdp-gacl/p/4008095.html 只为成功找方法,不为失败找借口! MySQL客户端输出窗口显示中文乱码问题解决办法 最近发现,在MySQL的dos客户端输出窗口中查询表中的数据时,表中的中文数据都显示成乱码,如下图所示: 上网查了一下原因:之所以会显示乱码,就是因为MySQL客户端输出窗口显示中文时使用的字符编码不对造成的,可以使用如下的命令查看输出窗口使用的字符编码 1 show variables like 'char%';

【Windows10】运行软件后,窗口不显示的解决办法

摘要: Windows10偶尔出现运行软件后,窗口不显示(但是已经运行,任务栏有图标),或者运行中突然出现只剩下右上角的"最小化.最大化和关闭键"的小窗口. 1. 后者可以先最大化,然后拖动整个窗口,调整大小解决. 2. 前者打开软件窗口不显示的解决办法: 鼠标放在任务栏,出现该程序的预览窗口,然后左键单击,再按Alt+空格,会在桌面左上角显示还原.移动.最小化.最大化.关闭等的菜单列表窗口,且最小化.最大化.关闭是可选状态. 然后点击最大化,然后操作同上,拖动即可. 参考 1.WIN

Android应用Activity、Dialog、PopWindow窗口显示机制及源码分析

[工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处,尊重劳动成果] 1 背景 之所以写这一篇博客的原因是因为之前有写过一篇<Android应用setContentView与LayoutInflater加载解析机制源码分析>,然后有人在文章下面评论和微博私信中问我关于Android应用Dialog.PopWindow.Toast加载显示机制是咋回事,所以我就写一篇文章来分析分析吧(本文以Android5.1.1 (API 22)源码为基础分析),以便大家在应

ecshop验证码图片无法显示终极解决办法

ecshop验证码图片无法显示终极解决办法 ECSHOP教程/ ecshop教程网(www.ecshop119.com) 2014-06-06 客户在安装好ecshop之后所有前台的证码不显示,后台可以显示,ECSHOP开发中心总结了解决办法分享给各位朋友. 可以在后台有,前台不显示 打开includes/init.php文件,将如下这段代码屏蔽即可. /* 判断是否支持 Gzip 模式 */if (!defined(‘INIT_NO_SMARTY’) && gzip_enabled())

MFC中关闭窗口的几种办法+MFC中MessageBox的用法

MFC中关闭窗口的几种办法: 退出程序用AfxGetMainWnd()->SendMessage(WM_CLOSE); 关闭当前窗口用DestroyWindow( ); 关闭模式对话框用EndDialog(0); MFC中MessageBox的用法 消息框是个很常用的控件,属性比较多,本文列出了它的一些常用方法,及指出了它的一些应用场合.1.MessageBox("这是一个最简单的消息框!");2.MessageBox("这是一个有标题的消息框!","

session过期情况下弹出窗口显示2个登陆页面的问题处理

根据多年的web开发经验,一般当session过期之后,当用户点击任何一个按钮之类的,都是自动跳转到登陆页面,这个在网上有很多过滤器,拦截器实现. 那么在使用类似jquery easy ui的时候,如果页面有一些弹出窗口,是在弹出了窗口再去加载地址拉数据出来的,就会出现父页面跳到登陆页面,弹出页面也跳到登陆页面. 如何解决这个问题呢,我的办法如下: 首先,在过滤器中如果是session过期的话,自动跳到登陆页面,并且带上一个固定参数,在页面index.jsp中获取这个参数,如果存在. 其实就是在

关于网页中图片为中文名无法显示的解决办法

转载:http://lofei117.iteye.com/blog/1074182 网页中很多时候要用到图片,通过img标签或者滤镜来显示在页面上.而当文件名为中文名时会遇到图片无法正确加载,导致无法显示. 解决办法如下: 1:改变服务器的配置,使服务器支持utf-8来显示图片.这个经过测试是有效的,但是有一点是服务器配置修改了以后,再使用request来获取参数时,中文乱码的问题.通过System.out.print来打印出来的参数是正确的,但是赋值给String对象后却不是正确的值,再通过S

QApplication::alert 如果窗口不是活动窗口,则会向窗口显示一个警告(非常好用,效果就和TeamViewer一样)

void QApplication::alert(QWidget * widget, int msec = 0)如果窗口不是活动窗口,则会向窗口显示一个警告.警报会显示msec 毫秒.如果毫秒为零,闪烁一段时间后会停止,任务栏图标会一直亮着.widget.h #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QTimer> #include <QTime> namespace Ui { clas

Android 应用程序窗口显示状态操作(requestWindowFeature()的应用)

 我们在开发程序是常常会须要软件全屏显示.自己定义标题(使用button等控件)和其它的需求,今天这一讲就是怎样控制Android应用程序的窗口显示. 首先介绍一个重要方法那就是requestWindowFeature(featrueId),它的功能是启用窗口的扩展特性. 參数是Window类中定义的常量. 一.枚举常量 1.DEFAULT_FEATURES:系统默认状态.一般不须要指定 2.FEATURE_CONTEXT_MENU:启用ContextMenu,默认该项已启用,一般无需指定