TRIM 发表于 2024-1-27 12:30:20

原神,启动!原神白屏启动器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:19:33

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

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

木子呢 发表于 2024-1-29 12:01:02

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

原神忠实玩家 发表于 2024-2-2 14:01:59

66666666666666666666666666666666666666666666666666666666666666666666666
页: [1]
查看完整版本: 原神,启动!原神白屏启动器2.0版本优化更新发布啦!