C++ 计算相同运行进程的总数

2023-12-26

我正在寻找一种方法来检测具有相同进程名称的正在运行的进程的数量。

例如,我运行记事本三遍。

记事本程序 记事本程序 记事本程序

所以它会返回3。

我目前有这些代码来检测正在运行的进程,但不计算其正在运行的进程数量。


#include <iostream>
#include <windows.h>
#include <tlhelp32.h>
#include <tchar.h>

bool IsProcessRunning(const char *ProcessName);

int main()
{
  char *notepadRunning = (IsProcessRunning("notepad.exe")) ? "Yes" : "No";
  std::cout << "Is Notepad running? " << notepadRunning;
  return 0;
}

bool IsProcessRunning(const char *ProcessName)
{
   PROCESSENTRY32 pe32 = { sizeof(PROCESSENTRY32) };
   HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

   if(Process32First(hSnapshot, &pe32;))
   {
      do
      {
         if(_tcsicmp(pe32.szExeFile, ProcessName) == 0)
         {
            CloseHandle(hSnapshot);
            return true;
         }
      } while(Process32Next(hSnapshot, &pe32;));
   }

   CloseHandle(hSnapshot);
   return false;
}   

任何形式的帮助将不胜感激:)

Thanks.


您正在使用正确的 API,即创建Toolhelp32Snapshot http://msdn.microsoft.com/en-us/library/ms682489(VS.85).aspx, 进程32优先 http://msdn.microsoft.com/en-us/library/ms684834(VS.85).aspx and 流程32下一个 http://msdn.microsoft.com/en-us/library/ms684836(VS.85).aspx。正如您所做的那样,您应该使用结构中的 szExeFile 成员流程输入32 http://msdn.microsoft.com/en-us/library/ms684839(VS.85).aspx.

当您当前找到匹配项时,您将从函数中返回。相反,您应该增加计数器而不返回。并返回一个带有进程计数的 int 而不是 bool。另外请确保不要执行 CloseHandle(hSnapshot); 操作直到获得计数后函数结束。

还要确保首先获得特权SeDebugPrivilege在枚举之前,这样您将获得所有会话和用户的所有进程。

要获得特权以便获得所有会话:

acquirePrivilegeByName(SE_DEBUG_NAME);// SeDebugPrivilege

其中 acquirePrivilegeByName 定义为:

