Как найти Handle окна процесса? - C#

Узнай цену своей работы

Формулировка задачи:

Здраствуйте! Вот решил розобраться какие в C# есть возможности для роботы с процессами. Научился находить pID, pName. А вот Handle окна никак не получается найти ( вот пример кода :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Runtime.InteropServices;
 
namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        [DllImport("kernel32.dll")]
        public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);
        [DllImport("kernel32.dll", SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool CloseHandle(IntPtr hObject);
        [DllImport("kernel32.dll", SetLastError = true)]
        static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out UIntPtr lpNumberOfBytesWritten);
        public int pID;
        public Form1()
        {
            InitializeComponent();
            GetProcess("Nksp");
            WriteByte();
 
        }
        public void GetProcess(string name)
        {
            var pList = Process.GetProcesses();
            if (pList.Count() != 0)
            {
                foreach (var process in pList)
                {
                    if (process.ProcessName == name)
                    {
                        pID = process.Id;
                        richTextBox1.Text = Convert.ToString(process.ProcessName)+"\t"+pID+"\t";
                    }
                }
            }
        }
 
        public void WriteByte()
        {
            var handle = OpenProcess(0x001F0FFF, false, pID);
            richTextBox1.Text = richTextBox1.Text + Convert.ToString(handle);
            CloseHandle(handle);
            var adress = 0x2119D870;
            byte[] bytes = { 0x09, 0x00, 0x00, 0x00 };
            var w = new UIntPtr();
            WriteProcessMemory(handle, (IntPtr)adress, bytes, 4, out w);
        }

        private void button1_Click(object sender, EventArgs e)
        {
 
        }
    }
}
Что здесь не так? Заранее спасибо!

Решение задачи: «Как найти Handle окна процесса?»

textual
Листинг программы
Process myProcess=Process.GetProcessById(/*тут id */);
 
//код
 
HANDLE hndl=myProcess.MainWindowHandle;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.571 из 5
Похожие ответы