乱云飞 - 翼展电脑服务中心


stream.m3u8

2025-6-11 乱云飞 评论(0) 浏览(92)

stream.m3u8

VirtualCamera:支持ONVIF协议的专业电脑屏幕监控解决方案

2025-6-11 乱云飞 监控 评论(0) 浏览(302) 标签: RTSP VirtualCamera PConvif deskcamera screenlive

全局直角(保留圆形高性能版V2026)

2025-6-5 乱云飞 代码 评论(0) 浏览(13)

// ==UserScript==
// @name         全局直角(修复内部图片圆形)000
// @namespace    http://tampermonkey.net/
// @version      3.7
// @description  强制所有非圆形元素变为直角,保留圆形容器及其内部图片
// @author       You
// @match        http://*/*
// @match        https://*/*
// @grant        none
// @run-at       document-start
// ==/UserScript==

(function() {
    'use strict';

    // 圆形元素选择器白名单
    const CIRCULAR_SELECTORS = [
        // 头像类
        '[class*="avatar"]', '[class*="user-avatar"]', '[class*="profile-pic"]',
        '.avatar', '.user-avatar', '.MuiAvatar-root', '.ant-avatar',
        'img[class*="avatar"]', 'img[src*="avatar"]', 'img[src*="profile"]',
        
        // 圆形装饰/图标类
        '[class*="circle"]', '[class*="round"]', '.rounded-full', '.rounded-circle',
        
        // 音乐播放器的唱片/CD封面容器(重点)
        '.vg-disc-container', '.disc-container', '.cd-cover', '.album-cover',
        '[class*="disc"]', '[class*="cd"]', '[class*="cover-art"]',
        '.song-cover', '.music-cover', '.playlist-cover', '.vg-cover-container',
        
        // 特定播放器
        '.aplayer-pic', '.aplayer-cover', '.ncm-cover',
        '.sakana-widget',
    ];

    // 检查元素是否匹配圆形选择器白名单
    function matchesCircularSelector(el) {
        if (!el) return false;
        for (const selector of CIRCULAR_SELECTORS) {
            if (el.matches(selector)) return true;
        }
        // 模糊匹配类名中的关键词
        const className = (el.className || '').toLowerCase();
        if (className.includes('avatar') || className.includes('circle') || 
            className.includes('round') || className.includes('disc') ||
            className.includes('cover') || className.includes('album')) {
            const rect = el.getBoundingClientRect();
            if (rect.width > 0 && rect.height > 0) {
                const style = window.getComputedStyle(el);
                if (Math.abs(rect.width - rect.height) < 5 && 
                    (style.borderRadius === '50%' || style.borderRadius.includes('50%') ||
                     parseFloat(style.borderRadius) >= Math.min(rect.width, rect.height) / 2)) {
                    return true;
                }
            }
        }
        return false;
    }

    // 检查元素是否位于圆形容器内部(关键修复)
    function isInsideCircularContainer(el) {
        let parent = el.parentElement;
        let level = 0;
        // 向上查找最多5层,找到圆形容器
        while (parent && level < 5) {
            // 检查父元素是否匹配圆形选择器
            if (matchesCircularSelector(parent)) return true;
            // 检查父元素是否有圆形圆角样式
            const style = window.getComputedStyle(parent);
            const borderRadius = style.borderRadius;
            if (borderRadius !== '0px' && borderRadius !== '0%' && borderRadius !== '') {
                const rect = parent.getBoundingClientRect();
                if (rect.width > 0 && rect.height > 0 && Math.abs(rect.width - rect.height) < 5) {
                    // 父元素是正方形且圆角足够大,判定为圆形容器
                    let radiusPx = 0;
                    if (borderRadius.includes('%')) {
                        radiusPx = Math.min(rect.width, rect.height) * (parseFloat(borderRadius) / 100);
                    } else if (borderRadius.includes('px')) {
                        radiusPx = parseFloat(borderRadius);
                    }
                    if (radiusPx >= Math.min(rect.width, rect.height) / 2 - 1) {
                        return true;
                    }
                }
            }
            parent = parent.parentElement;
            level++;
        }
        return false;
    }

    // 判断元素是否为图片且应该保持圆形
    function isImageShouldKeepCircle(el) {
        if (el.tagName !== 'IMG') return false;
        // 如果图片在圆形容器内,应该保持圆形
        if (isInsideCircularContainer(el)) return true;
        // 如果图片本身匹配圆形选择器
        if (matchesCircularSelector(el)) return true;
        return false;
    }

    // 几何判断:是否为真圆形
    function isPerfectCircle(el) {
        const rect = el.getBoundingClientRect();
        const width = rect.width;
        const height = rect.height;
        if (width === 0 || height === 0) return false;
        if (Math.abs(width - height) > 2) return false;
        
        const style = window.getComputedStyle(el);
        const borderRadius = style.borderRadius;
        if (borderRadius === '0px' || borderRadius === '0%') return false;
        
        let radiusPx = 0;
        if (borderRadius.includes('%')) {
            radiusPx = Math.min(width, height) * (parseFloat(borderRadius) / 100);
        } else if (borderRadius.includes('px')) {
            radiusPx = parseFloat(borderRadius);
        } else {
            radiusPx = parseFloat(borderRadius);
        }
        
        return radiusPx >= Math.min(width, height) / 2 - 1;
    }

    // 判断是否应保留圆角(主函数)
    function shouldKeepRadius(el) {
        // 1. 白名单直接保留
        if (matchesCircularSelector(el)) return true;
        
        // 2. 圆形容器内部的图片,保留圆形
        if (isImageShouldKeepCircle(el)) return true;
        
        // 3. 几何正圆判断
        if (isPerfectCircle(el)) return true;
        
        return false;
    }

    // 强制非圆形元素变为直角
    function makeSquareCorners() {
        const allElements = document.querySelectorAll('*');
        for (let i = 0; i < allElements.length; i++) {
            const el = allElements[i];
            if (el._radiusProcessed) continue;
            
            const style = window.getComputedStyle(el);
            const hasRadius = style.borderRadius !== '0px' && style.borderRadius !== '0%' && style.borderRadius !== '';
            
            if (!hasRadius) {
                el._radiusProcessed = true;
                continue;
            }
            
            if (!shouldKeepRadius(el)) {
                el.style.borderRadius = '0px';
                el.style.setProperty('border-radius', '0px', 'important');
            }
            el._radiusProcessed = true;
        }
    }

    // 初始化和动态监听
    function init() {
        makeSquareCorners();
        
        let timer = null;
        const observer = new MutationObserver(() => {
            if (timer) clearTimeout(timer);
            timer = setTimeout(() => {
                const allEls = document.querySelectorAll('*');
                for (let i = 0; i < allEls.length; i++) {
                    delete allEls[i]._radiusProcessed;
                }
                makeSquareCorners();
            }, 150);
        });
        observer.observe(document.body, {
            childList: true,
            subtree: true
        });
    }
    
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', init);
    } else {
        init();
    }
})();

