65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Win32 API 访问进程信息

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.71/5 (14投票s)

2006年11月8日

GPL3
viewsIcon

86157

downloadIcon

2410

一篇关于使用 Win32 API 访问进程信息的文章。

Sample Image

引言

在运行 Windows 2000 的超线程(可能为真多处理器)计算机上调用 System.Diagonistics.Process.GetProcesses() 会失败,并显示:“无法从远程计算机获取进程信息 ---> System.ArgumentOutOfRangeException: Ticks 必须介于 DateTime.MinValue.Ticks 和 DateTime.MaxValue.Ticks 之间。” 如果您的注册表键 HKEY_LOCAL_MACHINE.Software.Microsoft.WindowNT.CurrentVersion.PerfLib 已损坏,则可能会发生相同的错误。解决此问题的方案是使用 win32 API 获取进程信息。

使用代码

这个 Win32 API 实现项目包含一个关键文件:Processes.cs,它实现了用于进程列表、进程 ID 以及通过进程 ID 终止进程的 Win32 函数。源代码中还包含一个示例项目,演示了 Process 类 的基本用法。

只需构建并运行项目,您将看到一个 Windows 窗体,其中加载了所有系统进程。您可以选择任何进程,然后单击“KILL”按钮,即可使用 Win32 API 实现终止选定的进程。

private void btnKill_Click(object sender, System.EventArgs e)
{
    string strProcessName=
      System.IO.Path.GetFileNameWithoutExtension(
      lstProcesses.SelectedItem.ToString());
    uint processId=Convert.ToUInt32(
      Win32Processes.Processes.GetProcessByName(
      strProcessName)[0].ToString());
    if(Win32Processes.Processes.Kill(processId))
    {
        MessageBox.Show("Process is killed successfully");
        LoadProcesses();
    }
    else
        MessageBox.Show("Process cannot be Killed");

}
public static bool Kill(uint uiProcessId)
{
    System.IntPtr handler= 
       OpenProcess(PROCESS_KILLRIGHTS,false,uiProcessId); 
    bool b=Win32Processes.Processes.KillProcess(handler);
    Win32Processes.Processes.CloseHandle(handler);
    return b; 
}

历史

  • 初始发布 - 2006 年 11 月 8 日。
© . All rights reserved.