2024-1-27 12:30:20 [显示全部楼层]
741浏览
查看: 741|回复: 3

[项目分享] 原神,启动!原神白屏启动器2.0版本优化更新发布啦!

[复制链接]

原神白屏启动器

一款用于恶搞的小软件!

以下就是原神白屏启动器的使用说明了!
网站只做了电脑版的:http://trim.wyylkjs.top/works/gwl
网站时不时会崩,如果你真的想看看,那就待会再试吧

下载链接

原神白屏启动器.zip <-点击这里下载!
由于文件太大,不能上传到社区,本链接为蓝奏云网盘下载
放心,免登录不限速下载

使用说明

第一次打开程序,会尝试补全文件,文件夹中的“设置”文件可修改,请按照表格中的提示修改。
打开程序后,等待提示出现,程序即在后台运行
当亮度到达用户设定值以上,会“启动原神”
启动亮度阈值、动画时长等均可在“设置”文件中修改
程序仍有许多没有完善,修改设置后,请重启程序以使修改生效
若要关闭程序,请点击文件夹中的“关闭程序.bat”,这点非常重要!
注意:请保持程序名为GWL.exe不要修改,以便顺利关闭程序
也可直接在任务管理器中结束进程

FAQ

## 为什么屏幕明明全白了,还是没有“启动”?
这可能是因为屏幕亮度实际上还没达到用户设定的触发阈值,或者有某些程序抢占权限使其无法置顶窗口
# 为什么有时屏幕没有全白还是会自己“启动”?
触发亮度阈值太小,请适当增大,推荐值在248~252之间
## 为什么无法关闭程序?
程序通过结束进程关闭。请保持程序名为GWL.exe不要修改,以便顺利关闭程序
当然,可在任务管理器中的后台进程找到它,将其关闭
## 为什么“启动”一次后不能再次“启动”?
为了防止重复“启动”造成卡顿,当屏幕亮度下降到用户设定值的95%以下,程序才会继续下一次检测

如果有其它疑问或建议可向作者提出。联系方式51064683@qq.com

程序优化内容

1.增加了设置,触发阈值、动画时长、启动提示、自动更新、图片等都可自定义
2.自动修复,文件缺失或损坏将自动补全
3.所有屏幕适配,增加了屏幕及图片大小检测转换,无论多么奇葩的屏幕比例,“原神”二字一定可以准确清晰地显示出来
4.程序隐藏在后台运行,若运行在别人电脑里,对方丝毫察觉不到(别用来干坏事哦~)
5.凑字数,原神,启动!

演示

可以看到,衔接非常丝滑!


原神,启动!原神白屏启动器2.0版本优化更新发布啦!图1

源代码

