使用 Win32 API 访问进程信息






4.71/5 (14投票s)
一篇关于使用 Win32 API 访问进程信息的文章。
引言
在运行 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 日。