http://hi.baidu.com/gookings/item/2b7912ca8d5b3625a0b50aa2

SetForegroundWindow  函数功能:该函数将创建指定窗口的线程设置到前台,并且激活该窗口。键盘输入转向该窗口,并为用户改各种可视的记号。系统给创建前台窗口的线程分配的权限稍高于其他线程。
  函数原型:BOOL SetForegroundWindow()
  SetForegroundWindow()函数本身是不带参数的,具体激活某个窗口的方法可以用:
  pWnd->SetForegroundWindow();//这里的pWnd即所要激活窗口的句柄。
  返回值:如果窗口设入了前台,返回值为非零;如果窗口未被设入前台,返回值为零。
  备注:前台窗口是z序顶部的窗口,是用户的工作窗口。在一个多任务优先抢占环境中,应让用户控制前台窗口。
  Windows NT 5.0:当用户在另一个窗口中工作时,应用程序不能强行设置一个窗口到前台。相反,SetForeground函数将会激活窗口并且调用FlashWindowEx函数通知用户。
  Windows CE:拥有窗口的线程不具有优先启动权。

  速查:Windows NT;3.1以上版本;Windows;95以上版本;Windows CE:1.0以上版本;头文件:winuser.h;库文件:user32.lib。

SetWindowPlacement  函数功能:该函数设置指定窗口的显示状态和恢复,最大化,最小化位置。
  函及原型;BOOL SetWindowPlacement(HWND hWnd,CONST WINDOWPLACEMENT★lpwndpl);
  参数:
  hWnd:窗口句柄。
  lpwndpl:指向一个WINDOWPLACEMWNT结构的指针,该结构给出了新的显示状态和窗口位置。
  在调用函数SetWindowPlacement之前,将WINDOWPLACEMWNT结构的长度单元置为sizeof(WINDOWPLACEMENT)。如果lpwndpl->length设置不正确,函数SetWindowPlacement将失败。
  返回值:如果函数成功,返回值为非零。如果函数失败,返回值为零。若想获得更多错误信息,请调用callGetLastErro函数。
  备注:如果在WIDNOWPLACEMENT中指定的信息使窗口完全显示在屏幕之外,系统自动调整坐标以使窗口可见,兼顾屏幕设置和多种监视器配置。
  WINDOWPLACEMENT的长度成员信息设置为sizeof(WINDOWPLACEMENT),如果设置不正确,函数将返回FLASE。查看窗口位置坐标的信息,参看WINDOWPLACEMENT。

  速查:Windows NT:3.1以上版本;Windows;95以上版本;Windows CE:不支持;头文件;winuser.h;库文件:user32.lib。

SetForegroundWindow()

SetActiveWindow()

SetFocus()

自己的理解:每个gui线程都有自己的活动窗口,而目前被用户点中那个线程活动窗口叫前台窗口(或叫前景窗口)。而创建前台窗口的线程叫做前台线程(或叫前景线程),前台线程拥有比其它非前景线程更高的优先级,会被windows操作系统优先处理。而所谓的焦点窗口,可以是前台窗口或者是前台窗口的子窗口(控件),如果用户按下键盘按键,windows操作系统会将键盘按键消息发送到当前的焦点窗口。

-------------------------------------

如何将一个某个窗口提到最顶层?网上搜索了一些文章大致有以下几种方法,做个备忘.

问题:有个界面,想定期让其提前(**并显示在用户面前),但又不想用TOPMOST那种置顶方法.我用了SetForegroundWindow,SetActiveWindow,SHOW_WINDOW都不行:程序运行后再打开记事本,时间到我的程序只会在任务栏上闪几下,界面根本出不来怎么办!!(不用顶极窗口,不用鼠标模拟点击)

方法一:
使用定时器,然后在定时器响应函数中定时调用,SetWindowPos()函数,第一个参数写HWND_TOPMOST

方法二:
因为2000/XP改变了SetForegroundWindow的执行方式,不允许随便把窗口提前,打扰用户的工作。可以用附加本线程到最前面窗口的线程,从而欺骗windows。

AttachThreadInput(GetWindowThreadProcessId(::GetForegroundWindow(),NULL), GetCurrentThreadId(),TRUE); 
SetForegroundWindow(); 
SetFocus(); 
AttachThreadInput(GetWindowThreadProcessId(::GetForegroundWindow(),NULL), GetCurrentThreadId(),FALSE);

方法三:

如何激活指定的窗口事件    ●    
           我们知道,Windows    9x/2000中SetForegroundWindow函数当用户正在操作其他窗口时是不能强制某个窗口为前景窗口的,而是激活窗口并调用FlashWindowEx函数来通知用户。但是很多实际情况要求将激活窗口的同时将创建这个窗口的线程置为前景状态。碰到这种情况我们可以使用USER32.DLL中的几个未公开API函数。    
   void    SwitchToThisWindow    (    
   HWND    hWnd,        //    被激活的窗口句柄    
   BOOL    bRestore    //    如果被极小化,则恢复窗口    
   );    
   必须动态加载这个函数。    
   typedef    void    (WINAPI    *PROCSWITCHTOTHISWINDOW)    (HWND,    BOOL);    
   PROCSWITCHTOTHISWINDOW    SwitchToThisWindow;    
   HMODULE    hUser32    =    GetModuleHandle("user32");    
   SwitchToThisWindow    =    (    PROCSWITCHTOTHISWINDOW)    
   GetProcAddress(hUser32,    "SwitchToThisWindow");        
   接下来只要用任何现存窗口的句柄调用这个函数即可,第二个参数指定如果窗口极小化,是否恢复其原状态。    
   SwitchToThisWindow(hWnd,    TRUE);

