using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Process_Suspender { public partial class Form1 : Form { public Form1() { InitializeComponent(); } [Flags] public enum ThreadAccess : int { TERMINATE = (0x0001), SUSPEND_RESUME = (0x0002), GET_CONTEXT = (0x0008), SET_CONTEXT = (0x0010), SET_INFORMATION = (0x0020), QUERY_INFORMATION = (0x0040), SET_THREAD_TOKEN = (0x0080), IMPERSONATE = (0x0100), DIRECT_IMPERSONATION = (0x0200) } [DllImport("kernel32.dll")] static extern IntPtr OpenThread(ThreadAccess dwDesiredAccess, bool bInheritHandle, uint dwThreadId); [DllImport("kernel32.dll")] static extern uint SuspendThread(IntPtr hThread); [DllImport("kernel32.dll")] static extern int ResumeThread(IntPtr hThread); [System.Runtime.InteropServices.DllImport("Kernel32")] private extern static Boolean CloseHandle(IntPtr handle); private static void SuspendProcess(int pid) { var process = Process.GetProcessById(pid); if (process.ProcessName == string.Empty) return; foreach (ProcessThread pT in process.Threads) { IntPtr pOpenThread = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)pT.Id); if (pOpenThread == IntPtr.Zero) { continue; } SuspendThread(pOpenThread); CloseHandle(pOpenThread); } } public static void ResumeProcess(int pid) { var process = Process.GetProcessById(pid); if (process.ProcessName == string.Empty) return; foreach (ProcessThread pT in process.Threads) { IntPtr pOpenThread = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)pT.Id); if (pOpenThread == IntPtr.Zero) { continue; } var suspendCount = 0; do { suspendCount = ResumeThread(pOpenThread); } while (suspendCount > 0); CloseHandle(pOpenThread); } } string processname = ""; int pid; public static string prc = ""; private void iTalk_Button_21_Click(object sender, EventArgs e) { processname = iTalk_TextBox_Small1.Text; Process[] suspend = Process.GetProcessesByName(processname); if (suspend.Length > 0) { foreach (var item in suspend) { pid = item.Id; SuspendProcess(pid); iTalk_HeaderLabel1.ForeColor = Color.DarkGreen; iTalk_Label2.ForeColor = Color.Red; iTalk_HeaderLabel1.Text = "Suspend"; iTalk_Label2.Text = iTalk_TextBox_Small1.Text + "(" + pid.ToString() + ")"; } } else if(suspend.Length == 0) { TmrSuspendWait.Enabled = true; } } private void iTalk_Button_23_Click(object sender, EventArgs e) { processname = iTalk_TextBox_Small1.Text; Process[] suspend = Process.GetProcessesByName(processname); if (suspend.Length > 0) { foreach (var item in suspend) { pid = item.Id; ResumeProcess(pid); iTalk_HeaderLabel1.ForeColor = Color.DarkGreen; iTalk_Label2.ForeColor = Color.DarkGreen; iTalk_HeaderLabel1.Text = "Resume."; iTalk_Label2.Text = iTalk_TextBox_Small1.Text + "(" + pid.ToString() + ")"; } } } private void TmrSuspendWait_Tick(object sender, EventArgs e) { processname = iTalk_TextBox_Small1.Text; Process[] suspend = Process.GetProcessesByName(processname); pictureBox1.Visible = false; iTalk_ProgressIndicator1.Visible = true; iTalk_HeaderLabel1.ForeColor = Color.DarkGreen; iTalk_Label2.Text = iTalk_TextBox_Small1.Text; iTalk_HeaderLabel1.Text = "Waiting."; if (processname.Length > 0) { foreach (var item in suspend) { pid = item.Id; SuspendProcess(pid); iTalk_HeaderLabel1.ForeColor = Color.Green ; iTalk_HeaderLabel1.Text = "Suspend"; iTalk_Label2.ForeColor = Color.Red; iTalk_Label2.Text = iTalk_TextBox_Small1.Text + "(" + pid.ToString() + ")"; TmrSuspendWait.Enabled = false; iTalk_ProgressIndicator1.Visible = false; pictureBox1.Visible = true; } } } private void timer1_Tick(object sender, EventArgs e) { } private void iTalk_Button_22_Click(object sender, EventArgs e) { Form2 frmprc = new Form2(); frmprc.Show(); } } }