BOOL acquirePrivilegeByName(
                            const TCHAR     *szPrivilegeName)
{
    HANDLE          htoken;
    TOKEN_PRIVILEGES    tkp;
    DWORD           dwerr;

    //---------------- adjust process token privileges to grant privilege
    if (szPrivilegeName == NULL)
    {
        SetLastError(ERROR_INVALID_PARAMETER);
        return FALSE;
    }

    if (!LookupPrivilegeValue(NULL, szPrivilegeName, &(tkp.Privileges[0].Luid)))
        return FALSE;

    tkp.PrivilegeCount = 1;
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

    if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &htoken))
        return FALSE;

    if (!AdjustTokenPrivileges(htoken, FALSE, &tkp, 0, NULL, NULL) ||
        GetLastError() != ERROR_SUCCESS)    // may equal ERROR_NOT_ALL_ASSIGNED
    {
        dwerr = GetLastError();
        CloseHandle(htoken);
        SetLastError(dwerr);
        return FALSE;
    }

    CloseHandle(htoken);
    SetLastError(ERROR_SUCCESS);

    return TRUE;
} //acquirePrivilegeByName()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 计算相同运行进程的总数 的相关文章

  • 如何在 VC++ CString 中验证有效的整数和浮点数

    有人可以告诉我一种有效的方法来验证 CString 对象中存在的数字是有效整数还是浮点数吗 Use tcstol http msdn microsoft com en us library w4z2wdyc aspx and tcstod
  • 前向声明类型和“已声明为类类型的非类类型”

    我对以下代码有问题 template
  • 当事件button.click发生时,如何获取按钮名称/标签?

    我以编程方式制作按钮并将它们添加到堆栈面板中 以便每次用户导航到页面时按钮都会发生变化 我正在尝试做这样的事情 当我单击创建的按钮时 它将获取按钮的标签并转到正确的页面 但是 我无法使用 RoutedEventHandler 访问按钮元素
  • 传递 constexpr 对象

    我决定给予新的C 14的定义constexpr旋转并充分利用它 我决定编写一个小的编译时字符串解析器 然而 我正在努力保持我的对象constexpr将其传递给函数时 考虑以下代码 include
  • 无法注册时间触发的后台任务

    对于 Windows 8 应用程序 在 C Xaml 中 我尝试注册后台任务 很难说 但我想我的后台任务已正确注册 但是当我单击调试位置工具栏上的后台任务名称时 我的应用程序停止工作 没有任何消息 我查看了事件查看器上的日志 得到 具有入口
  • 如何在 C# Designer.cs 代码中使用常量字符串?

    如何在 designer cs 文件中引用常量字符串 一个直接的答案是在我的 cs 文件中创建一个私有字符串变量 然后编辑 Designer cs 文件以使用此变量 而不是对字符串进行硬编码 但设计者不喜欢这样抛出错误 我明白为什么这行不通
  • 如何使用 Regex.Replace 从字符串中删除数字?

    我需要使用Regex Replace从字符串中删除所有数字和符号 输入示例 123 abcd33输出示例 abcd 请尝试以下操作 var output Regex Replace input d string Empty The d标识符
  • C++中判断unicode字符是全角还是半角

    我正在编写一个终端 控制台 应用程序 该应用程序应该包装任意 unicode 文本 终端通常使用等宽 固定宽度 字体 因此要换行文本 只需计算字符数并观察单词是否适合一行并采取相应的操作 问题是 Unicode 表中的全角字符在终端中占用了
  • 在 VS 中运行时如何查看 C# 控制台程序的输出?

    我刚刚编写了一个名为 helloworld 的聪明程序 它是一个 C NET 4 5 控制台应用程序 在扭曲的嵌套逻辑迷宫深处 使用了 Console WriteLine 当我在命令行运行它时 它会运行并且我会看到输出 我可以执行其他命令并
  • 模板外部链接?谁能解释一下吗?

    模板名称具有链接 3 5 非成员函数模板可以有内部链接 任何其他模板名称应具有外部链接 从具有内部链接的模板生成的实体与在其他翻译单元中生成的所有实体不同 我知道使用关键字的外部链接 extern C EX extern C templat
  • 在 C 中使用枚举而不是 #defines 作为编译时常量是否合理?

    在 C 工作了一段时间后 我将回到 C 开发领域 我已经意识到 在不必要的时候应该避免使用宏 以便让编译器在编译时为您做更多的工作 因此 对于常量值 在 C 中我将使用静态 const 变量或 C 11 枚举类来实现良好的作用域 在 C 中
  • 如何最好地以编程方式将 `__attribute__ ((unused))` 应用于这些自动生成的对象?

    In my makefile我有以下目标 它将文本 HTML 资源 编译 为unsigned char数组使用xxd i http linuxcommand org man pages xxd1 html 我将结果包装在匿名命名空间和标头保
  • 比较:接口方法、虚方法、抽象方法

    它们各自的优点和缺点是什么 接口方法 虚拟方法 抽象方法 什么时候应该选择什么 做出这一决定时应牢记哪些要点 虚拟和抽象几乎是一样的 虚方法在基类中有一个实现 可以选择重写 而抽象方法则没有 并且must在子类中被覆盖 否则它们是相同的 在
  • 模板类的模板构造函数的 C++ 显式模板特化

    我有一个像这样的课程 template
  • 如何使用批处理文件创建 EXE 可执行文件? [复制]

    这个问题在这里已经有答案了 我希望能够简单地运行 Windows 批处理文件并让它创建 exe 可执行文件 我知道您可以使用以下脚本批量创建文件 echo off echo This will be in a text file gt gt
  • 使动态创建的链接标签在 Winforms 中可点击

    我正在制作一个程序 允许用户单击由动态链接标签创建的公司名称 在我想知道如何做到这一点之前 我从未在 C 中使用过链接标签 可为特定用户生成的业务数量各不相同 因此每个用户的链接标签数量并不相同 然后我想捕获业务 ID 以进行 Json 调
  • WPF DataGrid / ListView 绑定到数组 mvvm

    我们假设你有 N 个整数的数组 表示行数的整数值 在模型中 该整数绑定到视图中的 ComboBox Q1 如何将数组 或数组的各个项目 绑定到 DataGrid 或 ListView 控件 以便 当您更改 ComboBox 值时 只有那么多
  • 父进程和子进程如何进行信号量操作?

    semget 调用是否在父进程和子进程之间共享信号量 我有这段代码 对于相同的代码 我观察到如果父进程首先运行 子进程有时会获得更改后的信号量值 但是当子进程首先运行时 父进程似乎永远不会携带更改后的信号量 为什么会发生这种情况 谁能向我解
  • C++:二叉树所有节点值的总和

    我正在准备面试 我被一个二叉树问题困住了 我们如何计算二叉树所有节点中存在的值的总和 优雅的递归解决方案 伪代码 def sum node if node NULL return 0 return node gt value sum nod
  • 在 System.Type 上使用条件断点时出错

    这是函数 public void Init System Type Type this Type Type BuildFieldAttributes BuildDataColumns FieldAttributes 我在第一行设置了一个断点

