WWW.YOUINFO.SITE
标签聚合 界面

/tag/界面

LinuxDo 最新话题 · 2026-06-11 03:13:36+08:00 · tech

这些应用很少做覆盖更新的,都是全新APP 不过更新之后连用户数据都丢失了还是第一次见,大部分都是绑定设备ID的 别问是什么网站,去代码里找 破解版没有破解 只能靠咱们手搓 界面参考: 复制以下代码,直接到powershell运行就可以安装到桌面了 如果电脑不匹配,用不了的,可以让AI直接帮你把Python代码写出来 $path = "$HOME\Desktop\invite_tool.py"; $code = @' import os import sys import subprocess def bootstrap_dependencies(): required_libs = {"requests": "requests", "Crypto": "pycryptodome"} missing_libs = [] for module_name, pip_name in required_libs.items(): try: __import__(module_name) except ImportError: missing_libs.append(pip_name) if missing_libs: if "pycryptodome" in missing_libs and sys.platform.startswith("win"): subprocess.run([sys.executable, "-m", "pip", "uninstall", "-y", "crypto"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) subprocess.run([sys.executable, "-m", "pip", "uninstall", "-y", "pycryptodome"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) for lib in missing_libs: try: subprocess.run([sys.executable, "-m", "pip", "install", "--upgrade", "pip"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) subprocess.run([sys.executable, "-m", "pip", "install", lib], check=True) except Exception: sys.exit(1) bootstrap_dependencies() import base64 import hashlib import json import random import threading import time import tkinter as tk from tkinter import messagebox, ttk from concurrent.futures import ThreadPoolExecutor, as_completed from dataclasses import dataclass from typing import Any import requests import urllib3 from Crypto.Cipher import AES, PKCS1_v1_5 from Crypto.PublicKey import RSA from Crypto.Util.Padding import unpad urllib3.disable_warnings() requests.packages.urllib3.disable_warnings() PUBLIC_KEY_RAW = ( "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCgsH82stbCUaE1fTsotU0E2HWU9uQz496NFKgjjHBn" "Bzqk9YtYcowNFxaOz6G5Q3bw5j/+0+iAD58/n99ENjFkipiulu30eRiUpHUVFyc+EJ14FLKIXNksQWTu" "AivCkIYcDNP42in1nyjdXrpps7klCMm9MeAz8Mm+k9r1MGVJsQIDAQAB" ) class AtomicCounter: def __init__(self) -> None: self._value = 0 self._lock = threading.Lock() def inc(self) -> int: with self._lock: self._value += 1 return self._value @property def value(self) -> int: with self._lock: return self._value @dataclass(slots=True) class ApiConfig: base_url: str = "https://34.81.42.86:2242" macct: str = "sf42" ver: str = "1.0" os: str = "2" user_agent: str = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36" accept: str = "application/json,*/*" content_type: str = "application/json; charset=UTF-8" timeout: float = 8.0 aes_key: str = "GcgzsKdDZTumABNz7uujrCfPIk9TQ355" @dataclass(slots=True) class ApiResult: code: int msg: str data: Any class ApiClient: def __init__(self, config: ApiConfig, public_key: str) -> None: self.config = config self.session = requests.Session() self.session.verify = False self._aes_key = config.aes_key.encode("utf-8") self._public_key = RSA.import_key(self._load_public_key(public_key)) self.session.headers.update({ "user-agent": config.user_agent, "accept": config.accept, "content-type": config.content_type, "ver": config.ver, "os": config.os, "macct": config.macct, }) def close(self) -> None: self.session.close() def set_token(self, token: str | None) -> None: if token is None: self.session.headers.pop("token", None) else: self.session.headers.update({"token": token}) def post_plain(self, path: str, payload: dict[str, Any], params: dict[str, Any] | None = None) -> ApiResult: return self._post(path, payload, params=params) def post_rsa(self, path: str, payload: dict[str, Any]) -> ApiResult: return self._post(path, {"encrypt": self.rsa_encrypt_payload(payload)}) def rsa_encrypt_payload(self, payload: dict[str, Any]) -> str: plain = json.dumps(payload, ensure_ascii=False, separators=(",", ":")).encode("utf-8") cipher = PKCS1_v1_5.new(self._public_key) chunk_size = self._public_key.size_in_bytes() - 11 encrypted = bytearray() for i in range(0, len(plain), chunk_size): encrypted.extend(cipher.encrypt(plain[i : i + chunk_size])) return base64.b64encode(bytes(encrypted)).decode("ascii") def decrypt_response_text(self, raw_text: str) -> dict[str, Any]: text = raw_text.strip() if text.startswith('"') and text.endswith('"'): text = json.loads(text) cipher = AES.new(self._aes_key, AES.MODE_ECB) plain = unpad(cipher.decrypt(base64.b64decode(text)), AES.block_size).decode("utf-8") return json.loads(plain) def _post(self, path: str, payload: dict[str, Any], params: dict[str, Any] | None = None) -> ApiResult: response = self.session.post( f"{self.config.base_url.rstrip('/')}/{path.lstrip('/')}", params=params, json=payload, timeout=self.config.timeout, ) response.raise_for_status() result = self.decrypt_response_text(response.text) return ApiResult(code=result["code"], msg=result["msg"], data=result["data"]) @staticmethod def _load_public_key(raw: str) -> str: if "BEGIN PUBLIC KEY" in raw or "BEGIN RSA PUBLIC KEY" in raw: return raw b64 = "".join(raw.split()) lines = [b64[i : i + 64] for i in range(0, len(b64), 64)] return "-----BEGIN PUBLIC KEY-----\n" + "\n".join(lines) + "\n-----END PUBLIC KEY-----\n" class ApiService: def __init__(self, client: ApiClient) -> None: self.client = client def login(self, mac: str) -> ApiResult: payload = { "mac": mac, "tips": hashlib.md5(f"{self.client.config.macct}{mac}1".encode("utf-8")).hexdigest(), "os": "1", } return self.client.post_rsa("/front/cluser/c/user/mac/login", payload) def bind_refer(self, code: str) -> ApiResult: return self.client.post_plain("/front/cluser/c/user/bind/refer", {}, params={"code": code}) def make_uid() -> str: raw = f"{time.time()}{random.random()}{threading.get_ident()}" uid = hex(hash(raw))[2:] return uid if len(uid) == 16 else f"1{uid[:15]}" def do_invite(refer_code: str, counter: AtomicCounter, total: int, log_callback) -> tuple[bool, str]: client = None try: client = ApiClient(ApiConfig(), PUBLIC_KEY_RAW) api = ApiService(client) uid = make_uid() data = api.login(uid).data client.set_token(data["token"]) result = api.bind_refer(refer_code) success = result.code == 0 msg = result.msg except Exception as ex: success = False msg = str(ex) finally: if client is not None: client.close() n = counter.inc() log_callback(n, total, success, msg) return success, msg class App: def __init__(self, root: tk.Tk) -> None: self.root = root self.root.title("琉璃暗匣 - 极速推广控制台") self.root.geometry("540x440") self.root.resizable(False, False) self.root.configure(bg="#F5F7FA") self.style = ttk.Style() self.style.theme_use("clam") # 现代化视觉样式配置 self.style.configure("TFrame", background="#F5F7FA") self.style.configure("Card.TFrame", background="#FFFFFF", relief="flat") self.style.configure("TLabel", background="#FFFFFF", font=("Microsoft YaHei", 10), foreground="#2C3E50") self.style.configure("Title.TLabel", background="#F5F7FA", font=("Microsoft YaHei", 12, "bold"), foreground="#34495E") self.style.configure("Warning.TLabel", background="#F5F7FA", font=("Microsoft YaHei", 9), foreground="#E74C3C") self.style.configure("TButton", font=("Microsoft YaHei", 10, "bold"), padding=10, background="#E0E6ED", foreground="#2C3E50", borderwidth=0) self.style.map("TButton", background=[("active", "#D4DBE4")]) self.style.configure("VIP.TButton", background="#FF4757", foreground="white") self.style.map("VIP.TButton", background=[("active", "#FF6B81")]) self.style.configure("Gold.TButton", background="#2ED573", foreground="white") self.style.map("Gold.TButton", background=[("active", "#7BED9F")]) self.running = False self.create_widgets() def create_widgets(self) -> None: # 顶部标题与提示 header_frame = ttk.Frame(self.root) header_frame.pack(fill="x", padx=20, pady=(15, 5)) ttk.Label(header_frame, text="✨ 极速推广控制台", style="Title.TLabel").pack(anchor="w") ttk.Label(header_frame, text="💡 温馨提示:由于网络非对称延迟,当前进度与实际可能存在微小偏差\n具体奖励到账情况,请以 APP 或网页端实际显示为准~", style="Warning.TLabel").pack(anchor="w", pady=(5, 0)) # 核心卡片区 (白色背景,增加呼吸感) card_frame = ttk.Frame(self.root, style="Card.TFrame") card_frame.pack(fill="x", padx=20, pady=10, ipadx=15, ipady=15) # 邀请码输入 ttk.Label(card_frame, text="专属邀请码:").grid(row=0, column=0, sticky="w", pady=(0, 15)) self.code_var = tk.StringVar(value="") self.entry_code = ttk.Entry(card_frame, textvariable=self.code_var, font=("Consolas", 12, "bold"), width=20, justify="center") self.entry_code.grid(row=0, column=1, sticky="w", pady=(0, 15), padx=10) # 线程设置 ttk.Label(card_frame, text="并发线程数:").grid(row=1, column=0, sticky="w") self.workers_var = tk.StringVar(value="10") self.workers_spin = ttk.Spinbox(card_frame, from_=1, to=50, width=5, textvariable=self.workers_var, font=("Consolas", 11)) self.workers_spin.grid(row=1, column=1, sticky="w", padx=10) # 按钮区 btn_frame = ttk.Frame(self.root) btn_frame.pack(fill="x", padx=20, pady=5) self.btn_vip = ttk.Button(btn_frame, text="💎 刷 180天会员 (100人)", style="VIP.TButton", command=lambda: self.start_task(100)) self.btn_vip.pack(side="left", expand=True, fill="x", padx=(0, 5)) self.btn_gold = ttk.Button(btn_frame, text="💰 刷 1000金币 (200人)", style="Gold.TButton", command=lambda: self.start_task(200)) self.btn_gold.pack(side="right", expand=True, fill="x", padx=(5, 0)) # 进度与日志区 log_frame = ttk.Frame(self.root) log_frame.pack(fill="both", expand=True, padx=20, pady=10) self.progress_bar = ttk.Progressbar(log_frame, orient="horizontal", mode="determinate") self.progress_bar.pack(fill="x", pady=(0, 5)) self.lbl_status = ttk.Label(log_frame, text="就绪。请输入邀请码后点击按钮开始", background="#F5F7FA", font=("Microsoft YaHei", 9), foreground="#7F8C8D") self.lbl_status.pack(pady=(0, 5)) self.txt_log = tk.Text(log_frame, font=("Consolas", 9), wrap="word", height=8, bg="#2C3E50", fg="#ECF0F1", insertbackground="white", relief="flat", padx=10, pady=10) self.txt_log.pack(side="left", fill="both", expand=True) scrollbar = ttk.Scrollbar(log_frame, command=self.txt_log.yview) scrollbar.pack(side="right", fill="y") self.txt_log.config(yscrollcommand=scrollbar.set) def write_log(self, text: str) -> None: self.txt_log.insert(tk.END, text + "\n") self.txt_log.see(tk.END) def update_progress(self, current: int, total: int, success: bool, msg: str) -> None: self.root.after(0, self._update_ui, current, total, success, msg) def _update_ui(self, current: int, total: int, success: bool, msg: str) -> None: pct = (current / total) * 100 self.progress_bar["value"] = pct status_text = "OK" if success else "FAIL" self.lbl_status.config(text=f"执行中: {current}/{total} | 进度: {pct:.1f}%") self.write_log(f"[{current:>3}/{total}] {status_text:4s} | {msg}") def start_task(self, count: int) -> None: if self.running: return refer_code = self.code_var.get().strip() if not refer_code: messagebox.showwarning("提示", "请先输入您要推广的专属邀请码!") self.entry_code.focus() return try: workers = int(self.workers_var.get()) except ValueError: workers = 10 self.running = True self.btn_vip.state(["disabled"]) self.btn_gold.state(["disabled"]) self.entry_code.state(["disabled"]) self.workers_spin.state(["disabled"]) self.txt_log.delete("1.0", tk.END) self.progress_bar["value"] = 0 self.lbl_status.config(text="正在初始化线程池...") self.write_log(f">>> 开始执行任务:邀请 {count} 人,目标码: {refer_code}") threading.Thread(target=self._run_backend, args=(refer_code, count, workers), daemon=True).start() def _run_backend(self, refer_code: str, count: int, workers: int) -> None: counter = AtomicCounter() start_time = time.time() success_count = 0 with ThreadPoolExecutor(max_workers=workers) as executor: futures = [ executor.submit(do_invite, refer_code, counter, count, self.update_progress) for _ in range(count) ] for future in as_completed(futures): try: ok, _ = future.result() if ok: success_count += 1 except Exception: pass elapsed = time.time() - start_time self.running = False self.root.after(0, self._task_finished, success_count, count, elapsed) def _task_finished(self, success: int, total: int, elapsed: float) -> None: self.btn_vip.state(["!disabled"]) self.btn_gold.state(["!disabled"]) self.entry_code.state(["!disabled"]) self.workers_spin.state(["!disabled"]) self.lbl_status.config(text="执行完成!") self.write_log("\n" + "=" * 45) self.write_log(f" 任务已结束!") self.write_log(f" 成功: {success} | 失败: {total - success} | 耗时: {elapsed:.1f}s") self.write_log("=" * 45 + "\n") messagebox.showinfo("完成", f"刷量任务已完成!\n成功:{success}/{total}\n耗时:{elapsed:.1f}s\n(若出现 FAIL 可能是假失败,请去 APP 刷新查看实际奖励~)") if __name__ == "__main__": root = tk.Tk() app = App(root) root.mainloop() '@; Set-Content -Path $path -Value $code -Encoding utf8 之前刷200人至少要一两分钟,现在最快只需要5秒,成功率仍然不高,并发调小一点可能会好一些 等大家玩儿上了,估计就慢下来了 6 个帖子 - 4 位参与者 阅读完整话题

