在C中通过名称获取进程ID

2023-12-29

我试图通过进程名称获取进程 ID(例如,notepad.exe),但之前 Stack Overflow 上的解决方案似乎无法正常工作。这是我尝试过的:

DWORD FindProcessId(const char *processname)
{
    HANDLE hProcessSnap;
    PROCESSENTRY32 pe32;
    DWORD result = NULL;

    // Take a snapshot of all processes in the system.
    hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (INVALID_HANDLE_VALUE == hProcessSnap) return(FALSE);

    // Retrieve information about the first process,
    // and exit if unsuccessful
    if (!Process32First(hProcessSnap, &pe32))
    {
        CloseHandle(hProcessSnap);          // Clean the snapshot object
        return(FALSE);
    }

    do
    {
        if (0 == _stricmp(processname, pe32.szExeFile))
        {
            result = pe32.th32ProcessID;
            break;
        }
    } while (Process32Next(hProcessSnap, &pe32));

    CloseHandle(hProcessSnap);

    return result;
}

我传入“notepad.exe”并确认它正在我的系统上运行,并且该应用程序以管理员身份运行并具有所需的正确权限。标高是这样完成的:

        if (GetModuleFileName(NULL, szPath, ARRAYSIZE(szPath)))
        {
            // Launch itself as administrator.
            sei.lpVerb = TEXT("runas");
            sei.lpFile = szPath;
            sei.hwnd = NULL;
            sei.nShow = SW_NORMAL;

            if (!ShellExecuteEx(&sei))
            {
                MessageBox(NULL, TEXT("The program needs to be elevated to work properly."), APP_TITLE, MB_OK);
                return -1;
            }
        }
        return 0;

它永远找不到进程 ID - 每次都返回 Null。

这是使用 C,而不是 C++。


解决方案是简单地设置pe32.dwSize获得进程快照后。此处完成固定代码:

