• 枚举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);
  • 相关阅读:
    Linux终端基本命令
    Markdown基本语法
    谷歌浏览器解决”此Flash Player与您的地区不相容“
    谷歌浏览器不可以默认允许flash的解决方法
    MySQL8.0登陆方式
    谷歌浏览器安装位置自定义
    java生成六位验证码
    对AJAX的理解
    对servlet请求的理解
    js60秒倒计时
  • 原文地址:https://www.cnblogs.com/moses/p/1581644.html
Copyright © 2020-2023  润新知