ShakalX Ответов: 1

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 как мне это сделать?
Таким образом, я всегда должен находить новый процесс.

Спасибо.

1 Ответов

Рейтинг:
0

RickZeeland

Я думаю, вам это не понравится, но вот способ сделать это на языке Си#: .net-приостановить процесс в C# - переполнение стека[^]


ShakalX

Да, именно там я его и нашел, но я не знаю, как им пользоваться = /

RickZeeland

Может быть, вам лучше не связываться с таким опасным кодом, просто попробуйте еще раз несколько лет спустя, когда у вас будет больше опыта в кодировании :)

ShakalX

Здесь нет ничего опасного. Это всего лишь приостановка процесса для загрузки кода в память процесса. Чит для игры. Только это. Но его нужно сделать паузу, чтобы дать время впрыснуть, прежде чем игра откроется.

Dave Kreskowiak

Имейте в виду, что игра, которую вы запускаете, может не выдержать того, что вы делаете. Если игра выйдет из строя, ну что ж. Вы ничего не можете с этим поделать, кроме как забыть о попытке использовать чит.

RickZeeland

Он мог бы попробовать реверс-инжиниринг игры с OllyDbg, например, ха-ха-ха !

ShakalX

Я не понимал этой благодати. Я просто пытаюсь сделать программу для себя, чтобы играть. И я пришел просить о помощи. Только это. В любом случае спасибо за информацию. И да, я знаю, как использовать ollydbg.

RickZeeland

Не поймите меня неправильно, ха-ха-ха, это было сделано не для того, чтобы посмеяться над вами, просто даже для опытных программистов было бы очень трудно и трудоемко перепроектировать игру !

ShakalX

Ну, это не имеет большого значения, что я буду делать, только как делать. Но все в порядке. Я уже это сделал. Более сложным способом. Но это сработало. Спасибо за ответы.