原神白屏启动器
一款用于恶搞的小软件!
以下就是原神白屏启动器的使用说明了!
网站只做了电脑版的:http://trim.wyylkjs.top/works/gwl
网站时不时会崩,如果你真的想看看,那就待会再试吧
下载链接
原神白屏启动器.zip <-点击这里下载!
由于文件太大,不能上传到社区,本链接为蓝奏云网盘下载
放心,免登录不限速下载
使用说明
第一次打开程序,会尝试补全文件,文件夹中的“设置”文件可修改,请按照表格中的提示修改。
打开程序后,等待提示出现,程序即在后台运行
当亮度到达用户设定值以上,会“启动原神”
启动亮度阈值、动画时长等均可在“设置”文件中修改
程序仍有许多没有完善,修改设置后,请重启程序以使修改生效
若要关闭程序,请点击文件夹中的“关闭程序.bat”,这点非常重要!
注意:请保持程序名为GWL.exe不要修改,以便顺利关闭程序
也可直接在任务管理器中结束进程
FAQ
## 为什么屏幕明明全白了,还是没有“启动”?
这可能是因为屏幕亮度实际上还没达到用户设定的触发阈值,或者有某些程序抢占权限使其无法置顶窗口
# 为什么有时屏幕没有全白还是会自己“启动”?
触发亮度阈值太小,请适当增大,推荐值在248~252之间
## 为什么无法关闭程序?
程序通过结束进程关闭。请保持程序名为GWL.exe不要修改,以便顺利关闭程序
当然,可在任务管理器中的后台进程找到它,将其关闭
## 为什么“启动”一次后不能再次“启动”?
为了防止重复“启动”造成卡顿,当屏幕亮度下降到用户设定值的95%以下,程序才会继续下一次检测
如果有其它疑问或建议可向作者提出。联系方式51064683@qq.com
程序优化内容
1.增加了设置,触发阈值、动画时长、启动提示、自动更新、图片等都可自定义
2.自动修复,文件缺失或损坏将自动补全
3.所有屏幕适配,增加了屏幕及图片大小检测转换,无论多么奇葩的屏幕比例,“原神”二字一定可以准确清晰地显示出来
4.程序隐藏在后台运行,若运行在别人电脑里,对方丝毫察觉不到(别用来干坏事哦~)
5.凑字数,原神,启动!
演示
可以看到,衔接非常丝滑!
- import sys # 用于sys.exit()
- import glob # 查找文件
- import time # 时间
- import configparser # 读取配置文件
- import base64 # 处理图片解码
- import pygame # 创建窗口 原神启动
- import mss # 一个快速截屏库
- import numpy as np # 图像处理
- import ctypes # 用于SetWindowPos函数 改变窗口顺序
- import requests # 在线更新用
- import webbrowser # 在线更新用
- import tkinter as tk # 用于显示提示框
- from tkinter import messagebox # 用于显示提示框
-
-
- # 显示选择对话框
- def show_select_window(title, message, yes_action, no_action):
- tip_window_root = tk.Tk()
- tip_window_root.withdraw()
- update_select_result = messagebox.askyesno(title, message)
- tip_window_root.destroy()
- if update_select_result == True:
- if yes_action != "pass":
- exec(yes_action)
- else:
- if no_action != "pass":
- exec(no_action)
-
- # 显示提示对话框
-
-
- def show_tips_window(title, message, action):
- tip_window_root = tk.Tk()
- tip_window_root.withdraw()
- messagebox.showinfo(title, message)
- tip_window_root.destroy()
- if action != "pass":
- exec(action)
-
-
- # 保存一些内置文件数据,方便补全文件
- 此处省略
- 此处省略
- 此处省略
- 此处省略
- 此处省略
-
- # 补全文件
- ini_file_list = glob.glob("*.ini") # 找ini文件
- if len(ini_file_list) == 0:
- with open(r"设置.ini", "w", encoding="UTF8") as fill_file:
- fill_file.write(config_file_data)
- ini_file_name = "设置.ini"
- else:
- ini_file_name = ini_file_list[0] # 只读取第一个ini文件
-
- if len(glob.glob("关闭程序.bat")) == 0: # 找bat文件
- with open(r"关闭程序.bat", "w", encoding="UTF8") as fill_file:
- fill_file.write(quit_bat)
-
- if len(glob.glob("1.png")) == 0: # 找那张图片
- with open("1.png", "wb") as img_file:
- img_file.write(base64.b64decode(image_data))
-
- # 初始化pygame
- pygame.init()
- clock = pygame.time.Clock()
- flags = pygame.DOUBLEBUF | pygame.HWSURFACE | pygame.FULLSCREEN | pygame.NOFRAME
- # 获取屏幕的大小
- screen_info = pygame.display.Info()
- screen_width = screen_info.current_w
- screen_height = screen_info.current_h
- # 加载那张图片
- image = pygame.image.load("1.png")
- # 计算图片绘制的位置及转换图片大小
- image_height = image.get_height()
- image_width = image.get_width()
- image_position = (0, 0)
-
- if image_height / image_width >= screen_height / screen_width:
- image = pygame.transform.scale(image, (screen_height / image_height * image_width, screen_height))
- image_position = ((screen_width - (screen_height / image_height * image_width)) / 2, 0)
- elif image_height / image_width < screen_height / screen_width:
- image = pygame.transform.scale(image, (screen_width, screen_width * image_height / image_width))
- image_position = (0, (screen_height - (screen_width * image_height / image_width)) / 2)
-
- image_x = image_position[0]
- image_y = image_position[1]
-
- # 读取ini文件
- try:
- config = configparser.ConfigParser()
- with open(ini_file_name, 'r', encoding='utf-8') as utf_file:
- config.read_file(utf_file)
- except: # 就怕某些人乱改
- fill_file = open(r"设置.ini", "w", encoding="UTF8")
- fill_file.write(config_file_data)
- fill_file.close()
- ini_file_name = "设置.ini"
- config = configparser.ConfigParser()
- with open(ini_file_name, 'r', encoding='utf-8') as utf_file:
- config.read_file(utf_file)
- show_tips_window(title="一个小错误", message="配置文件读取异常\n已为您重新生成\n请在新文件中修改", action="pass")
- sys.exit()
-
- # 获取配置文件中的设置
- launch_value = float(config.get("普通设置", "触发阈值"))
- front_shake_time = float(config.get("普通设置", "前摇时长"))
- show_time = float(config.get("普通设置", "显现时长"))
- tick_t = 100/show_time # 在后面的clock.tick()中设置间隔时间
- back_shake_time = float(config.get("普通设置", "后摇时长"))
- show_success_tip = config.get("其他设置", "程序初始化成功提示")
- if show_success_tip == "False":
- show_success_tip = False
- else:
- show_success_tip = True
- check_update = config.get("其他设置", "检查更新")
- if check_update == "False":
- check_update = False
- else:
- check_update = True
- grab_times = int(config.get("其他设置", "每秒检测次数"))
-
- if check_update:
- update_quit = False
- # 检查更新
- try:
- response = requests.get("http://trim.wyylkjs.top/networkprogramsupport/gwl/update",timeout=2.5) # 最多一坤秒
- updateinfo = eval(response.text) # 转换成字典格式,不想用json了
- if updateinfo["version"] > 20001:
- show_select_window(title="更新提示", message=updateinfo["tips"], yes_action=updateinfo["yes_action"], no_action=updateinfo["no_action"])
- update_quit = True
- except:
- pass
-
- # 不更新就别想用!(只要提示框出现过,pygame窗口就不能置顶了,只好这样了。我也不知道为什么)
- if update_quit:
- sys.exit()
-
- if show_success_tip:
- # 提示一下
- font_20 = pygame.font.SysFont("simhei", 20)# 获取系统字体
- font_13 = pygame.font.SysFont("simhei", 13) # 获取系统字体
- screen = pygame.display.set_mode((400, 100))# 提示窗口
- pygame.display.set_caption("原神白屏启动器")
- for tip_second in range(0,5):
- screen.fill("white")
- # 渲染文字
- tip_1 = font_20.render("初始化成功!" + str(5 - tip_second) + "秒后开始检测!", True, "black")
- tip_2 = font_20.render("程序后台运行,如需关闭,请使用任务管理器", True, "black")
- tip_3 = font_20.render("或双击程序文件夹中的“关闭程序”bat文件", True, "black")
- tip_4 = font_13.render("为了正常关闭程序,请保持程序名为"GWL.exe"不要修改", True, "black")
- tip_5 = font_13.render(" 2.0.1 | TRIM | TRIM5829 | 错误反馈51064683@qq.com", True, "black")
- # 显示文字
- screen.blit(tip_1, (0, 0))
- screen.blit(tip_2, (0, 25))
- screen.blit(tip_3, (0, 50))
- screen.blit(tip_4, (0, 70))
- screen.blit(tip_5, (0, 86))
- pygame.display.flip()
- time.sleep(1)
- pygame.quit()
-
- # 开始检测!
- with mss.mss() as sct:
- while True:
- # 获取屏幕截图
- img = np.array(sct.grab(sct.monitors[0]))
- # 计算屏幕图像的平均亮度
- avg_color = np.mean(img)
- if avg_color >= launch_value:
- # 创建大窗口
- screen = pygame.display.set_mode((screen_width, screen_height), flags)
- hwnd = pygame.display.get_wm_info()["window"]
- # 先全白再说
- screen.fill((255, 255, 255))
- pygame.display.flip()
- # 系统将这个窗口置顶
- ctypes.windll.user32.SetWindowPos(hwnd, -1, 0, 0, 0, 0, 0x0001)
- time.sleep(front_shake_time)
- # 原神,启动!(透明度逐渐降低)
- for alpha in range(0,101):
- image.set_alpha(alpha)
- screen.blit(image, (image_x, image_y))
- pygame.display.flip()
- clock.tick(tick_t)
- time.sleep(back_shake_time)
- pygame.quit()
- time.sleep(0.5)
- # 等待亮度降到用户设定的95% 防止重复启动卡死
- next_grab = False
- print(111)
- while next_grab == False:
- img = np.array(sct.grab(sct.monitors[0]))
- # 计算屏幕图像的平均亮度
- avg_color = np.mean(img)
- if avg_color <= launch_value * 0.95:
- next_grab = True
- print(222)
- # 每秒检测次数
- clock.tick(grab_times)
- # 每秒检测次数
- clock.tick(grab_times)
- """
- 作者:TRIM | @TRIM5829 | 51064683@qq.com
- 此代码仅用于个人学习目的
- 如需修改代码,请不要修改或删除此注释中的内容
- 在引用或转载时,请注明出处
- """
复制代码
|