由于代码中有内置文件,故不全部展示,请自行下载:
源码.zip <-点击这里下载!
大部分源代码展示


  1. import sys  # 用于sys.exit()
  2. import glob  # 查找文件
  3. import time  # 时间
  4. import configparser  # 读取配置文件
  5. import base64  # 处理图片解码
  6. import pygame  # 创建窗口 原神启动
  7. import mss  # 一个快速截屏库
  8. import numpy as np  # 图像处理
  9. import ctypes  # 用于SetWindowPos函数 改变窗口顺序
  10. import requests # 在线更新用
  11. import webbrowser  # 在线更新用
  12. import tkinter as tk  # 用于显示提示框
  13. from tkinter import messagebox  # 用于显示提示框
  14. # 显示选择对话框
  15. def show_select_window(title, message, yes_action, no_action):
  16.     tip_window_root = tk.Tk()
  17.     tip_window_root.withdraw()
  18.     update_select_result = messagebox.askyesno(title, message)
  19.     tip_window_root.destroy()
  20.     if update_select_result == True:
  21.         if yes_action != "pass":
  22.             exec(yes_action)
  23.     else:
  24.         if no_action != "pass":
  25.             exec(no_action)
  26. # 显示提示对话框
  27. def show_tips_window(title, message, action):
  28.     tip_window_root = tk.Tk()
  29.     tip_window_root.withdraw()
  30.     messagebox.showinfo(title, message)
  31.     tip_window_root.destroy()
  32.     if action != "pass":
  33.         exec(action)
  34. # 保存一些内置文件数据,方便补全文件
  35. 此处省略
  36. 此处省略
  37. 此处省略
  38. 此处省略
  39. 此处省略
  40. # 补全文件
  41. ini_file_list = glob.glob("*.ini")  # 找ini文件
  42. if len(ini_file_list) == 0:
  43.     with open(r"设置.ini", "w", encoding="UTF8") as fill_file:
  44.         fill_file.write(config_file_data)
  45.     ini_file_name = "设置.ini"
  46. else:
  47.     ini_file_name = ini_file_list[0]  # 只读取第一个ini文件
  48. if len(glob.glob("关闭程序.bat")) == 0:  # 找bat文件
  49.     with open(r"关闭程序.bat", "w", encoding="UTF8") as fill_file:
  50.         fill_file.write(quit_bat)
  51. if len(glob.glob("1.png")) == 0:  # 找那张图片
  52.     with open("1.png", "wb") as img_file:
  53.         img_file.write(base64.b64decode(image_data))
  54. # 初始化pygame
  55. pygame.init()
  56. clock = pygame.time.Clock()
  57. flags = pygame.DOUBLEBUF | pygame.HWSURFACE | pygame.FULLSCREEN | pygame.NOFRAME
  58. # 获取屏幕的大小
  59. screen_info = pygame.display.Info()
  60. screen_width = screen_info.current_w
  61. screen_height = screen_info.current_h
  62. # 加载那张图片
  63. image = pygame.image.load("1.png")
  64. # 计算图片绘制的位置及转换图片大小
  65. image_height = image.get_height()
  66. image_width = image.get_width()
  67. image_position = (0, 0)
  68. if image_height / image_width >= screen_height / screen_width:
  69.     image = pygame.transform.scale(image, (screen_height / image_height * image_width, screen_height))
  70.     image_position = ((screen_width - (screen_height / image_height * image_width)) / 2, 0)
  71. elif image_height / image_width < screen_height / screen_width:
  72.     image = pygame.transform.scale(image, (screen_width, screen_width * image_height / image_width))
  73.     image_position = (0, (screen_height - (screen_width * image_height / image_width)) / 2)
  74. image_x = image_position[0]
  75. image_y = image_position[1]
  76. # 读取ini文件
  77. try:
  78.     config = configparser.ConfigParser()
  79.     with open(ini_file_name, 'r', encoding='utf-8') as utf_file:
  80.         config.read_file(utf_file)
  81. except:  # 就怕某些人乱改
  82.     fill_file = open(r"设置.ini", "w", encoding="UTF8")
  83.     fill_file.write(config_file_data)
  84.     fill_file.close()
  85.     ini_file_name = "设置.ini"
  86.     config = configparser.ConfigParser()
  87.     with open(ini_file_name, 'r', encoding='utf-8') as utf_file:
  88.         config.read_file(utf_file)
  89.     show_tips_window(title="一个小错误", message="配置文件读取异常\n已为您重新生成\n请在新文件中修改", action="pass")
  90.     sys.exit()
  91. # 获取配置文件中的设置
  92. launch_value = float(config.get("普通设置", "触发阈值"))
  93. front_shake_time = float(config.get("普通设置", "前摇时长"))
  94. show_time = float(config.get("普通设置", "显现时长"))
  95. tick_t = 100/show_time  # 在后面的clock.tick()中设置间隔时间
  96. back_shake_time = float(config.get("普通设置", "后摇时长"))
  97. show_success_tip = config.get("其他设置", "程序初始化成功提示")
  98. if show_success_tip == "False":
  99.     show_success_tip = False
  100. else:
  101.     show_success_tip = True
  102. check_update = config.get("其他设置", "检查更新")
  103. if check_update == "False":
  104.     check_update = False
  105. else:
  106.     check_update = True
  107. grab_times = int(config.get("其他设置", "每秒检测次数"))
  108. if check_update:
  109.     update_quit = False
  110.     # 检查更新
  111.     try:
  112.         response = requests.get("http://trim.wyylkjs.top/networkprogramsupport/gwl/update",timeout=2.5)  # 最多一坤秒
  113.         updateinfo = eval(response.text)  # 转换成字典格式,不想用json了
  114.         if updateinfo["version"] > 20001:
  115.             show_select_window(title="更新提示", message=updateinfo["tips"], yes_action=updateinfo["yes_action"], no_action=updateinfo["no_action"])
  116.             update_quit = True
  117.     except:
  118.         pass
  119.     # 不更新就别想用!(只要提示框出现过,pygame窗口就不能置顶了,只好这样了。我也不知道为什么)
  120.     if update_quit:
  121.         sys.exit()
  122. if show_success_tip:
  123.     # 提示一下
  124.     font_20 = pygame.font.SysFont("simhei", 20)# 获取系统字体
  125.     font_13 = pygame.font.SysFont("simhei", 13)  # 获取系统字体
  126.     screen = pygame.display.set_mode((400, 100))# 提示窗口
  127.     pygame.display.set_caption("原神白屏启动器")
  128.     for tip_second in range(0,5):
  129.         screen.fill("white")
  130.         # 渲染文字
  131.         tip_1 = font_20.render("初始化成功!" + str(5 - tip_second) + "秒后开始检测!", True, "black")
  132.         tip_2 = font_20.render("程序后台运行,如需关闭,请使用任务管理器", True, "black")
  133.         tip_3 = font_20.render("或双击程序文件夹中的“关闭程序”bat文件", True, "black")
  134.         tip_4 = font_13.render("为了正常关闭程序,请保持程序名为"GWL.exe"不要修改", True, "black")
  135.         tip_5 = font_13.render(" 2.0.1 | TRIM | TRIM5829 | 错误反馈51064683@qq.com", True, "black")
  136.         # 显示文字
  137.         screen.blit(tip_1, (0, 0))
  138.         screen.blit(tip_2, (0, 25))
  139.         screen.blit(tip_3, (0, 50))
  140.         screen.blit(tip_4, (0, 70))
  141.         screen.blit(tip_5, (0, 86))
  142.         pygame.display.flip()
  143.         time.sleep(1)
  144.     pygame.quit()
  145. # 开始检测!
  146. with mss.mss() as sct:
  147.     while True:
  148.         # 获取屏幕截图
  149.         img = np.array(sct.grab(sct.monitors[0]))
  150.         # 计算屏幕图像的平均亮度
  151.         avg_color = np.mean(img)
  152.         if avg_color >= launch_value:
  153.             # 创建大窗口
  154.             screen = pygame.display.set_mode((screen_width, screen_height), flags)
  155.             hwnd = pygame.display.get_wm_info()["window"]
  156.             # 先全白再说
  157.             screen.fill((255, 255, 255))
  158.             pygame.display.flip()
  159.             # 系统将这个窗口置顶
  160.             ctypes.windll.user32.SetWindowPos(hwnd, -1, 0, 0, 0, 0, 0x0001)
  161.             time.sleep(front_shake_time)
  162.             # 原神,启动!(透明度逐渐降低)
  163.             for alpha in range(0,101):
  164.                 image.set_alpha(alpha)
  165.                 screen.blit(image, (image_x, image_y))
  166.                 pygame.display.flip()
  167.                 clock.tick(tick_t)
  168.             time.sleep(back_shake_time)
  169.             pygame.quit()
  170.             time.sleep(0.5)
  171.             # 等待亮度降到用户设定的95% 防止重复启动卡死
  172.             next_grab = False
  173.             print(111)
  174.             while next_grab == False:
  175.                 img = np.array(sct.grab(sct.monitors[0]))
  176.                 # 计算屏幕图像的平均亮度
  177.                 avg_color = np.mean(img)
  178.                 if avg_color <= launch_value * 0.95:
  179.                     next_grab = True
  180.                     print(222)
  181.                 # 每秒检测次数
  182.                 clock.tick(grab_times)
  183.         # 每秒检测次数
  184.         clock.tick(grab_times)
  185. """
  186. 作者:TRIM | @TRIM5829 | 51064683@qq.com
  187. 此代码仅用于个人学习目的
  188. 如需修改代码,请不要修改或删除此注释中的内容
  189. 在引用或转载时,请注明出处
  190. """
复制代码

TRIM  初级技匠
 楼主|

发表于 2024-1-27 18:19:33

本帖最后由 TRIM 于 2024-1-27 18:23 编辑

在后台看到有的小伙伴频繁运行该程序,可能会造成严重的卡顿哦!
在运行前请确保电脑中已经没有该程序正在运行
可使用程序文件夹中的“关闭程序.bat”将其关闭
由于程序后台运行,作者暂时没有找到简便的关闭程序方法,如有建议欢迎向作者提出
回复

使用道具 举报

木子呢  管理员

发表于 2024-1-29 12:01:02

好棒,请问有完成的视频嘛,可以插入下完整视频,如果有图片的话,使用步骤里面也可以补上图片,图文结合哈。
回复

使用道具 举报

原神忠实玩家  见习技师

发表于 2024-2-2 14:01:59

66666666666666666666666666666666666666666666666666666666666666666666666
回复

使用道具 举报

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

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail