示例#1
0
 /// <summary>
 /// Get list of all processes currently running
 /// </summary>
 /// <param name="enumCallBack">callback method when each process is found</param>
 /// <returns></returns>
 public static bool GetListOfRunningProcesses(EnumProcess_Callback enumCallBack)
 {
     return(EnumerateProcess(enumCallBack, 0, "", ENUMERATION_MODE.FIND_ALL));
 }
示例#2
0
 /// <summary>
 /// Find a process by its pid
 /// </summary>
 /// <param name="enumCallBack">callback method when the process is found</param>
 /// <param name="dwProcessID"> pid of process</param>
 /// <returns></returns>
 public static bool FindProcessByPID(EnumProcess_Callback enumCallBack, uint dwProcessID)
 {
     return(EnumerateProcess(enumCallBack, dwProcessID, "", ENUMERATION_MODE.FIND_BY_PID));
 }
示例#3
0
 /// <summary>
 /// Find a process by its name
 /// </summary>
 /// <param name="enumCallBack">callback method when the process is found</param>
 /// <param name="strProcName"> name of process</param>
 /// <returns></returns>
 public static bool FindProcessByName(EnumProcess_Callback enumCallBack, string strProcName)
 {
     return(EnumerateProcess(enumCallBack, 0, strProcName, ENUMERATION_MODE.FIND_BY_NAME));
 }
示例#4
0
        /*
         * **********************************************************************
         * **********************************************************************
         */


        /// <summary> Enumerate all or find a processe(s) in the system.
        /// enumCallBack is called every time process is found </summary>
        /// <param name="enumCallBack">Delegate to callback method called each time a process is found</param>
        /// <param name="mode">Working switch:: Find_ALL=Gets all process, FindByPid, FindByName</param>
        /// <param name="procPID">PID of process in FIND_BY_PID; 0 if in FIND_ALL mode</param>
        /// <param name="procName">Name of process in FIND_BY_NAME; empty string if in FIND_ALL mode</param>
        /// <returns></returns>
        private static bool EnumerateProcess(EnumProcess_Callback enumCallBack, UInt32 procPID = 0, string procName = "", ENUMERATION_MODE mode = ENUMERATION_MODE.FIND_ALL)
        {
            Contract.Requires(enumCallBack != null);

            bool findMode   = (mode != ENUMERATION_MODE.FIND_ALL) ? true : false;
            bool findByName = (mode == ENUMERATION_MODE.FIND_BY_NAME) ? true : false;
            bool status     = false;

            if (findMode || findByName)
            {
                procPID = 0;
            }

            IntPtr hSnap = CreateToolhelp32Snapshot(SNAPSHOT_TYPE.TH32CS_SNAPPROCESS, (int)procPID);        // Take Process Snapshot

            if (hSnap != IntPtr.Zero)                                                                       // Validate handle to snapshot
            {
                PROCESSENTRY32 entry = new PROCESSENTRY32 {
                };
                entry.dwSize = (uint)Marshal.SizeOf(typeof(PROCESSENTRY32));

                ProcessInfo processInfo = new ProcessInfo();

                bool validEntry = Process32First(hSnap, ref entry);                    // Get first entry in the snapshot

                if (!findMode && validEntry)
                {
                    status = true;                                                     // Atleast 1 entry found in Find_All mode
                }
                while (validEntry)
                {
                    string pName = Encoding.ASCII.GetString(entry.szExeFile).TrimStart('\0');   // Get Name of current snapshot entry
                    pName = pName.Substring(0, pName.IndexOf('\0'));

                    if (findMode)                                                                // Search Mode
                    {
                        if (findByName)
                        {
                            if (pName.ToLower().Contains(procName.ToLower()))                                   // search by name
                            {
                                validEntry = Process32Next(hSnap, ref entry); status = true;
                                continue;
                            }
                        }
                        else
                        {
                            if (entry.th32ProcessID != procPID)                                                 // Search by PID
                            {
                                validEntry = Process32Next(hSnap, ref entry); status = true;
                                continue;
                            }
                        }
                    }

                    processInfo.updateInfo(entry.th32ProcessID, pName);
                    enumCallBack(processInfo);                                                                  // Call the callback

                    validEntry = Process32Next(hSnap, ref entry);                                               // Get next entry in the snapshot
                }
            }

            CloseHandle(hSnap);
            return(status);
        }