QT_获取运行进程所在目录路径_2

QString getProcessFullPath(const quint64 &processId)
{
#ifdef Q_OS_WIN
    // access process path
    WCHAR name[1024];
    ZeroMemory(name, 1024);
    // open process handler
    HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processId);
    if (NULL != hProcess)
    {
        DWORD cbNeeded;
        HMODULE hMod;
        // process path
        if (EnumProcessModules(hProcess, &hMod, sizeof(hMod), &cbNeeded))
        {
            DWORD dw = GetModuleFileNameExW(hProcess, hMod, name, 1024);
        }
        CloseHandle(hProcess);
    }
    return QString::fromWCharArray(name);
#elif defined Q_OS_MAC
#include <libproc.h>
    char pathbuf[1024];
    proc_pidpath(processId, pathbuf, sizeof(pathbuf));
    qDebug() << "running process path:     " << pathbuf;

//    //const char* strFind_ComName = convertQString2char("ps -ef|grep processName |grep -v grep |awk '{print $8}'");
//    QString strCommand = "ps -ef|grep " + processName + " |grep -v grep |awk '{print $2}'";
//    const char* strFind_ComName = convertQString2char(strCommand);
//    FILE * pPipe = popen(strFind_ComName, "r");
//    if (pPipe)
//    {
//        std::string com;
//        char name[512] = { 0 };
//        while (fgets(name, sizeof(name), pPipe) != NULL)
//        {
//            int nLen = strlen(name);
//            if (nLen > 0
//                && name[nLen - 1] == '
'
//                && name[0] == '/')
//            {
//                name[nLen - 1] = '';
//                strPath = name;
//                break;
//            }
//        }
//        pclose(pPipe);
//    }
//     qDebug() << "----------------------------------------- check  processName  strPath " << strPath;

    QString strPath(pathbuf);
    return strPath;
#endif
}
原文地址:https://www.cnblogs.com/amwuau/p/9776795.html