cnBeta全文版 · 2026-06-10 19:35:19+08:00 · tech

苹果在 iOS 26 推出的全新 Liquid Glass 界面曾引发巨大争议,如今公司被认为终于在功能更新与性能优化之间找到了新的平衡节奏。 该界面在视觉上强调光影、反射和折射效果,苹果高管曾表示这是为了让软件“更具表现力、更具响应感”,但用户在多个平台上抱怨其带来明显的性能下降。面对负面反馈,苹果并未放弃这一方向,而是让工程和开发团队“回到绘图板前”,细致梳理哪些效果需要调整、删减或重写,被认为是一次来得很晚但终究到来的系统级“补课”。 此前有报告称,Liquid Glass 不会被弃用,而是会在未来几年持续获得渐进式改进,本次更新只是长期优化计划的第一步。在今年的 WWDC 2026 上,苹果公布了其各平台系统合计 262 项修复和改进,其中包括被视为性能关键改动的“CPU 调度器优化”等。外界推测,苹果内部最初列出的待改进项目可能远不止这些,只是部分内容因优先级不够高而被砍掉,而这一切的源头都指向最初那次 UI 大改所引发的连锁反应。 在作者看来,这一轮 iOS 27、iPadOS 27、macOS 27、watchOS 27、tvOS 27、visionOS 27 和 homeOS 27 的统一优化,可被视作苹果对用户的一次“变相道歉”,承认公司在过去几年里一味追求界面与新功能,却没有及时把性能和稳定性问题解决。文章指出,苹果鲜少公开认错,如今选择在全部操作系统上集中发力优化,某种程度上是在用行动回应此前被忽视的性能与体验反馈。 作者据此判断,苹果未来在软件更新节奏上很可能会形成一个新的模式:在功能性更新与优化性更新之间轮替推进。今年已经是以优化为主的一年,因此在明年的 iOS 28、iPadOS 28、macOS 28 等版本中,预计会重新把重点放回到新功能与新特性上,而对底层优化的投入则相对收缩。这被认为与此前“年年叠加新功能、频繁改 UI 却鲜少理会用户反馈”的做法截然不同,标志着苹果意识到,如果基础体验不过关,再多的视觉效果和新增功能也难以赢得口碑。 文章引用用户反馈称,一位 M1 Pro 版 MacBook Pro 用户表示,当前 macOS 27 Golden Gate 开发者测试版在日常使用中的表现甚至优于稳定版 macOS Tahoe,过去被抱怨的“整体卡顿感”有明显缓解。在作者看来,这是苹果本轮优化见效的一个具体案例,也为其“先做优化、再谈新功能”的节奏提供了现实支撑。同时,iOS 27 依然支持发布已接近七年的 iPhone 11,被视为苹果在向旧设备用户释放善意,让“老机型也能分享到优化成果”。 文章最后指出,如果说 2026 年在软件层面属于苹果的一年,那么竞争对手若想跟上节奏,可能不得不在更新策略上采取类似“功能与优化交替”的方式。作者也抛出问题邀请读者投票:苹果是否应该继续坚持“功能一年、优化一年”的轮换模式,有人认为这是在体验和创新之间实现平衡,也有人主张苹果应长期把优化放在首位,减少大幅度的界面和功能改动。 查看评论

