当前位置:酷酷问答>生活百科>c#中如何隐藏进程

c#中如何隐藏进程

2024-09-18 17:01:38 编辑:zane 浏览量:594

c#中如何隐藏进程

的有关信息介绍如下:

c#中如何隐藏进程

c#是一种电脑编程语言,可以编制C/S和B/S结构的程序,那么在C#中该如何隐藏进程呢?

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

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

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

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

this.ShowInTaskbar = false;//隐藏任务栏标签this.notifyIcon1.Visible = true;//显示托盘图标

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

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

代码示例如下,其中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; //定义结构体 (LVITEM) byte[] _StrIntPtrAddress = BitConverter.GetBytes(_StrBufferMemory.ToInt32()); _OutBytes = _StrIntPtrAddress; _OutBytes = _StrIntPtrAddress; _OutBytes = _StrIntPtrAddress; _OutBytes = _StrIntPtrAddress; _OutBytes = 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; //获取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); } }

版权声明:文章由 酷酷问答 整理收集,来源于互联网或者用户投稿,如有侵权,请联系我们,我们会立即处理。如转载请保留本文链接:https://www.kukuwd.com/life/41401.html
热门文章