SetForegroundWindow、SetActiveWindow、SetFocus 如何将一个某个窗口提到最顶层相关推荐

  1. BringWindowToTop(), SetForegroundWindow(), SetActiveWindow()

    1. SetActiveWindow() 原型: <span style="font-size:14px;">CWnd* SetActiveWindow(); HWND ...

  2. mfc 使打开的窗口至于最顶层_MFC界面开发控件BCG帮助文档——功能区设计器(2)

    BCGControlBar ("Business Components Gallery ControlBar")是MFC扩展库,使您可以创建具有完全自定义选项(功能区.可自定义工具 ...

  3. android 获得顶层窗口_Android 实现顶层窗口、浮动窗口(附Demo)

    做过Window程序开发的朋友应该都知道,我们要把程序窗口置顶很简单,只要设置一些窗口属性即可.但是到了Android,你无法简单设置一个属性,就让Android的Activity置顶.因为只要有新的 ...

  4. C# WinForm实现窗口始终在顶层

    在聊微信的时候发现桌面版的聊天窗口上方有一个图钉标签,可以使聊天窗口始终在顶层,这个功能我们也可以用在自己的程序中,实现也很简单.只需要设置一个属性即可. 窗体属性TopMost: 获取或设置一个值, ...

  5. QT外部程序,获取输入焦点

    HWND pWnd = ::FindWindowExA(NULL,NULL,"目标class","目标caption名字".toLocal8Bit().data ...

  6. 研究Win32 GUI中SetActiveWindow与SetFocus和窗口消息

    为了与Win32 GUI的函数功能兼容,得先知道Windows是怎么处理这些信息的,才能模仿. 这次研究对象是SetActiveWindow与SetFocus和窗口消息WM_SETFOCUS,WM_A ...

  7. 设置活动窗口 AttachThreadInput SetForegroundWindow

    最近一直在使用RainMeter制作桌面,需要屏蔽Win按键,并使Win按键触发自己的菜单. 在网上没有找到直接适合我用的,后来根据前人的步伐,尝试出来适用于这个情况的方法. 现在我觉得这个方法挺实用 ...

  8. 用C#调用Windows API向指定窗口发送按键消息

    为什么80%的码农都做不了架构师?>>>    用C#调用Windows API向指定窗口发送 一.调用Windows API. C#下调用Windows API方法如下: 1.引入 ...

  9. 用C#调用Windows API向指定窗口发送按键消息(转载)

    用C#调用Windows API向指定窗口发送按键消息 z 用C#调用Windows API向指定窗口发送 一.调用Windows API. C#下调用Windows API方法如下: 1.引入命名空 ...

最新文章

  1. 基于OpenCV修复表格缺失的轮廓--如何识别和修复表格识别中的虚线
  2. Oracle学习之三 程序控制结构
  3. python字符串转变量名_python 如何把在字符串里面的名字变成变量,进行复制
  4. 英语口语-文章朗读Week9 Wednesday
  5. python中xy坐标如何从十个中找到最远的两个_python – Opencv单应性从像素xy坐标中查找全局xy坐标...
  6. python中pip不是内部或外部命令_解决pip不是内部或外部命令
  7. python之os模块的基本使用
  8. shell脚本实例-命令记录
  9. 【工大SCIR笔记】AAAI 2020 故事结局预测任务上的区分性句子建模
  10. NLP中文句子类型判别和分类实现
  11. php 抓取 百度百科,百度百科词条内容爬取-爬虫大作业
  12. 电脑计算机无法搜索文件,电脑中的文件搜索功能出错怎么办?电脑无法搜索出实际存在的文件如何解决...
  13. 毕业论文页眉(文字)页脚(页码)插入方法
  14. Linux上 如何查找yum安装包所缺缺少的依赖包及报错处理
  15. matlab如何生成极坐标,如何在matlab中极坐标画图
  16. Caused by: java.lang.NoSuchMethodError:xxx——依赖冲突的解决
  17. LTE-5G学习笔记17--COMP技术讲解
  18. 提高效率5款多功能实用软件推荐
  19. 计算机专业C语言复试常见问题(二)
  20. kali虚拟机安装及配置

热门文章

  1. 【genius_platform软件平台开发】第二十八讲:NEON指令集优化(附实例)
  2. add_months用法解析
  3. 疯狂python讲义学习笔记——中十章完结
  4. STM32利用定时器实现微妙延时
  5. 基于 Bitwarden 搭建密码管理器(群晖 Docker)
  6. Win7关闭防火墙的脚本
  7. Gson项目使用全解析
  8. HTML:a标签锚点
  9. 久别重逢的 std::bad_alloc
  10. 用数学计算1.01的365次方等于37.8来说明积跬步至千里是否合理? 1.01^365=37.8 0.99^365=0.03