DWORD FindProcessId(const char *processname)
{
    HANDLE hProcessSnap;
    PROCESSENTRY32 pe32;
    DWORD result = 0;

    // Take a snapshot of all processes in the system.
    hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (INVALID_HANDLE_VALUE == hProcessSnap) return(FALSE);

    pe32.dwSize = sizeof(PROCESSENTRY32); // <----- IMPORTANT

    // Retrieve information about the first process,
    // and exit if unsuccessful
    if (!Process32First(hProcessSnap, &pe32))
    {
        CloseHandle(hProcessSnap);          // clean the snapshot object
        printf("!!! Failed to gather information on system processes! \n");
        return(0);
    }

    do
    {
        printf("Checking process %ls\n", pe32.szExeFile);
        if (0 == strcmp(processname, pe32.szExeFile))
        {
            result = pe32.th32ProcessID;
            break;
        }
    } while (Process32Next(hProcessSnap, &pe32));

    CloseHandle(hProcessSnap);

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

在C中通过名称获取进程ID 的相关文章

  • PC 相当于 Coda 吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • c# 从另一个类中的另一个静态事件引发事件

    需要帮助从另一个班级调用事件 我有已声明事件的课程 public class MxPBaseGridView GridView public event AddNewItemsToPopUpMenuEventHandler AddNewIt
  • 将 OpenCV Mat 转换为数组(可能是 NSArray)

    我的 C C 技能很生疏 OpenCV 的文档也相当晦涩难懂 有没有办法获得cv Mat data属性转换为数组 NSArray 我想将其序列化为 JSON 我知道我可以使用 FileStorage 实用程序转换为 YAML XML 但这不
  • 带有运算符语法的错误消息,但不带有函数语法的错误消息

    为什么我在调用 unary 时收到错误消息 使用运算符语法 如果我用函数语法调用它就可以了 现场演示 https godbolt org z j7AbeQ template
  • while循环中的变量初始化

    我有一个可以分块读取文件的函数 public static DataObject ReadNextFile 数据对象看起来像这样 public DataObject public string Category get set And ot
  • 在 C++11 中移出 stdpriority_queue 的元素

    最小的工作示例 include
  • 通过 C# Mailkit / Mimekit 发送电子邮件,但出现服务器证书错误

    Visual Studio 2015 中的 0 代码 1 我正在使用 Mailkit 最新版本 1 18 1 1 从我自己的电子邮件服务器发送电子邮件 2 电子邮件服务器具有不受信任的自签名证书 3 我在代码中添加了以下两行 以忽略服务器证
  • Xamarin - SignalR 挂在连接上

    我正在尝试将我的 Xamarin 应用程序连接到托管在 Azure 上的 SignalR 后端 我遇到的问题是每次我在 HubConnection 上调用 StartAsync 时 它都会挂起客户端并且请求永远不会完成 我尝试通过应用程序进
  • Vagrant 错误:无法挂载 VirtualBox 共享文件夹(Guest Additions、vboxsf)

    问题 我在 Windows 10 上安装了 Vagrant 这样我就可以在虚拟机中创建个人本地开发环境 我读到的有关 Vagrant 的所有内容都表明我什至可以启动多个系统并通过 NAT 端口转发测试它们之间的通信 但首先 我只想在对其余部
  • 为什么不能调用带有 auto& 参数的 const mutable lambda?

    include
  • 将错误代码映射到 C++ 中的字符串

    将错误代码从枚举映射到字符串的更有效方法是什么 在 C 中 例如 现在我正在做这样的事情 std string ErrorCodeToString enum errorCode switch errorCode case ERROR ONE
  • C++ 到 C# 事件处理

    所以我有我的C WinForm 应用程序 我从中调用我的C CLI MFC dll图书馆 但也有一些events在我的 C 库上 甚至此事件也发生在该库的本机 非 CLI 部分 我需要从我的 C 应用程序调用一些代码 并获取一些有关此事件的
  • 如何使用 CSI.exe 脚本参数

    当你运行csi exe 安装了 Visual Studio 2015 update 2 您将得到以下语法 Microsoft R Visual C Interactive Compiler version 1 2 0 51106 Copyr
  • 浮点字节序?

    我正在为实时海上模拟器编写客户端和服务器 并且由于我必须通过套接字发送大量数据 因此我使用二进制数据来最大化可以发送的数据量 我已经了解整数字节顺序以及如何使用htonl and ntohl为了规避字节顺序问题 但我的应用程序与几乎所有模拟
  • 从 NumPy 数组到 Mat 的 C++ 转换 (OpenCV)

    我正在围绕 ArUco 增强现实库 基于 OpenCV 编写一个薄包装器 我试图构建的界面非常简单 Python 将图像传递给 C 代码 C 代码检测标记并将其位置和其他信息作为字典元组返回给 Python 但是 我不知道如何在 Pytho
  • 如何在dll级别读取app.config? [复制]

    这个问题在这里已经有答案了 我在一个解决方案中有一个控制台应用程序项目和库项目 dll The 图书馆项目有 app config 文件 我在其中存储我在库中使用的一些键值对 控制台应用程序引用此 dll 我有另一个 app config
  • 在哪里可以下载没有 Visual Studio 2010 的 C# 4.0 编译器?

    我知道 CTP VS 2010 映像 但我可以只下载 NET Framework 4 0 和 C 编译器吗 AFAIK VS 2010 CTP 仅作为 VM 映像提供 我不相信 Microsoft 发布了 VS 的安装程序 其中一个绝对不适
  • C 语言中的 Alpha 混合 2 RGBA 颜色[重复]

    这个问题在这里已经有答案了 可能的重复 如何快速进行阿尔法混合 https stackoverflow com questions 1102692 how to do alpha blend fast 对 2 个 RGBA 整数 颜色进行
  • 如果“嵌入式”SQL 2008 数据库文件不存在,如何创建它?

    我使用 C ADO Net 和在 Server Management Studio 中创建的嵌入式 MS SQL 2008 数据库文件 附加到 MS SQL 2008 Express 创建了一个数据库应用程序 有人可以向我指出一个资源 该资
  • 如何提高环复杂度?

    对于具有大量决策语句 包括 if while for 语句 的方法 循环复杂度会很高 那么我们该如何改进呢 我正在处理一个大项目 我应该减少 CC gt 10 的方法的 CC 并且有很多方法都存在这个问题 下面我将列出一些例如我遇到的问题的

随机推荐

  • CanBeNull 和 ReSharper - 将其与异步任务一起使用?

    我最近发现你可以使用 CanBeNull C 中的注释告诉 ReSharper 和其他插件 某个方法可以返回 null 这很棒 因为当我没有处理这些情况时 它会让 ReSharper 提醒我 然而 对于async返回 a 的方法Task o
  • MongoDB 按字段 A 排序,如果字段 B != null,否则按字段 C 排序

    我面临这个挑战 检索按字段 A 排序的文档如果字段 B 存在 不为空 否则按字段排序 C 在 SQL 世界中 我会执行两个查询并创建一个 UNION SELECT 但我不知道如何从 Mongo 开始 map reduce 是正确的方法吗 或
  • writeTo PipedOutputStream 只是挂起

    我的目标是 从 S3 读取文件 更改其元数据 再次推送到S3 AWS java SDK 不允许推送输出流 因此 我必须将outputstream从步骤2到inputstream 为此我决定使用PipedInputStream 但是 我的代码
  • 在 angular2 中的 ngFor 中显示更多按钮

    我有超过 50 项的清单 我只想显示前 10 个项目 并且我将有一个按钮 单击该按钮会显示接下来的 10 个项目 再次单击该按钮会显示接下来的 10 个项目 直到显示所有项目 ul class results main content li
  • 获取插入行的ID cassandra .Net

    我正在使用 datastax C 驱动程序将一行插入 cassandra 数据库 我的示例代码如下所示 var cluster Cluster Builder AddContactPoints localhost Build using c
  • 仅将 css 样式设置为表格的第一行

    如何用CSS访问不同表的第一行tr班级名称 div table tbody tr class head td Date td td Info td td More td tr tr td td tr tbody table div 如何制作
  • 使用 animate 中的 Step 函数来变换旋转元素

    All 我正在尝试使用 jquery animate 和 css 转换属性创建 往返 动画 我提到this https stackoverflow com questions 5462275 animate element transfor
  • 过滤掉 Log4j2 文件中的 Hibernate 日志

    我有一个log4j2 xml文件如下 它正在工作 但它获取了大量 Hibernate 和 GWT 日志文件 如何排除这些包 或者如何让我的日志文件仅包含包层次结构中的日志记录
  • 尝试使用 ssh2_auth_pubkey_file() 连接

    我正在尝试制作一个在终端上运行的 php 脚本 该脚本将通过 ssh 连接到远程服务器并检索文件 这是我到目前为止的代码 usr bin php q
  • 多视图控件如何处理其视图状态?

    多视图控件是否包含其每个视图的视图状态信息 无论视图当前是否可见 是的 所有视图仍然存在 只是不活动的视图被隐藏 禁用 http msdn microsoft com en us library system web ui webcontr
  • 使用 PayPal API 通过交易 ID 获取付款

    我有 PayPal 交易 ID 但不知道与其关联的付款 ID 付款不一定是由 REST API 创建的 我想使用交易ID查询付款 REST API 文档建议通过交易 ID 查找销售额仅当使用 REST API 创建时才可能 https de
  • 一次处理 N 个作业的 Asyncio Worker?

    我正在尝试做一个asyncio工人类将消耗作业队列中的作业并处理最多N并行工作 某些作业可能会排队其他作业 当作业队列为空并且工作线程完成所有当前作业时 它应该结束 我还在挣扎asyncio从概念上讲 这是我的尝试之一 其中N 3 impo
  • Jquery .remove() 撤消?

    有什么办法可以实现这一点吗 我正在使用一个分页插件 它读取 ul 中的 li 数量 并确定要吐出的编号链接的数量 您可能想使用 hide 并检查 li 是否可见 这可以通过以下方式完成 li visible
  • PySpark - 获取组中每行的行号

    使用 pyspark 我希望能够对 Spark 数据帧进行分组 对组进行排序 然后提供行号 所以 Group Date A 2000 A 2002 A 2007 B 1999 B 2015 会成为 Group Date row num A
  • JaCoCo 和 Gradle - 过滤选项

    我目前正在使用 Gradle 插件来运行 JaCoCo 来进行代码覆盖率报告 我想在我的 build gradle 中指定一些过滤选项 https github com jacoco jacoco wiki FilteringOptions
  • 如何使用 openpyxl“格式化单元格”?

    我想使用 openpyxl 格式化 Excel 工作表中的列单元格 使其数字小数位为 0 示例表 B C 63245634566 NAME 63562341234 NAME 23452345345 NAME 21345234554 NAME
  • Jetpack Compose 矢量解析问题

    我正在尝试加载向量 但不断收到此错误堆栈跟踪 java lang IllegalArgumentException Unknown command for R at androidx compose ui graphics vector P
  • 如何在 TCL 中创建并迭代哈希值的哈希值?

    如何在 TCL 中创建并迭代哈希值的哈希值 如果我有这样的数据 foo a gt aa gt aa1 aa2 aa3 ab gt ab1 ab2 ab3 ac gt ac1 ac2 ac3 b gt ba gt ba1 ba2 ba3 bb
  • 带计时器的自动静音 Android 设备设置我的用户

    我的应用程序中有 2 个按钮 开始时间和结束时间 现在我希望设备在用户设置的开始和结束持续时间内进入静音模式 我该怎么做 我的用于获取开始时间和结束时间输入的代码mainactivity java code包 com example h m
  • 在C中通过名称获取进程ID

    我试图通过进程名称获取进程 ID 例如 notepad exe 但之前 Stack Overflow 上的解决方案似乎无法正常工作 这是我尝试过的 DWORD FindProcessId const char processname HAN