原神,启动!原神白屏启动器2.0版本优化更新发布啦!
## 原神白屏启动器### 一款用于恶搞的小软件!
以下就是原神白屏启动器的使用说明了!
网站只做了电脑版的:(http://trim.wyylkjs.top/works/gwl)
*网站时不时会崩,如果你真的想看看,那就待会再试吧*
### 下载链接
[原神白屏启动器.zip <-点击这里下载!](https://qrm5106.lanzoul.com/i4wuf1mcpebg)
*由于文件太大,不能上传到社区,本链接为蓝奏云网盘下载*
*放心,免登录不限速下载*
### 使用说明
第一次打开程序,会尝试**补全文件**,文件夹中的“设置”文件可修改,请按照表格中的提示修改。
打开程序后,等待提示出现,程序即在**后台运行**
当亮度到达用户设定值以上,会“启动原神”
启动亮度阈值、动画时长等均可在“设置”文件中修改
程序仍有许多没有完善,修改设置后,请**重启程序**以使修改生效
***若要关闭程序,请点击文件夹中的“关闭程序.bat”,这点非常重要!***
***注意:请保持程序名为GWL.exe不要修改,以便顺利关闭程序***
***也可直接在任务管理器中结束进程***
### FAQ
**## 为什么屏幕明明全白了,还是没有“启动”?**
这可能是因为屏幕亮度实际上还没达到用户设定的触发阈值,或者有某些程序抢占权限使其无法置顶窗口
**# 为什么有时屏幕没有全白还是会自己“启动”?**
触发亮度阈值太小,请适当增大,推荐值在248~252之间
**## 为什么无法关闭程序?**
程序通过结束进程关闭。请保持程序名为GWL.exe不要修改,以便顺利关闭程序
当然,可在任务管理器中的后台进程找到它,将其关闭
**## 为什么“启动”一次后不能再次“启动”?**
为了防止重复“启动”造成卡顿,当屏幕亮度下降到用户设定值的95%以下,程序才会继续下一次检测
如果有其它疑问或建议可向作者提出。联系方式**51064683@qq.com**
### 程序优化内容
1.增加了设置,触发阈值、动画时长、启动提示、自动更新、图片等都可自定义
2.自动修复,文件缺失或损坏将自动补全
3.所有屏幕适配,增加了屏幕及图片大小检测转换,无论多么奇葩的屏幕比例,“原神”二字一定可以准确清晰地显示出来
4.程序隐藏在后台运行,若运行在别人电脑里,对方丝毫察觉不到(别用来干坏事哦~)
5.凑字数,原神,启动!
### 演示
可以看到,衔接非常丝滑!
### 源代码
由于代码中有内置文件,故不全部展示,请自行下载:
[源码.zip <-点击这里下载!](https://qrm5106.lanzoul.com/izjUO1mcpedi)
大部分源代码展示
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# 只读取第一个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
image_y = image_position
# 读取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))
# 计算屏幕图像的平均亮度
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))
# 计算屏幕图像的平均亮度
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
此代码仅用于个人学习目的
如需修改代码,请不要修改或删除此注释中的内容
在引用或转载时,请注明出处
""" 本帖最后由 TRIM 于 2024-1-27 18:23 编辑
在后台看到有的小伙伴频繁运行该程序,可能会造成严重的卡顿哦!
在运行前请确保电脑中已经没有该程序正在运行。
可使用程序文件夹中的“关闭程序.bat”将其关闭
由于程序后台运行,作者暂时没有找到简便的关闭程序方法,如有建议欢迎向作者提出!
好棒,请问有完成的视频嘛,可以插入下完整视频,如果有图片的话,使用步骤里面也可以补上图片,图文结合哈。 66666666666666666666666666666666666666666666666666666666666666666666666
页:
[1]