吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2918|回复: 29
收起左侧

[Python 转载] 微信软件多开器,某些软件无法多开

  [复制链接]
a87946001 发表于 2025-9-19 16:24
本帖最后由 a87946001 于 2025-9-24 09:02 编辑

最近看到一位老哥写了一个python的多开源码,然后想着能不能套个UI界面,在此基础上写的,测试了一下,记事本和微信多开都可以,其他更多并未测试,如果有写的不好的地方指正指正,原文链接https://www.52pojie.cn/thread-2012350-1-11.html
import os
import ctypes
from ctypes import wintypes
import tkinter as tk
from tkinter import filedialog

# 加载必要的 Windows API 函数
kernel32 = ctypes.WinDLL('kernel32', use_last_error=True)
advapi32 = ctypes.WinDLL('advapi32', use_last_error=True)

# 定义常量
SECURITY_WORLD_SID_AUTHORITY = (0, 0, 0, 0, 0, 1)  # SID 标识符
SECURITY_WORLD_RID = 0  # 世界 SID 的 RID
ACL_REVISION = 2  # ACL 版本
SE_KERNEL_OBJECT = 6  # 内核对象类型
DACL_SECURITY_INFORMATION = 0x00000004  # DACL 安全信息标志
MUTEX_ALL_ACCESS = 0x1F0001  # 互斥体的完全访问权限

# 定义函数参数和返回类型
kernel32.CreateMutexW.argtypes = [wintypes.LPVOID, wintypes.BOOL, wintypes.LPCWSTR]
kernel32.CreateMutexW.restype = wintypes.HANDLE

advapi32.AllocateAndInitializeSid.argtypes = [
    ctypes.POINTER(ctypes.c_byte),  # SID_IDENTIFIER_AUTHORITY
    ctypes.c_byte,  # SubAuthorityCount
    ctypes.c_ulong, ctypes.c_ulong, ctypes.c_ulong, ctypes.c_ulong,
    ctypes.c_ulong, ctypes.c_ulong, ctypes.c_ulong, ctypes.c_ulong,
    ctypes.POINTER(ctypes.c_void_p)  # PSID
]
advapi32.AllocateAndInitializeSid.restype = wintypes.BOOL

advapi32.InitializeAcl.argtypes = [wintypes.LPVOID, wintypes.DWORD, wintypes.DWORD]
advapi32.InitializeAcl.restype = wintypes.BOOL

advapi32.AddAccessDeniedAce.argtypes = [wintypes.LPVOID, wintypes.DWORD, wintypes.DWORD, wintypes.LPVOID]
advapi32.AddAccessDeniedAce.restype = wintypes.BOOL

advapi32.SetSecurityInfo.argtypes = [
    wintypes.HANDLE, wintypes.DWORD, wintypes.DWORD, wintypes.LPVOID, wintypes.LPVOID,
    wintypes.LPVOID, wintypes.LPVOID
]
advapi32.SetSecurityInfo.restype = wintypes.DWORD

