广告
广告
广告
广告
点击购买文字广告
点击购买文字广告
点击购买文字广告
点击购买文字广告
点击购买文字广告
点击购买文字广告
点击购买文字广告
点击购买文字广告
查看: 1196|回复: 0
收起左侧

[完全免费] 微信多开,微信多开小助手,电脑版微信多开小工具

[复制链接]
  • TA的每日心情
    开心
    2023-4-27 11:12
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    信息

    社区UID2

    发布主题2 篇

    在线时间:91 小时

    注册时间:2023-4-5

    等级

    Rank: 9Rank: 9Rank: 9

    等级:管理员

    积分

    威望:0

    金钱:0

    贡献:4

    积分97

    发表于 2023-4-11 09:42:33 | 显示全部楼层 |阅读模式
    插件信息
    插件名称: 微信多开,微信多开小助手,电脑版微信多开小工具
    插件类别: 群管类
    授权方式: 完全免费
    插件作者: 发布专员
    作者QQ:
    交流群号:
    因为经常需要一台电脑同时登陆多个微信,然而腾讯并不允许微信多开,搞得很不方便。

    网上的方案一般是通过批处理,同时启动多个微信再分别登陆。比如下面的*.bat文件代码:

    1. @echo off

    2. start "" "C:\Program Files (x86)\Tencent\WeChat\WeChat.exe"

    3. start "" "C:\Program Files (x86)\Tencent\WeChat\WeChat.exe"

    4. exit
    复制代码


    实际上,一旦登陆了微信,再用这种方法就失效了。只能退出微信再重新登陆,很不方便。
    1、程序员都知道,所谓的程序单开是通过Mutex互斥体实现的,只要杀掉这个互斥体,就可以实现程序的多开。

    2、论坛里大多微信多开工具都是用微软的句柄工具handle关闭微信互斥体实例,因此需要释放文件到临时目录;本工具将此功能完全重写,无需释放文件。

    3、本工具不易失效,支持批量多开、开机自启,只要内存够大,多开多少都 OK。

    4、Windows微信多开助手使用纯VC++编写,支持最新微信2023所有版本都可使用。



    1. // multiWechatDlg.cpp: 实现文件
    2. //

    3. #include "pch.h"
    4. #include "framework.h"
    5. #include "multiWechat.h"
    6. #include "multiWechatDlg.h"
    7. #include "afxdialogex.h"
    8. #include <aclapi.h>
    9. #include <shlwapi.h>
    10. #pragma comment(lib,"Shlwapi.lib")

    11. #ifdef _DEBUG
    12. #define new DEBUG_NEW
    13. #endif


    14. // 用于应用程序“关于”菜单项的 CAboutDlg 对话框

    15. class CAboutDlg : public CDialogEx
    16. {
    17. public:
    18.         CAboutDlg();

    19. // 对话框数据
    20. #ifdef AFX_DESIGN_TIME
    21.         enum { IDD = IDD_ABOUTBOX };
    22. #endif

    23.         protected:
    24.         virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

    25. // 实现
    26. protected:
    27.         DECLARE_MESSAGE_MAP()
    28. };

    29. CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
    30. {
    31. }

    32. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
    33. {
    34.         CDialogEx::DoDataExchange(pDX);
    35. }

    36. BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
    37. END_MESSAGE_MAP()


    38. // CmultiWechatDlg 对话框



    39. CmultiWechatDlg::CmultiWechatDlg(CWnd* pParent /*=nullptr*/)
    40.         : CDialogEx(IDD_MULTIWECHAT_DIALOG, pParent)
    41. {
    42.         m_hIcon = AfxGetApp()->LoadIcon(IDR_WECHAT);
    43. }

    44. void CmultiWechatDlg::DoDataExchange(CDataExchange* pDX)
    45. {
    46.         CDialogEx::DoDataExchange(pDX);
    47.         DDX_Control(pDX, IDC_CHECK_AUTOSTART, m_autoStart);
    48. }

    49. BEGIN_MESSAGE_MAP(CmultiWechatDlg, CDialogEx)
    50.         ON_WM_SYSCOMMAND()
    51.         ON_WM_PAINT()
    52.         ON_WM_QUERYDRAGICON()
    53.         ON_BN_CLICKED(IDC_BTN_STAR, &CmultiWechatDlg::StartWechat)
    54.         ON_WM_DESTROY()
    55.         ON_COMMAND(ID_ALL_EXIT, &CmultiWechatDlg::OnAllExit)
    56.         ON_BN_CLICKED(IDC_CHECK_AUTOSTART, &CmultiWechatDlg::OnBnClickedCheckAutostart)
    57.         ON_WM_CTLCOLOR()
    58.         //ON_EN_CHANGE(IDC_EDIT1, &CmultiWechatDlg::OnEnChangeEdit1)
    59. END_MESSAGE_MAP()


    60. // CmultiWechatDlg 消息处理程序

    61. void OutPutString(LPCWSTR strFormat, ...)
    62. {
    63.         if (NULL == strFormat)
    64.         {
    65.                 return;
    66.         }
    67.         TCHAR strInfo[4096] = { 0 };
    68.         va_list arg_ptr = NULL;
    69.         va_start(arg_ptr, strFormat);
    70.         vswprintf_s(strInfo, 4096, strFormat, arg_ptr);
    71.         va_end(arg_ptr);
    72.         OutputDebugString(strInfo);
    73. }

    74. typedef BOOL(WINAPI* LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
    75. LPFN_ISWOW64PROCESS fnIsWow64Process;
    76. BOOL IsWow64()
    77. {
    78.         BOOL bIsWow64 = FALSE;
    79.         fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(GetModuleHandle(TEXT("kernel32")),
    80.                 "IsWow64Process");
    81.         if (NULL != fnIsWow64Process)
    82.         {
    83.                 if (!fnIsWow64Process(GetCurrentProcess(), &bIsWow64))
    84.                 {
    85.                         return TRUE;
    86.                 }
    87.         }
    88.         return bIsWow64;
    89. }


    90. void EnableMultiWeChat()
    91. {
    92.         HANDLE hMutex = CreateMutexW(NULL, FALSE, L"_WeChat_App_Instance_Identity_Mutex_Name");
    93.         SID_IDENTIFIER_AUTHORITY SIDAuthWorld = SECURITY_WORLD_SID_AUTHORITY;
    94.         PSID pEveryoneSID = NULL;
    95.         char szBuffer[4096] = {0};
    96.         PACL pAcl = (PACL)szBuffer;

    97.         AllocateAndInitializeSid(
    98.                 &SIDAuthWorld,
    99.                 1,
    100.                 SECURITY_WORLD_RID,
    101.                 0, 0, 0, 0, 0, 0, 0,
    102.                 &pEveryoneSID);

    103.         InitializeAcl(pAcl, sizeof(szBuffer), ACL_REVISION);
    104.         AddAccessDeniedAce(pAcl, ACL_REVISION, MUTEX_ALL_ACCESS, pEveryoneSID);
    105.         SetSecurityInfo(hMutex, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, pAcl, NULL);
    106. }

    107. CString ReadRegValue(
    108.         _In_ HKEY hKey,
    109.         _In_opt_ LPCWSTR lpSubKey,
    110.         _In_opt_ LPCWSTR lpValueName,
    111.         DWORD *pdwTpye)
    112. {
    113.         HKEY hHandle = nullptr;
    114.         if (ERROR_SUCCESS != RegOpenKeyEx(hKey, lpSubKey, 0, KEY_READ, &hHandle))
    115.         {
    116.                 return L"";
    117.         }

    118.         DWORD dwValue = MAX_PATH;
    119.         TCHAR szWechatPath[MAX_PATH + 1] = { 0 };
    120.         if (ERROR_SUCCESS != RegQueryValueEx(hHandle, lpValueName, 0, pdwTpye, (LPBYTE)szWechatPath, &dwValue))
    121.         {
    122.                 CloseHandle(hHandle);
    123.                 return L"";
    124.         }
    125.         CloseHandle(hHandle);

    126.         return CString(szWechatPath);
    127. }

    128. void DeleteRegValue(
    129.         _In_ HKEY hKey,
    130.         _In_opt_ LPCWSTR lpSubKey,
    131.         _In_opt_ LPCWSTR lpValueName)
    132. {
    133.         HKEY hHandle = nullptr;
    134.         if (ERROR_SUCCESS != RegOpenKeyEx(hKey, lpSubKey, 0, KEY_ALL_ACCESS, &hHandle))
    135.         {
    136.                 return;
    137.         }

    138.         if (ERROR_SUCCESS != RegDeleteValue(hHandle, lpValueName))
    139.         {
    140.                 AfxMessageBox(L"注册表删除失败!");
    141.         }
    142.         CloseHandle(hHandle);
    143. }

    144. void WriteRegValue(
    145.         _In_ HKEY hKey,
    146.         _In_opt_ LPCWSTR lpSubKey,
    147.         _In_opt_ LPCWSTR lpValueName,
    148.         _In_opt_ DWORD      dwType,
    149.         _In_opt_ const BYTE* lpData,
    150.         _In_opt_ DWORD      cbData
    151.         )
    152. {
    153.         HKEY hHandle = nullptr;
    154.         if (ERROR_SUCCESS != RegOpenKeyEx(hKey, lpSubKey, 0, KEY_ALL_ACCESS, &hHandle))
    155.         {
    156.                 return;
    157.         }

    158.         if (ERROR_SUCCESS != RegSetValueEx(hHandle, lpValueName, 0, dwType, lpData, cbData))
    159.         {
    160.                 AfxMessageBox(L"注册表写入失败!");
    161.         }
    162.         RegFlushKey(hHandle);
    163.         CloseHandle(hHandle);
    164. }

    165. void CmultiWechatDlg::LoadWechatPath()
    166. {
    167.         DWORD dwTpye = 0;
    168.         if (IsWow64()) {
    169.                 m_strWechatPath = ReadRegValue(
    170.                         HKEY_LOCAL_MACHINE,
    171.                         TEXT("SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\WeChat"),
    172.                         TEXT("DisplayIcon"),
    173.                         &dwTpye);
    174.         }
    175.         else {
    176.                 m_strWechatPath = ReadRegValue(
    177.                         HKEY_LOCAL_MACHINE,
    178.                         TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\WeChat"),
    179.                         TEXT("DisplayIcon"),
    180.                         &dwTpye);
    181.         }
    182.         m_strWechatPath.TrimLeft(L""");
    183.         m_strWechatPath.TrimRight(L""");
    184. }

    185. void CmultiWechatDlg::OpenWechat()
    186. {
    187.         if (!PathFileExists(m_strWechatPath)) {
    188.                 AfxMessageBox(TEXT("本机微信未安装!"));
    189.         }
    190.         else {
    191.                 ShellExecute(NULL, TEXT("open"), m_strWechatPath, NULL, NULL, SW_SHOWNORMAL);
    192.         }
    193. }

    194. void CmultiWechatDlg::StartWechat()
    195. {        
    196.         //IDC_EDIT1.GetWindowText(MoreOpenNum_str);
    197.         GetDlgItem(IDC_EDIT1)->GetWindowText(MoreOpenNum_str);
    198.         MoreOpenNum = _ttoi(MoreOpenNum_str);
    199.         for (int i = 1; i <= MoreOpenNum; i++)
    200.         {
    201.                 OpenWechat();
    202.         }
    203. }


    204. void CmultiWechatDlg::CheckAutoStart()
    205. {
    206.         DWORD dwTpye = 0;
    207.         CString strStartString;
    208.         if (IsWow64())
    209.         {
    210.                 strStartString = ReadRegValue(
    211.                         HKEY_LOCAL_MACHINE,
    212.                         TEXT("SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Run\"),
    213.                         TEXT("MultiWechat"),
    214.                         &dwTpye);
    215.         }
    216.         else
    217.         {
    218.                 strStartString = ReadRegValue(
    219.                         HKEY_LOCAL_MACHINE,
    220.                         TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\"),
    221.                         TEXT("MultiWechat"),
    222.                         &dwTpye);
    223.         }
    224.         if (strStartString.GetLength() > 0) {
    225.                 m_autoStart.SetCheck(1);
    226.         }
    227. }

    228. BOOL CmultiWechatDlg::OnInitDialog()
    229. {
    230.         CDialogEx::OnInitDialog();

    231.         // 将“关于...”菜单项添加到系统菜单中。

    232.         // IDM_ABOUTBOX 必须在系统命令范围内。
    233.         ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    234.         ASSERT(IDM_ABOUTBOX < 0xF000);

    235.         CMenu* pSysMenu = GetSystemMenu(FALSE);
    236.         if (pSysMenu != nullptr)
    237.         {
    238.                 BOOL bNameValid;
    239.                 CString strAboutMenu;
    240.                 bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
    241.                 ASSERT(bNameValid);
    242.                 if (!strAboutMenu.IsEmpty())
    243.                 {
    244.                         pSysMenu->AppendMenu(MF_SEPARATOR);
    245.                         pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    246.                 }
    247.         }

    248.         // 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
    249.         //  执行此操作
    250.         SetIcon(m_hIcon, TRUE);                        // 设置大图标
    251.         SetIcon(m_hIcon, FALSE);                // 设置小图标

    252.         //ShowWindow(SW_MINIMIZE);

    253.         // TODO: 在此添加额外的初始化代码

    254.         EnableMultiWeChat();

    255.         CheckAutoStart();

    256.         LoadWechatPath();

    257.         m_notifyIcon.cbSize = sizeof(NOTIFYICONDATA);
    258.         m_notifyIcon.hIcon = m_hIcon;
    259.         m_notifyIcon.hWnd = m_hWnd;
    260.         lstrcpy(m_notifyIcon.szTip, _T("微信多开助手"));
    261.         m_notifyIcon.uCallbackMessage = WM_SYSTEMTRAY;
    262.         m_notifyIcon.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
    263.         Shell_NotifyIcon(NIM_ADD, &m_notifyIcon);
    264. ;
    265.         int nArgs;
    266.         LPWSTR* szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs);
    267.         if (nArgs >= 2)
    268.         {
    269.                 for (size_t i = 0; i < nArgs; i++)
    270.                 {
    271.                         if (lstrcmpW(szArglist[1], L"-background") == 0) {
    272.                                 PostMessage(WM_SYSCOMMAND, SC_MINIMIZE, 0);
    273.                                 break;
    274.                         }
    275.                 }
    276.         }

    277.         LocalFree(szArglist);

    278.         return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
    279. }

    280. void CmultiWechatDlg::OnSysCommand(UINT nID, LPARAM lParam)
    281. {
    282.         if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    283.         {
    284.                 CAboutDlg dlgAbout;
    285.                 dlgAbout.DoModal();
    286.         }
    287.         else
    288.         {
    289.                 CDialogEx::OnSysCommand(nID, lParam);
    290.         }
    291. }

    292. // 如果向对话框添加最小化按钮,则需要下面的代码
    293. //  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,
    294. //  这将由框架自动完成。

    295. void CmultiWechatDlg::OnPaint()
    296. {
    297.         if (IsIconic())
    298.         {
    299.                 CPaintDC dc(this); // 用于绘制的设备上下文

    300.                 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

    301.                 // 使图标在工作区矩形中居中
    302.                 int cxIcon = GetSystemMetrics(SM_CXICON);
    303.                 int cyIcon = GetSystemMetrics(SM_CYICON);
    304.                 CRect rect;
    305.                 GetClientRect(&rect);
    306.                 int x = (rect.Width() - cxIcon + 1) / 2;
    307.                 int y = (rect.Height() - cyIcon + 1) / 2;

    308.                 // 绘制图标
    309.                 dc.DrawIcon(x, y, m_hIcon);
    310.         }
    311.         else
    312.         {
    313.                 CDialogEx::OnPaint();
    314.         }
    315. }

    316. //当用户拖动最小化窗口时系统调用此函数取得光标
    317. //显示。
    318. HCURSOR CmultiWechatDlg::OnQueryDragIcon()
    319. {
    320.         return static_cast<HCURSOR>(m_hIcon);
    321. }

    322. void CmultiWechatDlg::OnDestroy()
    323. {
    324.         CDialogEx::OnDestroy();

    325.         Shell_NotifyIcon(NIM_DELETE, &m_notifyIcon);
    326. }

    327. LRESULT CmultiWechatDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
    328. {
    329.         // TODO: 在此添加专用代码和/或调用基类
    330.         switch (message) {
    331.         case WM_SYSTEMTRAY:
    332.                 if (lParam == WM_LBUTTONDBLCLK)
    333.                 {
    334.                         if (AfxGetApp()->m_pMainWnd->IsWindowVisible())
    335.                         {
    336.                                 AfxGetApp()->m_pMainWnd->ShowWindow(SW_HIDE);
    337.                         }
    338.                         else
    339.                         {
    340.                                 AfxGetApp()->m_pMainWnd->ShowWindow(SW_SHOW);
    341.                                 CenterWindow();
    342.                         }
    343.                 }
    344.                 else if (lParam == WM_RBUTTONDOWN)
    345.                 {
    346.                         CMenu menu;
    347.                         menu.LoadMenu(IDR_MENU_EXIT);
    348.                         CMenu* pMenu = menu.GetSubMenu(0);
    349.                         CPoint pos;
    350.                         GetCursorPos(&pos);
    351.                         pMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pos.x, pos.y, AfxGetMainWnd());
    352.                 }
    353.                 break;
    354.         case WM_DESTROY:
    355.                 ::Shell_NotifyIcon(NIM_DELETE, &m_notifyIcon);
    356.                 break;
    357.         case WM_SYSCOMMAND:
    358.                 if (wParam == SC_MINIMIZE)
    359.                 {
    360.                         AfxGetApp()->m_pMainWnd->ShowWindow(SW_HIDE);
    361.                         return 0;
    362.                 }
    363.                 break;
    364.         }

    365.         return CDialogEx::WindowProc(message, wParam, lParam);
    366. }


    367. void CmultiWechatDlg::OnAllExit()
    368. {
    369.         PostMessage(WM_QUIT, 0, 0);
    370. }

    371. void CmultiWechatDlg::OnBnClickedCheckAutostart()
    372. {
    373.         CString strKey = TEXT("SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Run\");
    374.         if (!IsWow64()) {
    375.                 strKey = TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\");
    376.         }
    377.         CString strItemName = TEXT("MultiWechat");
    378.         if (m_autoStart.GetCheck()) {
    379.                 TCHAR szPath[MAX_PATH + 1] = { 0 };
    380.                 GetModuleFileName(NULL, szPath, MAX_PATH);
    381.                 CString strPath;
    382.                 strPath.Format(L""%s" -background", szPath);
    383.                 WriteRegValue(
    384.                         HKEY_LOCAL_MACHINE,
    385.                         strKey,
    386.                         strItemName,
    387.                         REG_SZ,
    388.                         (const BYTE*)strPath.GetBuffer(0),
    389.                         strPath.GetLength() * 2);
    390.                 strPath.ReleaseBuffer();
    391.         }
    392.         else {
    393.                 DeleteRegValue(
    394.                         HKEY_LOCAL_MACHINE,
    395.                         strKey,
    396.                         strItemName);
    397.         }
    398. }


    399. HBRUSH CmultiWechatDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    400. {
    401.         HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);

    402.         if (pWnd->GetDlgCtrlID() == IDC_TIPS)
    403.         {
    404.                 pDC->SetTextColor(RGB(255, 0, 0));
    405.         }

    406.         return hbr;
    407. }


    复制代码
    QQ截图20230411093124.png

    QQ截图20230411093146.png

    QQ截图20230411102640.png

    1.png

    99.png

    Windows微信多开小助手下载地址:https://win10.lanzouh.com/b012sh3xa
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    返回顶部