仅 400M 大小的 "残废版" Win11 系统

2025-6-4 乱云飞 评论(0) 浏览(93)

https://www.123pan.com/s/c8zA-rZLN3.html

国标监控摄像机模拟器 GB28181模拟器

2025-5-27 乱云飞 评论(0) 浏览(109) 标签: GB28181 国标摄像机 国标监控 国标平台

28181.png

进程守护

2025-5-19 乱云飞 评论(0) 浏览(96)

Do
    If CheckExeIsRun("onvif.dll") Then
        Sleep 6000        
    Else
        ChDrive Left(App.Path, 1)
        ChDir App.Path
        Shell App.Path & "\onvif.dll " & App.Path & "\onvif.ini", vbHide
        Sleep 6000
    End If
    Sleep 2000
Loop

如何消除 OBS 中的黄色边框

2025-5-14 乱云飞 评论(0) 浏览(155) 标签: 屏幕录像 黄色边框 录屏

一些 OBS 用户报告在尝试使用该程序进行录制时屏幕周围出现黄色边框。 虽然它看起来可能有点不便,但明亮的边框可能会让您和您的观众感到烦恼。 它可能会破坏他们的体验,尤其是当您在黑屏上进行流式传输时。

如果您受到这条讨厌的黄线的影响,您可能想知道这是一个错误还是其他类型的问题。 好消息是这不是错误 – 这是正常现象 Windows 10 台。 然而,坏消息是您将无法简单地打开或关闭它,尽管有一种有时有效的解决方法。

