diff options
Diffstat (limited to 'rbutil/rbutilqt/base/utils.cpp')
-rw-r--r-- | rbutil/rbutilqt/base/utils.cpp | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/rbutil/rbutilqt/base/utils.cpp b/rbutil/rbutilqt/base/utils.cpp index 28162a93f3..5c80e1225c 100644 --- a/rbutil/rbutilqt/base/utils.cpp +++ b/rbutil/rbutilqt/base/utils.cpp @@ -54,6 +54,7 @@ #include <tlhelp32.h> #endif #if defined(Q_OS_MACX) +#include <Carbon/Carbon.h> #include <CoreFoundation/CoreFoundation.h> #include <CoreServices/CoreServices.h> #include <IOKit/IOKitLib.h> @@ -643,10 +644,36 @@ QStringList Utils::findRunningProcess(QStringList names) } } while(result); CloseHandle(hdl); - qDebug() << processlist; #endif #if defined(Q_OS_MACX) + ProcessSerialNumber psn = { 0, kNoProcess }; + OSErr err; + do { + pid_t pid; + err = GetNextProcess(&psn); + err = GetProcessPID(&psn, &pid); + if(err == noErr) { + char buf[32] = {0}; + ProcessInfoRec info; + memset(&info, 0, sizeof(ProcessInfoRec)); + info.processName = (unsigned char*)buf; + info.processInfoLength = sizeof(ProcessInfoRec); + err = GetProcessInformation(&psn, &info); + if(err == noErr) { + // some processes start with nonprintable characters. Skip those. + int i; + for(i = 0; i < 32; i++) { + if(isprint(buf[i])) break; + } + // avoid adding duplicates. + QString process = QString::fromUtf8(&buf[i]); + if(!processlist.contains(process)) { + processlist.append(process); + } + } + } + } while(err == noErr); #endif // check for given names in list of processes for(int i = 0; i < names.size(); ++i) { |