将列表更改为按钮? (修改ProcessFreezer)

时间:2014-01-16 14:20:43

标签: c#

我刚刚下载了这个开源程序:
http://fabi.me/tools/processfreezer/
我想修改它里面的东西。但我真的不知道怎么......

此程序允许您冻结进程。您可以通过列表框选择流程。 但我只想冻结一个特定的程序,该程序是用字符串手动给出的。

例如:

string process = "C:\\Program Files (x86)\\yolo\\yolo.exe";

如何覆盖列表框并将该信息提供给挂起功能?

这是代码

Process[] GetCheckedProcesses()
{
    Process[] procs = new Process[lvProcesses.CheckedItems.Count];
    for (int i = 0; i < procs.Length; i++)
        procs[i] = (Process)lvProcesses.CheckedItems[i].Tag;

    return procs;
}

private void btnSuspend_Click(object sender, EventArgs e)
{
    Process[] procs = GetCheckedProcesses();

    for (int i = 0; i < procs.Length; i++)
    {
        try { ProcessFreezer.SuspendProcess(procs[i]); ; }
        catch (Exception ex) { MessageBox.Show(ex.ToString(), "FEHLER"); }
    }
}

以下是ProcessIsSuspend的片段

public static bool ProcessIsSuspended(Process proc)
{
    bool suspended = true;
    foreach (ProcessThread pT in proc.Threads)
        suspended &= (  pT.ThreadState == System.Diagnostics.ThreadState.Wait
                      && pT.WaitReason == ThreadWaitReason.Suspended  );
    return suspended;
}

所以Button应该只是冻结过程而不询问哪个...
希望它可以理解。我刚开始使用C#,它与C ++有点不同

1 个答案:

答案 0 :(得分:0)

文件名映射的过程是一对一的关系(例如,考虑两个Visual Studio实例)。

为了根据文件名查找进程,您可以使用“主模块”的文件:

Process proc;
try 
{ 
    string fileName = proc.MainModule.FileName
    //check if the file matches what you are looking for.

} 
catch (Win32Exception e) 
{
  //some processes are protected, you 
  //will not be allowed to access the file name
  //even as an administrator
}

所以基本上根据你的文件名过滤进程列表。