C# как приостановить процесс PID
public static class ProcessExtension { [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); public static void Suspend(this Process process) { foreach (ProcessThread thread in process.Threads) { var pOpenThread = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)thread.Id); if (pOpenThread == IntPtr.Zero) { break; } SuspendThread(pOpenThread); } } public static void Resume(this Process process) { foreach (ProcessThread thread in process.Threads) { var pOpenThread = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)thread.Id); if (pOpenThread == IntPtr.Zero) { break; } ResumeThread(pOpenThread); } } }
Здравствуйте, друзья. Мне нужно использовать процесс паузы в моей программе, и я нашел этот класс в сети. Но я не знаю, как им пользоваться.
Процессы, которые мне нужно будет приостановить, когда у меня будет PID, взяты из приведенной ниже функции. Спасибо за помощь.
Что я уже пробовал:
<pre> private void button3_Click_1(object sender, EventArgs e) { try { BIT64.Text = ""; int pid = browser.Chrome(); if (pid > 0) { Aobscan.OpenProcessid(pid); label1.Text = "Google Chrome = PID " + pid + "--" + BIT64.Text; System.Media.SystemSounds.Beep.Play(); } else { pid = browser.Opera(); if (pid > 0) { Aobscan.OpenProcessid(pid); label1.Text = "Opera = PID " + pid + "--" + BIT64.Text; System.Media.SystemSounds.Beep.Play(); } else { pid = browser.Gameroom_Flash(); if (pid > 0) { Aobscan.OpenProcessid(pid); label1.Text = "FBGameroom = PID " + pid + "--" + BIT64.Text; System.Media.SystemSounds.Beep.Play(); } else { pid = browser.Mustang(); if (pid > 0) { Aobscan.OpenProcessid(pid); label1.Text = "Mustang = PID " + pid + "--" + BIT64.Text; System.Media.SystemSounds.Beep.Play(); } else { pid = browser.Firefox_Flash(); if (pid > 0) { Aobscan.OpenProcessid(pid); label1.Text = "Firefox_Flash = PID " + pid + "--" + BIT64.Text; System.Media.SystemSounds.Beep.Play(); } else { pid = browser.Psafe(); if (pid > 0) { Aobscan.OpenProcessid(pid); label1.Text = "PsafeIternet = PID " + pid + "--" + BIT64.Text; System.Media.SystemSounds.Beep.Play(); } else { pid = browser.Maxthon(); if (pid > 0) { Aobscan.OpenProcessid(pid); label1.Text = "Maxthon = PID " + pid + "--" + BIT64.Text; System.Media.SystemSounds.Beep.Play(); } else { pid = browser.Edge_Flash(); if (pid > 0) { Aobscan.OpenProcessid(pid); label1.Text = "Microsoft = PID " + pid + "--" + BIT64.Text; System.Media.SystemSounds.Beep.Play(); } else { label1.Text = "OPS-Error Game open??"; System.Media.SystemSounds.Hand.Play(); Aobscan.processhandle = IntPtr.Zero; } } }
Мне нужно использовать паузу для pid, который находится в монтировке. У него есть простой способ сделать это. Как я могу вызвать функцию для паузы? Извините, я ученик.
Обновление я использую этот класс
using System; using System.Diagnostics; using System.Runtime.InteropServices; using System.Collections.Generic; using System.Linq; using System.Text; public static class Pause { [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); public static void Suspend(this Process process) { foreach (ProcessThread thread in process.Threads) { var pOpenThread = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)thread.Id); if (pOpenThread == IntPtr.Zero) { break; } SuspendThread(pOpenThread); } } public static void Resume(this Process process) { foreach (ProcessThread thread in process.Threads) { var pOpenThread = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)thread.Id); if (pOpenThread == IntPtr.Zero) { break; } ResumeThread(pOpenThread); } } public static void Print(this Process process) { Console.WriteLine("{0,8} {1}", process.Id, process.ProcessName); } public enum Options { List, Kill, Suspend, Resume } [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) } public class Param { public int PId { get; set; } public string Expression { get; set; } public Options Option { get; set; } } }
и использовать вот так
private void button5_Click(object sender, EventArgs e) { foreach (var process in Process.GetProcessesByName("firefox")) process.Suspend(); }
Но мне это нужно, чтобы приостановить процесс, который я уже сделал. Pid как мне это сделать?
Таким образом, я всегда должен находить новый процесс.
Спасибо.