如何将一个某个窗口提到最顶层

277 篇文章 0 订阅
130 篇文章 0 订阅
问题:有个界面,想定期让其提前(**并显示在用户面前),但又不想用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);   

评论 1 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

郁闷阳光

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值