RevokeMsgPatcher/RevokeMsgPatcher.MultiInstance/FormMultiInstance.cs

126 lines
4.2 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Windows.Forms;
namespace RevokeMsgPatcher.MultiInstance
{
public partial class FormMultiInstance : Form
{
public FormMultiInstance()
{
InitializeComponent();
// 标题加上版本号
string currentVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
if (currentVersion.Length > 3)
{
currentVersion = " v" + currentVersion.Substring(0, 3);
}
this.Text += currentVersion;
}
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
Process.Start("https://github.com/huiyadanli/RevokeMsgPatcher");
}
private void btnStartTimer_Click(object sender, EventArgs e)
{
mutexHandleCloseTimer.Start();
btnStartTimer.Enabled = false;
btnStopTimer.Enabled = true;
}
private void btnStopTimer_Click(object sender, EventArgs e)
{
mutexHandleCloseTimer.Stop();
btnStartTimer.Enabled = true;
btnStopTimer.Enabled = false;
}
private List<WechatProcess> wechatProcesses = new List<WechatProcess>();
private void mutexHandleCloseTimer_Tick(object sender, EventArgs e)
{
Process[] processes = Process.GetProcessesByName("WeChat");
Console.WriteLine("WeChat进程数" + processes.Length);
// 添加新进程
foreach (Process p in processes)
{
int i = 0;
for (i = 0; i < wechatProcesses.Count; i++)
{
WechatProcess wechatProcess = wechatProcesses[i];
if (wechatProcess.Proc.Id == p.Id)
{
break;
}
}
if (i == wechatProcesses.Count)
{
wechatProcesses.Add(new WechatProcess(p));
}
}
// 关闭所有存在互斥句柄的进程
int num = 0;
for (int i = wechatProcesses.Count - 1; i >= 0; i--)
{
WechatProcess wechatProcess = wechatProcesses[i];
if (!wechatProcess.MutexClosed)
{
wechatProcess.MutexClosed = ProcessUtil.CloseMutexHandle(wechatProcess.Proc);
Console.WriteLine("进程:" + wechatProcess.Proc.Id + ",关闭互斥句柄:" + wechatProcess.MutexClosed);
}
else
{
if (wechatProcess.Proc.HasExited)
{
// 移除不存在的线程
wechatProcesses.RemoveAt(i);
}
else
{
num++;
}
}
}
lblProcNum.Text = "当前微信数量:" + num.ToString();
}
private void btnKillAll_Click(object sender, EventArgs e)
{
Process[] processes = Process.GetProcessesByName("WeChat");
if (processes.Length > 0)
{
foreach (Process p in processes)
{
p.Kill();
}
MessageBox.Show("已经关闭所有微信进程,共" + processes.Length + "个", "提示");
}
else
{
MessageBox.Show("当前无微信进程", "提示");
}
}
private void btnCloseAllMutex_Click(object sender, EventArgs e)
{
Process[] processes = Process.GetProcessesByName("WeChat");
ProcessUtil.CloseMutexHandle(processes);
}
private void lblHowToUse_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
Process.Start("https://github.com/huiyadanli/RevokeMsgPatcher/tree/master/RevokeMsgPatcher.MultiInstance");
}
private void FormMultiInstance_FormClosed(object sender, FormClosedEventArgs e)
{
mutexHandleCloseTimer.Stop();
}
}
}