自己想了另一个办法来作
先修改注册表:
hkey_local_machine\\system\\currentcontrolset\\service\\perfproc\\performance
下的:disable performance counters 的值改为0
得到系统当前进程,加入到listbox中:
system.diagnostics.process[] processoncomputer = system.diagnostics.process.getprocesses();
foreach ( system.diagnostics.process p in processoncomputer )
{
this.listbox1.items.add(p.processname);
}
关闭某个指定的进程:
system.diagnostics.process[] process = system.diagnostics.process.getprocessesbyname(this.listbox1.selecteditem.tostring());
foreach ( system.diagnostics.process p in process)
{
p.kill();
}
但是这样会关闭进程的所有实例,比如如果你打开了多个ie,会把所有的ie窗口都关闭。
下面实现关闭某个特定的ie实例
先声明一个arraylist:
arraylist windowhandle = new arraylist();
得到指定进程的所有实例,放到一个listbox中,同时把主窗口的handle放到arraylist中:
system.diagnostics.process[] processoncomputer = system.diagnostics.process.getprocessesbyname(this.listbox1.selecteditem.tostring());
foreach ( system.diagnostics.process p in processoncomputer )
{
this.listbox2.items.add(p.mainwindowtitle);//在listbox中显示主窗体的标题
windowhandle.add(p.mainwindowhandle);
}
把指定的进程的主窗口的handle和arraylist中的比对,如果符合就关闭
system.diagnostics.process[] process = system.diagnostics.process.getprocessesbyname(this.listbox1.selecteditem.tostring());
foreach ( system.diagnostics.process p in process )
{
if ( p.mainwindowhandle == (system.intptr)(windowhandle[this.listbox2.selectedindex]))
{
p.kill();
this.listbox2.items.removeat(this.listbox2.selectedindex);
}
}
这样可以关闭有主窗体的进程,但是没有主窗体的还不行
还请大家多多指教