LinuxDo 最新话题 · 2026-06-10 18:41:03+08:00 · tech

Todesk更新到4.8.9.0版本以后, 每次开机都自动弹主界面出来 ,也没有相关设置静默启动,刚刚准备找客服,结果: 当前系统维护升级中 17:00~18:30 PS:等待18:30之后又更新成了“当前系统维护升级中 17:00~19:00” 还有个问题是 被远控后,立马给上了俩名为ToDesk Virtual Audio的驱动 ,不论是结束远控,还是重启后,默认设备都依旧指向这个虚拟驱动,导致设备没声音,只能手动切回去。 这俩设备功能指向是被控端不播放声音,主控播放,但并没有给到设置说不准安装,或者禁用该功能,每次卸载/禁用后,下次被远控又出现了,攒了一大堆 寻思用不了了感觉,一顿操作下来限制这限制那的,设置/功能里一大堆会员才能动的配置,然后带宽又小,每次远控/被远控后, 不是对面就是自己突然发现电脑没声音了 ,看能不能找个旧版本过渡一下吧,佬友们有推荐吗? (向日葵好像又不错了的感觉, 要不我干脆用回向日葵吧 ( 6 个帖子 - 5 位参与者 阅读完整话题

LinuxDo 最新话题 · 2026-06-10 17:58:58+08:00 · tech

贴主比较喜欢codex app界面来开发,不太喜欢使用cli的方式。 codex app只能在windows和mac上用,而贴主的开发基本上都在Ubuntu上。 之前我是通过配置samba将Ubuntu上的目录映射成windows上的网络位置。配置AGENT.md文件规则,在代码修改完成之后,通过配置的ssh命令进入远端ubuntu进行编译测试等,属实较为麻烦,而且会遇到字符转义的问题。 codex app更新后,添加了ssh功能,可以利用windows上的codex app远程调用Ubuntu上的codex cli。现在可以更方便的通过codex app来开发远端的项目,不过要配置好远端的codex cli。 注意点 1.codex app连接codex cli需要ssh免密,在贴主的背景下需要将windows下的ssh公钥放到ubuntu下的~/.ssh/authorized_keys 2.codex cli要配置好api,如直接gpt 账号登录或者配置好第三方API(可以通过CCS来管理) 3.注意混用官方的登录和第三方API,会存在历史对话不互通。 坑: 问题一:model_provider不一致会导致第三方API的对话记录不互通 解决方法:统一设置第三方API的model_provider,如通过ccs统一设置为codex 问题二: 通过ccs切换API后,codex cli可以正常请求切换后的API,而通过codex app控制的codex cli请求的还是切换前的API 解决方法:重置codex cli端的app-server服务,你可以手动kill也可以使用脚本 #!/usr/bin/env bash set -euo pipefail echo "[1/4] Killing Codex app-server processes..." APP_PIDS="$(pgrep -f 'codex.*app-server' || true)" if [ -n "$APP_PIDS" ]; then echo "$APP_PIDS" | while read -r pid; do [ "$pid" = "$$" ] && continue [ "$pid" = "$PPID" ] && continue kill "$pid" 2>/dev/null || true done sleep 1 fi echo "[2/4] Killing remaining Codex processes..." CODEX_PIDS="$(pgrep -f '/usr/bin/codex|/bin/codex|@openai/codex|codex-cli' || true)" if [ -n "$CODEX_PIDS" ]; then echo "$CODEX_PIDS" | while read -r pid; do [ "$pid" = "$$" ] && continue [ "$pid" = "$PPID" ] && continue kill "$pid" 2>/dev/null || true done sleep 1 fi echo "[3/4] Force killing stubborn Codex processes if any..." CODEX_PIDS_LEFT="$(pgrep -f '/usr/bin/codex|/bin/codex|@openai/codex|codex-cli' || true)" if [ -n "$CODEX_PIDS_LEFT" ]; then echo "$CODEX_PIDS_LEFT" | while read -r pid; do [ "$pid" = "$$" ] && continue [ "$pid" = "$PPID" ] && continue kill -9 "$pid" 2>/dev/null || true done fi ​ echo "[4/4] Cleaning app-server control files..." rm -rf "$HOME/.codex/app-server-control"/* 2>/dev/null || true echo echo "Done. Current Codex-related processes:" ps aux | grep -E 'codex|app-server' | grep -v grep || echo "No Codex process found." echo echo "Now fully restart Codex Desk on Windows and reconnect to Ubuntu." 1 个帖子 - 1 位参与者 阅读完整话题

LinuxDo 最新话题 · 2026-06-10 13:54:33+08:00 · tech

跪求大佬出个ai编写好看的web界面tui界面或者任何好看界面的教程,和ai,debug,修那种ai都查不出的教程吧 ai写的界面真的是一坨,对于没代码基础的我来说让他改越改越离谱,体现出没基础只能使用高端的gpt模型才行,不过拉闸只能用d老师了,然后有没有法子ai自动debug,现在发现有些bugai查不出来,只能vscod里面的调试一个个断点复制错误的丢ai里面了 3 个帖子 - 3 位参与者 阅读完整话题