class OpenPage:
    def __init__(self, master):
        self.root = master
        self.root.geometry('600x400')
        self.root.iconbitmap(r"I:\python_code\students\bitbug_favicon.ico")
        self.root.title('程序多开器 v0.0.1')
        self.page = tk.Frame(self.root)
        self.page.pack()
        tk.Label(self.page).grid(row=0, column=0, pady=50)  # 空白标签
        self.label1 = tk.Label(self.page, text='路径:')
        self.label1.grid(row=1, column=1, pady=10)  # 第一行第一列标签
        self.path = tk.StringVar()  # 定义变量
        self.label2 = tk.Label(self.page)
        self.label2.grid(row=1, column=2, pady=10)  # 第一行第二列输入框
        tk.Button(self.page, text='获取', command=self.get_path).grid(row=4, column=1)  # 第三行第一列按钮
        self.num = tk.StringVar()  # 定义变量
        tk.Label(self.page, text='数量:').grid(row=3, column=1, pady=10)  # 第二行第一列标签
        tk.Entry(self.page, textvariable=self.num).grid(row=3, column=2, pady=10)  # 第二行第二列输入框
        tk.Button(self.page, text='打开', command=self.mains).grid(row=4, column=2, stick=tk.E)  # 第三行第二列按钮

    def get_path(self):
        self.folder_path = filedialog.askopenfilename()
        self.label2.config(text=self.folder_path)

    def Create_wechat_Mutex(self):
        # 创建一个互斥体,微信使用该互斥体确保单实例运行
        h_mutex = kernel32.CreateMutexW(None, False, "_WeChat_App_Instance_Identity_Mutex_Name")
        if not h_mutex:
            raise ctypes.WinError(ctypes.get_last_error())

        # 定义 SID_IDENTIFIER_AUTHORITY 结构
        sid_auth_world = (ctypes.c_byte * 6)(*SECURITY_WORLD_SID_AUTHORITY)

        # 为 Everyone 组分配并初始化 SID
        p_everyone_sid = ctypes.c_void_p()
        if not advapi32.AllocateAndInitializeSid(
                ctypes.cast(ctypes.byref(sid_auth_world), ctypes.POINTER(ctypes.c_byte)),
                # 正确传递 SID_IDENTIFIER_AUTHORITY
                1,  # SubAuthorityCount
                SECURITY_WORLD_RID, 0, 0, 0, 0, 0, 0, 0,  # SubAuthorities
                ctypes.byref(p_everyone_sid)  # PSID
        ):
            raise ctypes.WinError(ctypes.get_last_error())

        # 初始化 ACL
        sz_buffer = (ctypes.c_byte * 4096)()
        p_acl = ctypes.cast(sz_buffer, ctypes.POINTER(ctypes.c_byte))
        if not advapi32.InitializeAcl(p_acl, ctypes.sizeof(sz_buffer), ACL_REVISION):
            raise ctypes.WinError(ctypes.get_last_error())

        # 向 ACL 添加拒绝访问的 ACE(访问控制条目)
        if not advapi32.AddAccessDeniedAce(p_acl, ACL_REVISION, MUTEX_ALL_ACCESS, p_everyone_sid):
            raise ctypes.WinError(ctypes.get_last_error())

        # 设置互斥体的安全信息,修改其 ACL
        result = advapi32.SetSecurityInfo(
            h_mutex, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, None, None, p_acl, None
        )
        if result != 0:
            raise ctypes.WinError(result)

    def mains(self):
        try:
            open_wx_num = int(self.num.get())
        except:
            open_wx_num = 1

        path = self.folder_path
        try:
            self.Create_wechat_Mutex()
        except:
            pass

        for i in range(open_wx_num):
            os.startfile(path)

if __name__ == '__main__':
    root = tk.Tk()
    OpenPage(root)
    root.mainloop()

打包好的网盘链接:通过网盘分享的文件:多开.exe
链接: https://pan.baidu.com/s/1q_aI6QaW0jZ-nupkgbUbjw?pwd=bmp2 提取码: bmp2

4936785a-39dc-427b-8314-0750aaebbeba.png

免费评分

参与人数 3吾爱币 +3 热心值 +3 收起 理由
L1ang2 + 1 + 1 谢谢@Thanks!
苏紫方璇 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
daoye9988 + 1 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

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

影风 发表于 2025-9-24 11:18

WeChat_App_Instance_Identity_Mutex_Name

这个互斥体仅仅对微信有效 其他程序用这个工具也能多开?
cioceo 发表于 2025-9-19 17:40
danslamer 发表于 2025-9-19 19:27
liwulin6418 发表于 2025-9-19 19:43

感谢原创,试试
cfg104 发表于 2025-9-19 20:00
支持原创
rjyq168 发表于 2025-9-19 20:54
danslamer 发表于 2025-9-19 19:27
点赞,这源码刚好拿来学习

请问代码怎么用?
超逸绝尘 发表于 2025-9-19 22:37
PC端的微信,支持多开就比较好了
oneday11111 发表于 2025-9-19 22:59
有用码一下
心海陌 发表于 2025-9-19 23:01
怎么用这个代码
风经过 发表于 2025-9-20 10:37
期待EXE文件
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2026-6-4 06:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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