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

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

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

4、操作起来就是直接针对窗体属性进行处理,代码示例如下:
this.ShowInTaskbar = false;//隐藏任务栏标签
this.notifyIcon1.Visible = true;//显示托盘图标
代码中的this就是指当前窗体

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

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);
}
}

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