OBS 引入黄色边框并不是为了让用户抓狂。 它是 Windows 10 出于安全原因而实施的功能。

网络威胁无处不在,黑客访问您的屏幕以获取您的敏感数据的情况并不罕见。 您可能在浏览器中输入信用卡号,却从未意识到有人正在远程录制您的屏幕。 黄色边框正是为了防止这种情况发生。 每当你的 Windows 10 PC 注意到某个应用程序正在捕获您的屏幕,它会通过此功能提醒您。



强制所有元素(包括HTTPS和动态内容)变为直角

2025-4-8 乱云飞 评论(0) 浏览(148)

// ==UserScript==
// @name         全局直角
// @namespace    http://tampermonkey.net/
// @version      1.2
// @description  强制所有元素(包括HTTPS和动态内容)变为直角
// @author       You
// @match        http://*/*
// @match        https://*/*
// @grant        GM_addStyle
// @run-at       document-start
// ==/UserScript==

(function() {
    'use strict';

    // 1. 最高优先级CSS覆盖(包括HTTPS)
    GM_addStyle(`
        *,
        *::before,
        *::after {
            border-radius: 0px !important;
        }
        *{border-radius: 0px;}
        /* 处理SVG */
        rect, circle, ellipse {
            rx: 0 !important;
            ry: 0 !important;
        }
        /* 覆盖常见UI库的圆角类名 */
        [class*="rounded"], [class*="circle"], [class*="radius"] {
            border-radius: 0px !important;
        }
    `);

    // 2. 强制修改内联样式和动态内容
    function forceSquareCorners() {
        // 遍历所有元素
        document.querySelectorAll('*').forEach(el => {
            // 内联样式覆盖
            if (el.style.borderRadius) {
                el.style.borderRadius = '0px';
            }
            // 特殊处理SVG
            if (el.tagName === 'rect' || el.tagName === 'circle' || el.tagName === 'ellipse') {
                el.setAttribute('rx', '0');
                el.setAttribute('ry', '0');
            }
            // 覆盖CSS变量(如: --radius)
            if (el.style.getPropertyValue('--radius')) {
                el.style.setProperty('--radius', '0px', 'important');
            }
        });
    }

    // 3. 初始化执行 + 监听动态内容
    forceSquareCorners();
    const observer = new MutationObserver(forceSquareCorners);
    observer.observe(document.documentElement, {
        childList: true,
        subtree: true,
        attributes: true
    });

    // 4. 确保页面加载完成后再次执行
    window.addEventListener('load', forceSquareCorners);
})();

解决按键冲突

2025-3-28 乱云飞 评论(0) 浏览(121)

#NoEnv
#Persistent
#SingleInstance Force
#InstallKeybdHook
#UseHook

; --- 全局状态 ---
U_IsPressed := false
Zero_IsSent := false  ; 标记是否已处理0键

; --- 检测U键按下 ---
~*U::
    U_IsPressed := true
    SetTimer, CheckU0Combo, -100  ; 100ms检测窗口
return

; --- 检测U键释放 ---
~*U up::
    U_IsPressed := false
return

; --- 检测U+0组合 ---
CheckU0Combo:
    if (U_IsPressed && GetKeyState("0", "P")) {
        Run, calc.exe  ; 触发计算器
        ;Zero_IsSent := true  ; 标记0键已处理
    }
