过年在家,有时候想玩下游戏,又不想别人看到.
玩梦幻单刷侠士水陆的时候,需要切换窗口,把多余的窗口隐藏掉.

由于python的GUI开发不熟,界面是自己都觉得真丑!
不过能用就行…没耐心调窗口,主要还是因为不熟!

界面:

有时间再优化下lable的显示字符.
由于有些程序需要权限运行,
用bat脚本启动,获取权限后再运行:

@ echo off
%1 %2
ver|find "5.">nul&&goto :Admin
mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :Admin","","runas",1)(window.close)&goto :eof
:Admin
start "" "C:\Users\xx\Desktop\测试\隐藏窗口.py"

思路:
用win32api获取当前窗口的句柄pid.

隐藏界面:

win32gui.ShowWindow(win32gui.FindWindow(None, s), win32con.SW_HIDE)

显示界面:

 def show_it(s):win32gui.ShowWindow(win32gui.FindWindow(None, s), win32con.SW_SHOW)

app.state(‘icon’)使自身最小化.
然后隐藏自身到托盘.

实现托盘化代码来自
https://blog.csdn.net/maqunfi/article/details/82943209
感谢 ?

以下为代码,上面为托盘部分代码,最后为隐藏部分代码,
基本是win32 的封装,开发文档比较难懂,不怎么会用,缺少示例…
还是因为我太菜了,哈哈哈

