吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1083|回复: 23
收起左侧

[原创工具] 连连控远程退出之后锁屏

[复制链接]
yarkee 发表于 2024-11-13 21:18

由来:

因为连连控官方的结束控制之后的锁屏需要付费,所以变相的使用本文的方式来实现这个功能,肯定没有原来的丝滑和准确,但是勉强够用。不会造成什么影响,因为这个软件需要在被控端安装与官方原理不同。

软件功能介绍:

  1. 常驻后台,循环检测连连控窗口以及进程
  2. 没有任务栏图标以及窗口图标显示,可以放在电脑自启动文件夹自启动,也可双击手动启动。
  3. 启动完成想要关闭,必须任务管理器关闭。
  4. 软件启动期间作为被控端,如果控制端连接断开之后,自动锁屏,目前没有设置界面。直接双击运行
  5. 双击运行之后没有任何干扰,唯一的干扰就是,可能判断不了是被控还是控制时会弹出一个确认的弹框。
  6. 此软件完全使用Python编写,没有任何远程联网操作,全部在本地进行。

原理:

  1. 连连控的进程名称是“连连控”或者“AskLink.exe”
  2. 连连控的控制窗口名称是“连连控”
  3. 通过检测进程以及窗口的变化来辨识是否被控结束。

运行图片:

软件名称

任务管理器截图

确认弹窗

下载地址:

蓝奏云下载链接 https://wwoh.lanzouw.com/ivOEd2ezbw5a

请认准此贴,此链接为原创一手网盘链接,保证无毒。其他任何地方本工具均不保证。

附录

代码如下,不放心可以自行编译。此贴只在吾爱破解原创发布。

import psutil
import pygetwindow as gw
import ctypes
import time
import threading
import tkinter as tk
from tkinter import messagebox
from win10toast import ToastNotifier

# 常量
# 支持不同电脑上的进程名称
PROCESS_NAME = ["连连控", "AskLink.exe"]  # 连连控进程名称可以是“连连控”或“AskLink.exe”
WINDOW_NAME = "连连控"  # 连连控控制窗口名称

# 用于存储PID
latest_pids = set()
normal_pids = set()
controlled_pids = set()
controlling_pids = set()
shoudongpanduan = 0 # 用于标记是否需要弹出确认窗口,手动判断是否被控

def set_process_name(name):
    """设置进程名称"""
    try:
        ctypes.windll.kernel32.SetConsoleTitleW(name)
    except Exception as e:
        print(f"无法修改进程名称: {e}")

def lock_screen():
    """模拟锁屏操作"""
    ctypes.windll.user32.LockWorkStation()

def get_process_pids(process_names):
    """获取指定进程的所有PID(支持多个进程名称)"""
    pids = set()
    for proc in psutil.process_iter(attrs=['pid', 'name']):
        if proc.info['name'] in process_names:
            pids.add(proc.info['pid'])
    return pids

def get_window_count(window_name):
    """获取指定窗口名称的窗口数量(完全匹配)"""
    windows = gw.getWindowsWithTitle(window_name)
    return len([win for win in windows if win.title == window_name])

def show_confirm_dialog():
    """弹出确认框,询问用户是否正在被控"""
    root = tk.Tk()
    root.withdraw()  # 隐藏主窗口

    # 创建一个新的顶级窗口,并使其置顶
    top = tk.Toplevel(root)
    top.withdraw()
    top.attributes('-topmost', True)  # 设置窗口置顶
    response = messagebox.askyesno("确认", "无法判断状态,是否正在被控?", parent=top)

    top.destroy()  # 在对话框关闭后销毁顶级窗口
    return response

def show_notification(title, message):
    """使用 win10toast 显示通知"""
    toaster = ToastNotifier()
    toaster.show_toast(title, message, duration=10)  # 持续10秒

def check_state():
    """检查当前系统状态"""
    global normal_pids, controlled_pids, controlling_pids, latest_pids, shoudongpanduan

    # 获取当前“连连控”进程的PID
    current_pids = get_process_pids(PROCESS_NAME)
    window_count = get_window_count(WINDOW_NAME)

    if current_pids == latest_pids:
        return
    else:
        is_lock = True
        # 获取任务管理器中的进程数量
        current_process_count = len(current_pids)
        print(window_count)

        # 判断不同状态
        if window_count == 0:
            if current_process_count == 3 or current_process_count == 2:
                # 正常状态
                normal_pids = current_pids

        # 判断不同状态
        elif window_count == 1:
            if current_process_count == 5:
                # 处于“被控”状态
                controlled_pids = current_pids
            elif current_process_count == 3:
                # 正常状态
                normal_pids = current_pids
        elif window_count == 2:
            if current_process_count == 5:
                # 处于“控制别人”状态
                print("处于“控制别人”状态")
                shoudongpanduan = 1 if show_confirm_dialog() else 0
                if not shoudongpanduan:
                    controlling_pids = current_pids
                else:
                    is_lock = False
            elif current_process_count == 7:
                # 处于“既被控又控制别人”状态
                controlled_pids = current_pids
                controlling_pids = current_pids
                is_lock = False
        else:
            # 无法判断,弹出确认窗口
            print("无法判断状态,弹出确认窗口")
            shoudongpanduan = 1 if show_confirm_dialog() else 0
            is_lock = False

        print(normal_pids, controlled_pids, controlling_pids)
        print(current_pids, latest_pids)

        # 如果检测到“被控结束”,锁屏
        if (controlled_pids and (latest_pids == controlled_pids)) or (shoudongpanduan and is_lock):
            print("检测到被控结束,锁屏")
            lock_screen()
            controlled_pids = set()
            shoudongpanduan = 0

        latest_pids = current_pids

def monitor():
    """循环检测进程和窗口状态"""
    while True:
        check_state()
        time.sleep(5)  # 每隔5秒检查一次状态

def run_in_background():
    """在后台运行应用程序"""
    # 使用后台线程来运行监控任务
    monitoring_thread = threading.Thread(target=monitor, daemon=True)
    monitoring_thread.start()

    # 保持应用常驻,但不显示任务栏图标
    while True:
        time.sleep(100)  # 让主线程保持活跃

if __name__ == "__main__":
    # set_process_name("llkAutoLock")  # 设置进程名称
    # show_notification("程序启动", "llkAutoLock 程序已成功启动并正在运行。")  # 启动时通知
    run_in_background()

免费评分

参与人数 6吾爱币 +11 热心值 +6 收起 理由
QiDuYu + 1 + 1 热心回复!
feiyang2024 + 1 + 1 谢谢@Thanks!
auwya + 1 + 1 热心回复!
confiant + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
tengzhou22 + 1 + 1 热心回复!
风之暇想 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

hnjzwxy 发表于 2024-11-15 08:10
厉害厉害,学习一下
zsf198678 发表于 2024-11-15 09:49
yutongyue1983 发表于 2024-11-15 10:09
cococ2024 发表于 2024-11-15 10:59
感谢分享,无私奉献,学习一下
xuxiangxi 发表于 2024-11-15 11:16

感谢楼主分享
感谢分享,无私奉献,学习一下
 楼主| yarkee 发表于 2024-11-15 11:34
yutongyue1983 发表于 2024-11-15 10:09
感谢 话说连连控也是一个免费远程控制么?

是的感觉很好用,免费版都挺能打的
auwya 发表于 2024-11-15 11:40
厉害厉害,学习一下
justices 发表于 2024-11-15 12:36
感谢分享,正在用这个软件👍
huang4312 发表于 2024-11-15 13:12
感谢分享,谢谢。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-22 06:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表