如何创建一个 SQL 查询,该查询返回具有可视化表示的进程?

How do I create an SQL query which returns processes with visual representation?

提问人:brushymilbil 提问时间:11/8/2023 最后编辑:Palle Duebrushymilbil 更新时间:11/8/2023 访问量:39

问:

我想创建一个查询,该查询通过可视化表示获取所有活动进程。 活动部分已经完成,但我仍然对视觉表示感到困惑。 它使用 Managementobject 的 ID 查找进程,然后检查 MainWindowHandle 是否不是 intptr。零(无视觉表示)。

像这样的东西:

ManagmentObjectSearcher search = new("SELECT * FROM Win32_Process" +
  "WHERE ExecutionState < 4 OR ExecutionState = 9");
ManagementObjectCollection collection = search.Get();
foreach (ManagementObject obj in collection.Cast<ManagementObject>())
{
    bool succes = int.TryParse(obj["ProcessId"].ToString(),out int Id);
    if (!succes) continue;
    Process process = Process.GetProcessById(Id);
    if (process.MainWindowHandle == intptr.zero) continue;
    //Rest of code to handle processes with visual representation...
}

现在我想知道,为了减少迭代次数,我们是否可以在查询中添加一个检查,以检查它是否具有可视化表示形式? 喜欢这个:

SELECT * FROM Win32_Process
WHERE (ExecutionState < 4 OR ExecutionState = 9) AND MainWindowHandle IS NOT NULL

但我不确定您是否需要使用数字来代替:

SELECT * FROM Win32_Process
WHERE (ExecutionState < 4 OR ExecutionState = 9) AND NOT MainWindowHandle = 0

我查看了文档,我什至没有找到 MainWindowHandle 属性,所以现在我想知道我是否可以使用它。

我尝试寻找其他资源,希望有人会提到“MainWindowHandle”,但没有。

C# SQL Win32-进程 System.Management

评论

1赞 Charlieface 11/8/2023
你为什么不直接使用?System.Diagnostics.Process
0赞 jdweng 11/8/2023
您从哪里获得执行状态列表?我在这里找到了枚举:learn.microsoft.com/en-us/uwp/api/......
0赞 brushymilbil 11/8/2023
@Charlieface,好吧:我一开始确实使用了它,但我想知道我是否可以使查询更有效率。Process process = Process.GetProcessById(Id); if (process.MainWindowHandle == intptr.Zero) continue;
0赞 brushymilbil 11/8/2023
@jdweng好吧,我从这里得到了它: learn.microsoft.com/nl-nl/windows/win32/cimwin32prov/... 但也许你是对的,那么我会将查询更改为这样: , 谢谢你指出来!SELECT * FROM Win32_Process WHERE ExecutionState = 1 OR ExecutionState = 2
0赞 jdweng 11/8/2023
状态 9 未显示在任何位置。

答: 暂无答案