Windows程序窗口置前台的几种方法

第一种:SetForegroundWindow,这个方法时灵时不灵。有人说,在自己的程序里把自己的窗口之前一般就不灵,而置前其它程序的窗口就灵。我觉得这是有原因的:当一个程序运行这个函数的时候,我们可以想象,如果是用鼠标操作,那么当前窗口实际上正在操作,很可能在瞬间离开后,焦点又回来了,那么看上去更就没有吧其它窗口置前的效果,所以这个函数内部可能做了延迟,略等一下,在这个时间内,当前窗口不会被置前。就是这个时间,函数已经调用完成,所以看上去,自己的窗口并没有置前。

第二种:SwitchToThisWindow,这个方法很好使,还会把最小化的窗口复原。但是Windows说,这个函数以后可能不支持。但是我觉得可以放心使用,Windows当前一般就那几个版本,程序不会计划运行100年不升级吧。这个函数可以直接链接,但是XP以前的版本可能不行,所以,使用动态加载可能保险点。动态加载代码:

  1. typedef void (WINAPI*PROCSWITCHTOTHISWINDOW)(HWND,BOOL);  
  2.   
  3.     PROCSWITCHTOTHISWINDOW SwitchToThisWindow;     
  4.     HMODULE hUser32 = GetModuleHandle(L"user32");  
  5.     SwitchToThisWindow = (PROCSWITCHTOTHISWINDOW)GetProcAddress(hUser32,"SwitchToThisWindow");  
  6.     SwitchToThisWindow(frame,1);  
第三种方法:BringWindowToTop,这个函数比上一个功能少点,实质是调用SetWindowPos函数。Windows程序窗口置前台的几种方法
原文地址:https://www.cnblogs.com/hzcya1995/p/13318835.html