Windows下C语言通过部分路径,模糊搜索对应的程序

废话少说,上代码

cpp 复制代码
/*
* brief: 根据进程相对路径获取进程ID,模糊比较
*/
int get_pid_by_path(const char *process_path)
{
    pid_t pid = 0;

    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

    if (hSnapshot)
    {
        PROCESSENTRY32 pe32;
        pe32.dwSize = sizeof(PROCESSENTRY32);

        if (Process32First(hSnapshot, &pe32))
        {
            do
            {
                HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pe32.th32ProcessID);
                if (hProcess)
                {
                    TCHAR szPath[MAX_PATH] = { 0 };

                    if (GetProcessImageFileName(hProcess, szPath, MAX_PATH))
                    {
                        if (strstr(szPath, process_path) != NULL)
                        {
                            pid = pe32.th32ProcessID;

                            log_debug(__FILE__, __LINE__, "pid %d szpath:%s process_path:%s", pid, szPath, process_path);

                            CloseHandle(hProcess);

                            break;
                        }
                    }
                    else
                        log_debug(__FILE__, __LINE__, "GetProcessImageFileName szpath:%s process_path:%s error %d", pe32.szExeFile, process_path, GetLastError());
                    
                    CloseHandle(hProcess);
                }
                else
                    log_debug(__FILE__, __LINE__, "OpenProcess failed szpath:%s process_path:%s error %d", pe32.szExeFile, process_path, GetLastError());

            } while (Process32Next(hSnapshot, &pe32));
        }
        CloseHandle(hSnapshot);
    }
    return pid;
}
  • 以上接口可以用作查找windows所有运行进程。
  • 这其中的问题在GetProcessImageFileName的用法上,用该接口比较稳定。
  • xp以前更老的版本则需要使用GetModuleFileNameEx。
  • QueryFullProcessImageName 是vista新增的兼容性不好**。**
  • GetProcessImageFileName是必须SYSTEM权限才稳定,至于怎么获取SYSTEM权限,则需要自己恶补一下windows知识了。
相关推荐
栈与堆几秒前
LeetCode-88-合并两个有序数组
java·开发语言·数据结构·python·算法·leetcode·rust
彩妙不是菜喵2 分钟前
C++:类与对象
开发语言·c++
董世昌414 分钟前
添加、删除、替换、插入元素的全方法指南
java·开发语言·前端
源代码•宸8 分钟前
Leetcode—712. 两个字符串的最小ASCII删除和【中等】
开发语言·后端·算法·leetcode·职场和发展·golang·dp
无风听海10 分钟前
C# 中对象相等性判断的全面解析
开发语言·c#
寻星探路10 分钟前
【Python 全栈测开之路】Python 基础语法精讲(三):函数、容器类型与文件处理
java·开发语言·c++·人工智能·python·ai·c#
逑之11 分钟前
C语言笔记8:操作符
c语言·开发语言·笔记
无限进步_12 分钟前
【C语言&数据结构】相同的树:深入理解二叉树的结构与值比较
c语言·开发语言·数据结构·c++·算法·github·visual studio
枫叶丹417 分钟前
【Qt开发】Qt系统(五)-> Qt 多线程
c语言·开发语言·c++·qt
Larry_Yanan22 分钟前
Qt多进程(九)命名管道FIFO
开发语言·c++·qt·学习·ui