/// <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)); }
/// <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)); }
/// <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)); }
/* * ********************************************************************** * ********************************************************************** */ /// <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); }