singlepost

Handle в C# << На главную или назад  

есть код на C#

class Program
{
static void Main(string[] args)
{
int id = Convert.ToInt32(Console.ReadLine());
Process proc = System.Diagnostics.Process.GetProcessById(id);
proc.Refresh();
Console.WriteLine(proc.Handle);
Console.ReadKey();
}
}

По идее должно в консоли выводить хэндл процесса с введённым PId-ом, но что-то мне кажется что оно выдаёт не хэндл. Т.к. для одного и того же процесса может выдовать разные хэндлы, или может выдовать одинаковые хэндлы для разных процессов. Вопрос, правильно ли я всё делаю?
(P.S. C# я ещё только активно учу)

2 ответов в теме “Handle в C#”

  1. 1
    Павел Потапов ответил:

    Из ремарки в MSDN к проперти Handle:

    This process handle is private to an application–in other words, process handles cannot be shared. A process also has a process Id which, unlike the Handle, is unique and, therefore, valid throughout the system.

    Может собака тут порылась? Как я понимаю, значение хэндла процесса свое для каждого приложения.

  2. 2
    Евгений Гаврин ответил:

    using
    System;
    using System.Diagnostics;

    public class EnumProcess
    {

    public static void Main()
    {

    Process[] arrProcess = Process.GetProcesses();

    if (arrProcess == null)
    {

    Console.WriteLine("Unable to get process list!");
    return;

    }

    Console.WriteLine("{0} processes enumerated.",arrProcess.Length);

    foreach (Process proc in arrProcess)
    Console.WriteLine("Process ID {0}, Handle: {1}", proc.Id, proc.Handle);

    }

    }

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.