广告合作
  • 今日头条

    今日头条

  • 百度一下

    百度一下,你就知道

  • 新浪网

    新浪网 - 提供新闻线索,重大新闻爆料

  • 搜狐

    搜狐

  • 豆瓣

    豆瓣

  • 百度贴吧

    百度贴吧——全球领先的中文社区

  • 首页 尚未审核订阅工具 订阅

    c#中如何隐藏进程

    来源:网络收集  点击:  时间:2024-02-21
    【导读】:
    c#是一种电脑编程语言,可以编制C/S和B/S结构的程序,那么在C#中该如何隐藏进程呢?方法/步骤1/6分步阅读

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

    2/6

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

    3/6

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

    4/6

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

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

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

    5/6

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

    6/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; //定义结构体 (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); } }

    本文关键词:

    版权声明:

    1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

    2、本站仅提供信息发布平台,不承担相关法律责任。

    3、若侵犯您的版权或隐私,请联系本站管理员删除。

    4、文章链接:http://www.1haoku.cn/art_94653.html

    相关资讯

    ©2019-2020 http://www.1haoku.cn/ 国ICP备20009186号05-06 03:18:25  耗时:0.028
    0.0279s