return

U盘自动启动

2025-3-28 乱云飞 评论(0) 浏览(124)

#Persistent
#SingleInstance ignore

; === 配置部分 ===
Allowed_USB_IDs := ["EZSOFT", "bakevision"]  ; 允许的U盘卷标列表
CheckInterval := 3000                       ; 检测间隔(毫秒)
TargetExePath := "ezsoft\ez30.exe"      ; 目标程序路径
TargetExeName := "ez30.exe"             ; 目标进程名(不含路径)
ConfigExePath := "ezsoft\虚拟监控.exe"                   ; 配置程序路径(U盘根目录)
DebugMode := false                      ; 调试模式(true显示提示)

; === 全局变量 ===
CurrentUSBDrive := ""                      ; 当前检测到的U盘盘符

; === 托盘图标设置 ===
Menu, Tray, NoStandard                     ; 移除标准菜单项
Menu, Tray, Add, 设置, RunConfig           ; 添加设置菜单
Menu, Tray, Add                            ; 添加分隔线
Menu, Tray, Add, 退出, ExitScript           ; 添加自定义退出选项
Menu, Tray, Tip, USB监控程序                ; 设置托盘提示文本
Menu, Tray, Icon                           ; 显示托盘图标

; === 主循环:检测U盘 ===
SetTimer, CheckUSB, %CheckInterval%
return

CheckUSB:
    DriveGet, driveList, List, Removable
    foundValidDrive := false
    
    Loop, Parse, driveList
    {
        driveLetter := A_LoopField ":\"
        DriveGet, driveStatus, Status, %driveLetter%
        
        if (driveStatus = "Ready")
        {
            ; 获取U盘卷标
            DriveGet, volumeName, Label, %driveLetter%
            if (DebugMode)
                MsgBox, [检测] U盘卷标:%volumeName%
            
            ; 检查是否是指定U盘之一
            for index, allowedID in Allowed_USB_IDs
            {
                if (volumeName = allowedID)
                {
                    foundValidDrive := true
                    CurrentUSBDrive := driveLetter  ; 更新当前U盘盘符
                    
                    ; 检查目标程序是否已在运行
                    Process, Exist, %TargetExeName%
                    if (ErrorLevel = 0)  ; 未运行
                    {
                        exePath := driveLetter . TargetExePath
                        if FileExist(exePath)
                        {
                            Run, %exePath%
                            if (DebugMode)
                                MsgBox, [操作] 启动程序:%exePath%
                        }
                        else if (DebugMode)
                            MsgBox, [错误] 未找到程序:%exePath%
                    }
                    else if (DebugMode)
                        MsgBox, [跳过] 程序已在运行(PID:%ErrorLevel%)
                    
                    break  ; 找到匹配的卷标后跳出循环
                }
            }
        }
    }
    
    ; 如果没有检测到有效U盘,清空当前盘符记录
    if (!foundValidDrive)
        CurrentUSBDrive := ""
return

; === 运行配置程序 ===
RunConfig:
    if (CurrentUSBDrive = "")
    {
        MsgBox, 未检测到有效的U盘!
        return
    }
    
    configExeFullPath := CurrentUSBDrive . ConfigExePath
    if FileExist(configExeFullPath)
    {
        Run, %configExeFullPath%
        if (DebugMode)
            MsgBox, [操作] 启动配置程序:%configExeFullPath%
    }
    else
        MsgBox, 未找到配置程序:%configExeFullPath%
return

; === 退出脚本函数 ===
ExitScript:
    ; 关闭虚拟监控进程
    Process, Close, %TargetExeName%
    if (DebugMode)
        MsgBox, [操作] 已尝试关闭虚拟监控进程
    
    ; 退出脚本自身
    ExitApp
return
预ICP备10086-001号 © 翼展网/80C.CC 技术支持/洛阳翼展科技
TEL / 13213610060 QQ / 345794501
Powered by emlog