监测进程

[DllImport("kernel32.dll")]
        private static extern int Process32First(IntPtr hSnapshot,
                                         ref PROCESSENTRY32 lppe);

        [DllImport("kernel32.dll")]
        private static extern int Process32Next(IntPtr hSnapshot,
                                        ref PROCESSENTRY32 lppe);

        [DllImport("kernel32.dll", SetLastError = true)]
        private static extern IntPtr CreateToolhelp32Snapshot(uint dwFlags,
                                                       uint th32ProcessID);

        [DllImport("kernel32.dll", SetLastError = true)]
        private static extern bool CloseHandle(IntPtr hSnapshot);

        private const uint TH32CS_SNAPPROCESS = 0x00000002;

        [StructLayout(LayoutKind.Sequential)]
        private struct PROCESSENTRY32
        {
            public uint dwSize;
            public uint cntUsage;
            public uint th32ProcessID;
            public IntPtr th32DefaultHeapID;
            public uint th32ModuleID;
            public uint cntThreads;
            public uint th32ParentProcessID;
            public int pcPriClassBase;
            public uint dwFlags;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
            public string szExeFile;
        }
        public static bool IsProcessRunning(string applicationName,ref int count)
        {
            IntPtr handle = IntPtr.Zero;
            try
            {
                handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
                PROCESSENTRY32 info = new PROCESSENTRY32();
                info.dwSize = (uint)System.Runtime.InteropServices.
                              Marshal.SizeOf(typeof(PROCESSENTRY32));
                int first = Process32First(handle, ref info);
                do
                {
                    //Console.WriteLine(info.szExeFile);
                    if (string.Compare(info.szExeFile,
                          applicationName, true) == 0)
                    {
                        count++;
                    }
                }
                while (Process32Next(handle, ref info) != 0);
            }
            catch
            {
                throw;
            }
            finally
            {
                CloseHandle(handle);
                handle = IntPtr.Zero;
            }
            return false;
        }


        #region 强制关闭进程
        /// <summary>
        /// 关闭进程
        /// </summary>
        /// <param name="processName">进程名</param>
        private static void KillProcess(string processName)
        {
            System.Diagnostics.Process[] myproc = System.Diagnostics.Process.GetProcessesByName(processName);
            foreach (var item in myproc)
            {
                if (item.ProcessName == processName)
                {
                    item.Kill();
                }
            }

        }



        //强制关闭最近打开的某个进程

        private static void KillRecentProcess(string processName)
        {
            System.Diagnostics.Process[] Proc = System.Diagnostics.Process.GetProcessesByName(processName);
            System.DateTime startTime = new DateTime();
            int m, killId = 0;
            for (m = 0; m < Proc.Length; m++)
            {
                if (startTime < Proc[m].StartTime)
                {
                    startTime = Proc[m].StartTime;
                    killId = m;
                }
            }
            if (Proc[killId].HasExited == false)
            {
                Proc[killId].Kill();
            }
        }
        #endregion

posted @ 2016-03-04 16:48  caijinhao  阅读(160)  评论(0编辑  收藏  举报