from tkinter import *
import win32api
import win32con
import win32gui_struct
import win32gui
import osclass SysTrayIcon(object):QUIT = 'QUIT'SPECIAL_ACTIONS = [QUIT]FIRST_ID = 1314def __init__(s,icon,hover_text,menu_options,on_quit=None,default_menu_index=None,window_class_name=None, ):s.icon = icons.hover_text = hover_texts.on_quit = on_quitmenu_options = menu_options + (('退出', None, s.QUIT),)s._next_action_id = s.FIRST_IDs.menu_actions_by_id = set()s.menu_options = s._add_ids_to_menu_options(list(menu_options))s.menu_actions_by_id = dict(s.menu_actions_by_id)del s._next_action_ids.default_menu_index = (default_menu_index or 0)s.window_class_name = window_class_name or "SysTrayIconPy"message_map = {win32gui.RegisterWindowMessage("TaskbarCreated"): s.refresh_icon,win32con.WM_DESTROY: s.destroy,win32con.WM_COMMAND: s.command,win32con.WM_USER + 20: s.notify, }# 注册窗口类。window_class = win32gui.WNDCLASS()window_class.hInstance = win32gui.GetModuleHandle(None)window_class.lpszClassName = s.window_class_namewindow_class.style = win32con.CS_VREDRAW | win32con.CS_HREDRAW;window_class.hCursor = win32gui.LoadCursor(0, win32con.IDC_ARROW)window_class.hbrBackground = win32con.COLOR_WINDOWwindow_class.lpfnWndProc = message_map  # 也可以指定wndproc.s.classAtom = win32gui.RegisterClass(window_class)def show_icon(s):# 创建窗口。hinst = win32gui.GetModuleHandle(None)style = win32con.WS_OVERLAPPED | win32con.WS_SYSMENUs.hwnd = win32gui.CreateWindow(s.classAtom,s.window_class_name,style,0,0,win32con.CW_USEDEFAULT,win32con.CW_USEDEFAULT,0,0,hinst,None)win32gui.UpdateWindow(s.hwnd)s.notify_id = Nones.refresh_icon()win32gui.PumpMessages()def show_menu(s):menu = win32gui.CreatePopupMenu()s.create_menu(menu, s.menu_options)# win32gui.SetMenuDefaultItem(menu, 1000, 0)pos = win32gui.GetCursorPos()# See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/menus_0hdi.aspwin32gui.SetForegroundWindow(s.hwnd)win32gui.TrackPopupMenu(menu,win32con.TPM_LEFTALIGN,pos[0],pos[1],0,s.hwnd,None)win32gui.PostMessage(s.hwnd, win32con.WM_NULL, 0, 0)def destroy(s, hwnd, msg, wparam, lparam):if s.on_quit: s.on_quit(s)  # 运行传递的on_quitnid = (s.hwnd, 0)win32gui.Shell_NotifyIcon(win32gui.NIM_DELETE, nid)win32gui.PostQuitMessage(0)  # 退出托盘图标def notify(s, hwnd, msg, wparam, lparam):if lparam == win32con.WM_LBUTTONDBLCLK:  # 双击左键pass  # s.execute_menu_option(s.default_menu_index + s.FIRST_ID)elif lparam == win32con.WM_RBUTTONUP:  # 单击右键s.show_menu()elif lparam == win32con.WM_LBUTTONUP:  # 单击左键nid = (s.hwnd, 0)win32gui.Shell_NotifyIcon(win32gui.NIM_DELETE, nid)win32gui.PostQuitMessage(0)  # 退出托盘图标if Main: Main.root.deiconify()return Truedef _add_ids_to_menu_options(s, menu_options):result = []for menu_option in menu_options:option_text, option_icon, option_action = menu_optionif callable(option_action) or option_action in s.SPECIAL_ACTIONS:s.menu_actions_by_id.add((s._next_action_id, option_action))result.append(menu_option + (s._next_action_id,))else:result.append((option_text,option_icon,s._add_ids_to_menu_options(option_action),s._next_action_id))s._next_action_id += 1return resultdef refresh_icon(s, **data):hinst = win32gui.GetModuleHandle(None)if os.path.isfile(s.icon):  # 尝试找到自定义图标icon_flags = win32con.LR_LOADFROMFILE | win32con.LR_DEFAULTSIZEhicon = win32gui.LoadImage(hinst,s.icon,win32con.IMAGE_ICON,0,0,icon_flags)else:  # 找不到图标文件 - 使用默认值hicon = win32gui.LoadIcon(0, win32con.IDI_APPLICATION)if s.notify_id:message = win32gui.NIM_MODIFYelse:message = win32gui.NIM_ADDs.notify_id = (s.hwnd,0,win32gui.NIF_ICON | win32gui.NIF_MESSAGE | win32gui.NIF_TIP,win32con.WM_USER + 20,hicon,s.hover_text)win32gui.Shell_NotifyIcon(message, s.notify_id)def create_menu(s, menu, menu_options):for option_text, option_icon, option_action, option_id in menu_options[::-1]:if option_icon:option_icon = s.prep_menu_icon(option_icon)if option_id in s.menu_actions_by_id:item, extras = win32gui_struct.PackMENUITEMINFO(text=option_text,hbmpItem=option_icon,wID=option_id)win32gui.InsertMenuItem(menu, 0, 1, item)else:submenu = win32gui.CreatePopupMenu()s.create_menu(submenu, option_action)item, extras = win32gui_struct.PackMENUITEMINFO(text=option_text,hbmpItem=option_icon,hSubMenu=submenu)win32gui.InsertMenuItem(menu, 0, 1, item)def prep_menu_icon(s, icon):ico_x = win32api.GetSystemMetrics(win32con.SM_CXSMICON)ico_y = win32api.GetSystemMetrics(win32con.SM_CYSMICON)hicon = win32gui.LoadImage(0, icon, win32con.IMAGE_ICON, ico_x, ico_y, win32con.LR_LOADFROMFILE)hdcBitmap = win32gui.CreateCompatibleDC(0)hdcScreen = win32gui.GetDC(0)hbm = win32gui.CreateCompatibleBitmap(hdcScreen, ico_x, ico_y)hbmOld = win32gui.SelectObject(hdcBitmap, hbm)brush = win32gui.GetSysColorBrush(win32con.COLOR_MENU)win32gui.FillRect(hdcBitmap, (0, 0, 16, 16), brush)win32gui.DrawIconEx(hdcBitmap, 0, 0, hicon, ico_x, ico_y, 0, 0, win32con.DI_NORMAL)win32gui.SelectObject(hdcBitmap, hbmOld)win32gui.DeleteDC(hdcBitmap)return hbmdef command(s, hwnd, msg, wparam, lparam):id = win32gui.LOWORD(wparam)s.execute_menu_option(id)def execute_menu_option(s, id):menu_action = s.menu_actions_by_id[id]if menu_action == s.QUIT:win32gui.DestroyWindow(s.hwnd)else:menu_action(s)class _Main:def main(s):#########################      tkinter界面设定      #####################################import win32guiimport win32conapp = Tk()app.geometry("300x600")app.title("隐藏窗口")scrollbar = Scrollbar(app)scrollbar.pack(side=RIGHT, fill=Y)label = Label(text="请选择需隐藏的",justify=LEFT,font=("楷书", 20, 'bold'),anchor='w',bg="#A2CD5A").pack(fill = BOTH)listb = Listbox(yscrollcommand=scrollbar.set, bg="#A2CD5A", font=("宋体", 15))listb.pack(fill=BOTH, expand=True)scrollbar.config(command=listb.yview)Button(text="隐藏", font=15, width=10, height=2,command=lambda: tray_it(str(listb.get(listb.curselection())).split("/")[0])).pack()Button(text="显示", font=15, width=10, height=2,command=lambda: show_it(str(listb.get(listb.curselection())).split("/")[0])).pack()Button(text="关闭", font=15, width=10, height=2,command=lambda: kill(int(listb.get(listb.curselection()).split("/")[-1]))).pack()Button(text="托盘自己", font=15, width=10, height=2,command= lambda:hide_self()).pack() #点击隐藏自身,即点击最小化按钮.hwnd_title = dict()def get_hwnd(hwnd, arg):if win32gui.IsWindow(hwnd) and win32gui.IsWindowEnabled(hwnd) and win32gui.IsWindowVisible(hwnd):hwnd_title.update({hwnd: win32gui.GetWindowText(hwnd)})win32gui.EnumWindows(get_hwnd, 0)for h, t in hwnd_title.items():if t is not "":listb.insert(END, t + "/" + str(h))def hide_self():app.state('icon')def kill(pid):win32gui.PostMessage(pid, win32con.WM_CLOSE, 0, 0)try:listb.delete(listb.curselection())except:passelse:passdef tray_it(s):win32gui.ShowWindow(win32gui.FindWindow(None, s), win32con.SW_HIDE)def show_it(s):win32gui.ShowWindow(win32gui.FindWindow(None, s), win32con.SW_SHOW)#app.mainloop()###########################     开始托盘程序嵌入     #####################################s.root = appicons = os.getcwd() + r'\robot.ico'# print(icons)hover_text = "点击恢复"  # 悬浮于图标上方时的提示menu_options = ()s.sysTrayIcon = SysTrayIcon(icons, hover_text, menu_options, on_quit=s.exit, default_menu_index=1)s.root.bind("<Unmap>", lambda event: s.Unmap() if s.root.state() == 'iconic' else False)s.root.protocol('WM_DELETE_WINDOW', s.exit)s.root.resizable(0, 0)s.root.mainloop()def switch_icon(s, _sysTrayIcon, icons='D:\\2.ico'):_sysTrayIcon.icon = icons_sysTrayIcon.refresh_icon()# 点击右键菜单项目会传递SysTrayIcon自身给引用的函数,所以这里的_sysTrayIcon = s.sysTrayIcondef Unmap(s):s.root.withdraw()s.sysTrayIcon.show_icon()def exit(s, _sysTrayIcon=None):s.root.destroy()# print('exit...')if __name__ == '__main__':Main = _Main()Main.main()