随机推荐

  • 使用单个函数调用写入多个文件描述符

    我有一个群聊服务器的用例 其中服务器必须向所有客户端的套接字写入一个公共字符串 然后 我通过循环遍历文件描述符列表并将字符串写入每个文件描述符来解决这个问题 现在我正在考虑寻找更好的解决方案 是否可以通过使用 Linux 中的 tee 系统
  • 在 Swift 3.0 中转换 base64String 中的音频文件

    我正在使用以下代码录制音频文件 let audioFilename getDocumentsDirectory appendingPathComponent tt mp4 let settings AVFormatIDKey Int kAu
  • 修改多维 numpy 数组中的对角线

    我有一个形状为 7 3 7 3 的多维 numpy 数组 我想修改轴 0 和轴 2 重合的广义对角线 这个广义对角线将被定义为数组中第 0 个和第 2 个索引重合的元素 并且形状为 3 3 7 Doing arr diagonal axis
  • 在 Vbscript 中终止进程

    我试图终止名为 AetherBS exe 的进程的所有实例 但以下 VBscript 不起作用 我不太确定在哪里 为什么会失败 那么我怎样才能杀死 AetherBS exe 的所有进程呢 CloseAPP AetherBS exe Func
  • Boost.Spirit 将表达式转换为 AST

    使用 Boost Spirit 将某些表达式转换为 AST 的正确方法是什么 我尝试构建它 但我认为它很混乱 可以简化很多 https godbolt org z VXHXLY https godbolt org z VXHXLY incl
  • 调试非托管 Neo4j 扩展

    我刚刚开始使用 Graphaware 框架为 Neo4j 服务器开发一个非托管扩展 到目前为止一切都很好 甚至单元测试也有效 但我想实际调试从 Intellij 内部运行 Neo4j 服务器的扩展 有人能给我一个关于如何做到这一点的提示吗
  • Spring Batch 多数据源和 ChainedTransactionManager 风险

    我正在研究由两个数据源组成的 Spring Batch 的可行性 用于 Spring Batch 元数据的 SQL 数据源和用于业务数据的 MongoDB 数据源 具有事务性用途 交易方面在这里提出了几个问题 以下主题 使用 MongoDB
  • 让 Django 走向绿色

    我有一个 Django 管理命令 可以发出数千个 TCP UDP 请求 我使用 Gevent 来加快速度 因为我重组了代码以作为协程工作 套接字连接不再阻塞 但从我读到的内容来看 Django 的某些部分仍然不是绿色的 我所说的绿色 是指使
  • 如何使用 JSTL 在 JSF 1.2 页面中强制构建阶段?

    我在 JSF 应用程序中使用 JSTL 标签 通过某些操作 我需要重建组件树 就像它是初始构建一样 我当前的症状是对象与组件关联不正确 重复的 ID 以及陈旧组件的其他问题 这是使用在构建阶段使用的 c foreach 不能使用重复标记 请
  • 我们如何确定我们使用的是 Web API 1 还是 Web API 2?

    介绍一下问题 我想知道我们使用的是Web API 1还是2 我自己的packages config指示版本5 0 0 这是 Web API 1 还是 2 搜索和研究 我尝试过谷歌搜索以下内容 网络 API 1 网络 API 2 and AS
  • Rhino 中没有 Array.filter() 吗?

    为什么我不能使用Array filter 在犀牛 代码是这样的 var simple reason a b c print typeof simple reason filter var not so simple reason new A
  • WinForms:无需使用 FormWindowState.Normal 即可查找最小化表单的大小

    有没有一种简单的方法可以确定 WindowState Normal 中窗体的大小 而无需实际更改窗体状态 这是我现在所做的 C 代码 public class MyForm Form public void MyMethod FormWin
  • VB.NET 将 Tab 键发送到另一个应用程序窗口

    我想将 TAB 键发送到另一个应用程序window 将密钥发送到窗口而不是文本框 I tried SendMessage hWnd WM SETHOTKEY VK TAB 0 什么都没发生 我的目标是 将 Tab 键发送到我的应用程序Or当
  • 使用带有 CommaDelimitedList 参数的 Cloudformation Join 函数来构建 IAM ARN

    我一直在尝试构建一个存储桶策略 以允许对 CloudFormation 中的集中帐户执行操作到共享相同模式的一系列其他帐户中的 IAM 角色 即 arn aws iam 111111111111 role my role arn aws i
  • Golang:如何将字符串转换为二进制表示形式

    在golang中 如何将字符串转换为二进制字符串 示例 CC 变为 10000111000011 这是一个简单的方法 func stringToBin s string binString string for c range s binS
  • 如何编写返回插值的函数(pandas 数据帧)?

    我有一个作为 pandas 数据框导入的 xls 文件 它具有 NaN 值 如何设置一个函数 用相邻值之间的插值替换 NaN 我不能使用 pd DataFrame interpolate 或任何现有的插值函数 因为我应该创建自己的函数 这是
  • 如何使用 Quartz.net 2.0 安排任务?

    我正在尝试在 ASP NET MVC 4 应用程序中使用 Quartz net 2 0 安排任务 但无法执行该任务 这是代码 public class ScheduleTaskConfig public static void StartS
  • 使用 WinAPI 创建具有透明背景的文本标签

    是否可以仅使用 WinAPI 命令在窗口中创建具有透明背景的标签 我正在尝试将图像添加到对话框窗口中 该窗口将用作背景图像 然后在该图像上显示文本 到目前为止 我尝试过的所有内容都显示背景图像顶部的文本标签 并在其周围绘制了灰色矩形 这是迄
  • 体验(XP)不适用于所有用户 JSON Discord.PY

    我试图为在大约有 50 60 人打字的房间中输入的消息评分 它会第一次将用户添加到 JSON 文件 但不会为他们键入的消息添加任何更多点 我再次测试 只有一名用户因输入的消息而获得积分 其余的保持不变 这是代码 client event a
  • C++ 计算相同运行进程的总数

    我正在寻找一种方法来检测具有相同进程名称的正在运行的进程的数量 例如 我运行记事本三遍 记事本程序 记事本程序 记事本程序 所以它会返回3 我目前有这些代码来检测正在运行的进程 但不计算其正在运行的进程数量 include