zoukankan      html  css  js  c++  java
  • 枚举CE进程

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

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

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

            private const uint TH32CS_SNAPPROCESS = 0x00000002;
            private const uint TH32CS_SNAPNOHEAPS = 0x40000000;
            [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;
            }



     IntPtr handle = IntPtr.Zero;
                try
                {
                    handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS | TH32CS_SNAPNOHEAPS, 0);
                    PROCESSENTRY32 info = new PROCESSENTRY32();
                    info.dwSize = (uint)Marshal.SizeOf(typeof(PROCESSENTRY32)) +8;
                   
                    int first = Process32First(handle, ref info);
                    //if (first == 0)
                    //    MessageBox.Show("no pr");
                    //else
                    {
                        do
                        {
                            //if (string.Compare(info.szExeFile, "CamWedge.exe", true) == 0)
                            //    MessageBox.Show("yes");
                            listBox1.Items.Add(info.szExeFile);
                        }
                        while (Process32Next(handle, ref info) != 0);
                    }
                }
                catch
                { throw; }


    网上很多这样的文章,但是我按照网上文章去做,在Process32First函数永远返回的都是0,后来才发现原来
     info.dwSize = (uint)Marshal.SizeOf(typeof(PROCESSENTRY32)) +8;
    这个地方一定要 +8

    希望给需要的朋友有所帮助,少走冤枉路!



    特别提示 感谢李森给出的提示:

    还有一点要说明的是,在使用完handle后,要CloseToolhelp32Snapshot(handle);
    1[DllImport("toolhelp.dll")]
    2[return: MarshalAs(UnmanagedType.Bool)]
    3public static extern bool CloseToolhelp32Snapshot(IntPtr hSnapshot);
  • 相关阅读:
    拦截器-监听器-过滤器的区别
    实例Rest风格+SpringMVC+中文乱码解决
    Nginx功能详细介绍(大而全)
    Nginx应⽤场景之反向代理
    SpringMVC参数传递之日期类型
    SpringMVC请求参数绑定回顾
    数据输出机制之Model、Map及ModelMap回顾
    ReactHook快速上车
    Chrome性能调优技巧
    移动端适配的最佳实践
  • 原文地址:https://www.cnblogs.com/moses/p/1581644.html
Copyright © 2011-2022 走看看