win32函数很多,而且比较底层,名字也不好理解。比如这三个:SetForegroundWindow、SetActiveWindow、ShowWindow,谁能设置指定窗口成为当前窗口呢?首先要明确的是:SetActiveWindow不能做,它不是设计来做这个的——虽然名字里有Window,但实际上是给控件用的,也就是顶层窗口的子窗口(在windows中,一切被抽象到窗口中)。它的作用,简单的说,就是设置一个控件来接收键盘输入。那么剩下的两个呢?SetForegroundWindowvsShowWindowSetForegroundWindow把一个被覆盖的窗口(背景窗口,但没有最小化)放在最前面ShowWindow恢复一个最小化的窗口,把它放在最前面(如果窗口没有最小化,则不会产生变化)因此,代码适配两种情况如下:importwin32conimportwin32guidefset_current_window(hwnd):ifwin32gui.IsIconic(hwnd):win32gui.ShowWindow(hwnd,win32con.SW_RESTORE)else:win32gui.SetForegroundWindow(hwnd)注意:判断一个窗口是否是的方法minimized叫做IsIconic,很奇怪。看起来是“是否缩小成状态栏图标”,其实是“是否最小化”的功能。我猜可能是因为函数库很“老”。那时候windows是没有状态栏图标的,任务栏最小化的时候可以叫Iconic。