Windows系统下完全隐藏桌面窗口相关推荐

  1. 在Windows系统下如何将桌面图标下的文字隐藏

    在Windows系统下如何将桌面图标下的文字隐藏 第一步:你需要一台电脑(Windows系统的电脑哈!原谅我放屁哈!) 进入正题: 首先,win+R键打开运行窗口,输入"charmap&qu ...

  2. 远程桌面使用linux,在Windows 系统下使用远程桌面连接Linux 系统主机的方法

    在使用此方法前请判断需要连接的Linux 系统主机拥有公网IP地址或在同一局域网内 本实例采用Raspberry(基于Debian)和Putty 1.使用SSH连接LInux 主机: 1.1启动Lin ...

  3. windows系统下多个程序窗口快速切换的方法

    通常,我们会使用Alt+Tab键来切换应用程序窗口,但是在三个程序窗口频繁切换时较为麻烦.其实还有另外一种快速的切换方式,就是Win+数字. 例如:如图,我们打开了Chrome浏览器.latex编辑器 ...

  4. Windows系统下多显示器模式开发

    转载:开发日记地址 http://blog.sina.com.cn/s/blog_4078ccd60100049a.html 这几天研究了一下Windows系统的多显示器模式的编程,实现了Window ...

  5. Windows系统下CMD命令

    CMD是command的缩写,即命令行 . 虽然随着计算机产业的发展,Windows 操作系统的应用越来越广泛,DOS 面临着被淘汰的命运,但是因为它运行安全.稳定,有的用户还在使用,所以一般Wind ...

  6. usb声卡驱动_来自MOTU的温馨提示:如果你的声卡在Windows系统下不稳定,你可以这样做!...

    武汉大学来自MOTU的温馨提示:如果你的声卡在Windows系统下不稳定,你可以这样做! 在我们日常使用外置声卡时,特别是USB接口的外置声卡,相信绝大多数朋友都遇到过声卡掉线.卡死.无故停止工作等各 ...

  7. Windows系统下安装配置 MinGW-w64 开发环境

    MinGW.MinGW-w64 简介 MinGW(全称为,Minimalist GNU for Windows),它实际上是将经典的开源 C语言编译器 GCC 移植到了 Windows 平台下,并且包 ...

  8. oracle11系统安装,Windows系统下安装Oracle 11g R2教程,oracle11g

    Windows系统下安装Oracle 11g R2教程,oracle11g Windows系统下安装Oracle 11g R2教程 Oracle 11g 共有两个大的版本,一个R1(Release 1 ...

  9. Windows系统下三十款优秀开源软件

    Windows系统下三十款优秀开源软件 1.Firefox 官方网站:http://www.getfirefox.com/ 可替换Internet Explorer 功能特点:如果你还没有使用Fire ...

最新文章

  1. [原创]函数指针的应用
  2. SUBMIT 的使用方法
  3. oracle 28000错误码,Oracle数据库 ORA-28000 错误处理方式
  4. 家乡饮食文化PHP开题报告,挖掘家乡饮食文化拓展幼儿园课程
  5. 有哪些开源C ++静态分析工具? [关闭]
  6. 《Adobe After Effects CS5经典教程》——1.5 对合成图像作动画处理
  7. 微信小程序大全:767个小程序
  8. jsdroid 教程_2020年建筑行业资源近2000G免费建筑教程,分享给有需要的建筑同行
  9. WEB打印的几种方案
  10. Word转换PDF技巧之通过虚拟打印机生成pdf格式文件
  11. 手电筒app制作实录
  12. Excel数据分析和建模
  13. 苹果手机相机九宫格怎么设置_用苹果手机拍照,这3个媲美单反的设置不会用,就别说自己用苹果...
  14. 关于 国产麒麟系统Qt强制退出应用程序qApp->exit()无效 的解决方法
  15. 晓之以理——女儿被老师投诉
  16. USTC English Club Note20211222
  17. http中各个状态码的含义
  18. uniapp如何实现时间轴会议预约显示?
  19. 前端程序员Vue开发经验总结
  20. 机器学习实战_朴素贝叶斯分类器_预测疾病

热门文章

  1. 利用Python将数据写入xlsx文件
  2. 详细介绍:如何用Vue完成喵喵电影项目?
  3. mac 无法识别seagate硬盘、无法向其写入文件
  4. 屏幕测试亮点,新买了一个显示器,使用web简单的测试下了亮点
  5. ipsec vpi_VPI的完整形式是什么?
  6. 2021-2027全球与中国操作面板市场现状及未来发展趋势
  7. SEO优化工具:PHPCMS采集工具
  8. 华为ME909 4G LTE模块在树莓派+KALI2020平台的联网演示
  9. bzoj - 1002 【Kirchhoff矩阵】
  10. IAT表是如何实现的