c#中如何隐藏进程

2025-11-12 00:30:44

1、使用C#编制计算机程序非常方便,是微软推出的一种计算机编程语言,常用来编制针对台式机、笔记本类设备的电脑程序

c#中如何隐藏进程

2、C#编程语言主要用于Windows系统的程序编制,对于Windows系统桌面上的窗口的各种特性都可以实现其效果,比如程序进程、任务栏显示等等

c#中如何隐藏进程

3、在C# winform 应用程序中,实现在窗体处于最小化时,隐藏该程序的任务栏图标,在托盘上显示该程序的图标的功能非常简单,只需针对窗体属性赋值即可

c#中如何隐藏进程

4、操作起来就是直接针对窗体属性进行处理,代码示例如下:

this.ShowInTaskbar = false;//隐藏任务栏标签

 

this.notifyIcon1.Visible = true;//显示托盘图标

代码中的this就是指当前窗体

c#中如何隐藏进程

5、如果需要将任务管理器中的程序进程进行隐藏,相对就要复杂些,主要用到Windows系统API的一些函数方法,通过给程序发生消息实现

c#中如何隐藏进程

6、代码示例如下,其中p_HandlePtr为获取的需要处理的进程的句柄:

IntPtr _ControlIntPtr = p_HandlePtr;  

 

 

 

            int _ItemCount = WindowsAPI.Win32API.SendMessage(p_HandlePtr, 0x1004, 0, 0);  

 

 

 

            WindowsAPI.Win32API.ProcessAccessType _Type;  

 

            _Type = WindowsAPI.Win32API.ProcessAccessType.PROCESS_VM_OPERATION | WindowsAPI.Win32API.ProcessAccessType.PROCESS_VM_READ | WindowsAPI.Win32API.ProcessAccessType.PROCESS_VM_WRITE;  

 

 

 

            IntPtr _ProcessIntPtr = WindowsAPI.Win32API.OpenProcess(_Type, 1, (uint)m_ProcessID);  

 

 

 

            IntPtr _Out = IntPtr.Zero;  

 

            for (int z = 0; z != _ItemCount; z++)  

 

            {  

 

 

 

                //分配一个内存地址 保存进程的应用程序名称  

 

                IntPtr _StrBufferMemory = WindowsAPI.Win32API.VirtualAllocEx(_ProcessIntPtr, 0, 255, WindowsAPI.Win32API.MEM_COMMIT.MEM_COMMIT, WindowsAPI.Win32API.MEM_PAGE.PAGE_READWRITE);  

 

 

 

                byte[] _OutBytes = new byte[40];  //定义结构体 (LVITEM)          

 

 

 

                byte[] _StrIntPtrAddress = BitConverter.GetBytes(_StrBufferMemory.ToInt32());  

 

                _OutBytes[20] = _StrIntPtrAddress[0];  

 

                _OutBytes[21] = _StrIntPtrAddress[1];  

 

                _OutBytes[22] = _StrIntPtrAddress[2];  

 

                _OutBytes[23] = _StrIntPtrAddress[3];  

 

                _OutBytes[24] = 255;  

 

 

 

                //给结构体分配内存  

 

                IntPtr _Memory = WindowsAPI.Win32API.VirtualAllocEx(_ProcessIntPtr, 0, _OutBytes.Length, WindowsAPI.Win32API.MEM_COMMIT.MEM_COMMIT, WindowsAPI.Win32API.MEM_PAGE.PAGE_READWRITE);  

 

                //把数据传递给结构体 (LVITEM)    

 

                WindowsAPI.Win32API.WriteProcessMemory(_ProcessIntPtr, _Memory, _OutBytes, (uint)_OutBytes.Length, out _Out);  

 

 

 

                //发送消息获取结构体数据  

 

                WindowsAPI.Win32API.SendMessage(p_HandlePtr, 0x102D, z, _Memory);  

 

 

 

                //获取结构体数据  

 

                WindowsAPI.Win32API.ReadProcessMemory(_ProcessIntPtr, _Memory, _OutBytes, (uint)_OutBytes.Length, out _Out);  

 

 

 

                //获取结构体 pszText的地址  

 

                IntPtr _ValueIntPtr = new IntPtr(BitConverter.ToInt32(_OutBytes, 20));  

 

 

 

                byte[] _TextBytes = new byte[255];  //获取pszText的数据  

 

                WindowsAPI.Win32API.ReadProcessMemory(_ProcessIntPtr, _ValueIntPtr, _TextBytes, 255, out _Out);  

 

                //获取进程名称   

 

                string _ProcessText = System.Text.Encoding.Default.GetString(_TextBytes).Trim(new Char[] { '/0' });  

 

                //释放内存  

 

                WindowsAPI.Win32API.VirtualFreeEx(_ProcessIntPtr, _StrBufferMemory, 0, WindowsAPI.Win32API.MEM_COMMIT.MEM_RELEASE);  

 

                WindowsAPI.Win32API.VirtualFreeEx(_ProcessIntPtr, _Memory, 0, WindowsAPI.Win32API.MEM_COMMIT.MEM_RELEASE);  

 

 

 

                if (_ProcessText == m_ProcessName)  

 

                {  

 

                    WindowsAPI.Win32API.SendMessage(p_HandlePtr, 0x1008, z, 0);  

 

                }  

 

            }  

c#中如何隐藏进程

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