请选择 进入手机版 | 继续访问电脑版
微信扫一扫 分享朋友圈

已有 1024 人浏览分享

开启左侧

将窗口置顶的方法:SetWindowPos、AttachThreadInput、SwitchToThisWindow

[复制链接]
1024 1
方法一:
使用定时器,然后在定时器响应函数中定时调用,SetWindowPos()函数,第一个参数写HWND_TOPMOST

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

[mw_shl_code=c,true]AttachThreadInput(GetWindowThreadProcessId(::GetForegroundWindow(),NULL), GetCurrentThreadId(),TRUE);
SetForegroundWindow();
SetFocus();
AttachThreadInput(GetWindowThreadProcessId(::GetForegroundWindow(),NULL), GetCurrentThreadId(),FALSE);
[/mw_shl_code]

方法三:

如何激活指定的窗口事件    ●   
           我们知道,Windows    9x/2000中SetForegroundWindow函数当用户正在操作其他窗口时是不能强制某个窗口为前景窗口的,而是激活窗口并调用FlashWindowEx函数来通知用户。但是很多实际情况要求将激活窗口的同时将创建这个窗口的线程置为前景状态。碰到这种情况我们可以使用USER32.DLL中的几个未公开API函数。   
[mw_shl_code=c,true]  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);   [/mw_shl_code]
不积跬步,无以至千里

评论 1

japanphone  初级码农Ⅰ  发表于 2018-7-5 12:34:39 | 显示全部楼层
不积跬步,无以至千里

举报 使用道具

回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

0

关注

37

粉丝

1150

主题
热门资讯
网友晒图
图文推荐
  • 联系我们
  • 邮箱:admin@c0ks.com(请把#改成@)
  • 电话:18530790808
  • QQ客服 1031180668
  • 工作时间:周一至周五(早上9点至下午5点)
  • 微信二维码

  • 扫描访问手机版

Archiver|手机版|小黑屋|从零开始

GMT+8, 2020-5-26 02:26 , Processed in 0.091977 second(s), 37 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

  • QQ: 1031180668

    客服电话

    18530790808

    电子邮件

    admin@c0ks.com

    在线时间:8:00-16:00