public static IEnumerable <ProcessEntry32> GetProcesses() { var handleToSnapshot = IntPtr.Zero; try { var procEntry = new ProcessEntry32 { dwSize = (uint)Marshal.SizeOf(typeof(ProcessEntry32)) }; handleToSnapshot = Win32ApiImports.CreateToolhelp32Snapshot(SnapshotFlags.Process, 0); if (Win32ApiImports.Process32First(handleToSnapshot, ref procEntry)) { do { yield return(procEntry); }while (Win32ApiImports.Process32Next(handleToSnapshot, ref procEntry)); } else { throw new ApplicationException($"Failed with win32 error code {Marshal.GetLastWin32Error()}"); } } finally { Win32ApiImports.CloseHandle(handleToSnapshot); } }
public static extern bool Process32Next([In] IntPtr hSnapshot, ref ProcessEntry32 lppe);