public static Process GetParent(this Process process) { var parentPid = 0; var hnd = Kernel32.CreateToolhelp32Snapshot(Kernel32.Th32CsSnapprocess, 0); if (hnd == IntPtr.Zero) { return(null); } var processInfo = new Kernel32.Processentry32 { dwSize = (uint)Marshal.SizeOf(typeof(Kernel32.Processentry32)) }; if (Kernel32.Process32First(hnd, ref processInfo) == false) { return(null); } do { if (process.Id == processInfo.th32ProcessID) { parentPid = (int)processInfo.th32ParentProcessID; } }while (parentPid == 0 && Kernel32.Process32Next(hnd, ref processInfo)); return(parentPid > 0 ? Process.GetProcessById(parentPid) : null); }
public static Process GetParent(this Process process) { var parentPid = 0; var hnd = Kernel32.CreateToolhelp32Snapshot(Kernel32.Th32CsSnapprocess, 0); if (hnd == IntPtr.Zero) return null; var processInfo = new Kernel32.Processentry32 { dwSize = (uint)Marshal.SizeOf(typeof(Kernel32.Processentry32)) }; if (Kernel32.Process32First(hnd, ref processInfo) == false) return null; do { if (process.Id == processInfo.th32ProcessID) parentPid = (int)processInfo.th32ParentProcessID; } while (parentPid == 0 && Kernel32.Process32Next(hnd, ref processInfo)); return parentPid > 0 ? Process.GetProcessById(parentPid) : null; }