python获取窗口句柄并将指定应用置顶
import win32gui import win32con #获取所有窗口句柄 hwnd_title = {} def get_all_hwnd(hwnd, mouse): if (win32gui.IsWindow(hwnd) and win32gui.IsWindowEnabled(hwnd) and win32gui.IsWindowVisible(hwnd)): hwnd_title.update({hwnd: win32gui.GetWindowText(hwnd)}) win32gui.EnumWindows(get_all_hwnd, 0) for h, t in hwnd_title.items(): if t : print (h, t) #置顶窗口 print("置顶窗口") hwnd = win32gui.FindWindow(None, "博客后台 - 博客园 - Google Chrome") # hwnd = win32gui.FindWindow('xx.exe', None) # 窗口需要正常大小且在后台,不能最小化 win32gui.ShowWindow(hwnd, win32con.SW_SHOWNORMAL) # 窗口需要最大化且在后台,不能最小化 # ctypes.windll.user32.ShowWindow(hwnd, 3) win32gui.SetForegroundWindow(hwnd) if __name__ == '__main__': pass
上边这个将窗口置顶后如果点了其他地方,窗口将会取消置顶;
下边的是将窗口置顶后点了其他地方,也不会取消置顶
def get_all_hwnd(hwnd, mouse): if (win32gui.IsWindow(hwnd) and win32gui.IsWindowEnabled(hwnd) and win32gui.IsWindowVisible(hwnd)): AC_cycle_uefi.hwnd_title.update({hwnd: win32gui.GetWindowText(hwnd)}) def set_KVM_window_top(): try: win32gui.EnumWindows(AC_cycle_uefi.get_all_hwnd, 0) handle="" for h, t in AC_cycle_uefi.hwnd_title.items(): if t: if "KVM Console" in t: handle = t logger.write("{} {}".format(h,t)) # 置顶窗口 logger.write("Set window on the top",handle) hwnd = win32gui.FindWindow(None, handle) # hwnd = win32gui.FindWindow('xx.exe', None) # 窗口需要正常大小且在后台,不能最小化 win32gui.ShowWindow(hwnd, win32con.SW_SHOWNORMAL) # 窗口需要最大化且在后台,不能最小化 # ctypes.windll.user32.ShowWindow(hwnd, 3) # win32gui.SetForegroundWindow(hwnd) # # win32gui.SetActiveWindow(hwnd) # win32gui.SetForegroundWindow(hwnd) win32gui.SetWindowPos(hwnd, win32con.HWND_TOPMOST, 0, 0, 0, 0, win32con.SWP_NOMOVE | win32con.SWP_NOACTIVATE | win32con.SWP_NOOWNERZORDER | win32con.SWP_SHOWWINDOW | win32con.SWP_NOSIZE) except Exception as e: logger.write("Set window top fail")