- 注册时间
 - 2021-4-16
 
- 最后登录
 - 2025-3-14
 
- 在线时间
 - 6 小时
 
 
 
 
 
编程入门 
  
	- 龙马币
 - 470 
 
 
 
 
 | 
 
 
1.windows job机制 
 
把进程放入job容器,调用job api实现 
- DWORD nderror;
 
 -  HANDLE m_hJob = CreateJobObject(NULL,"ProcessGroup");
 
 -  //STARTUPINFO stInfo;
 
 -  //memset(&stInfo, 0, sizeof(STARTUPINFO));
 
  
-  //(2)向job作业添加进程:
 
 -  //这里是伪代码 
 
 -  //创建一个进程
 
 -  //把进程句柄传入 AssignProcessToJobObject
 
 -  BOOL ret = AssignProcessToJobObject(m_hJob,进程句柄);
 
 -  if (ret)
 
 -  {
 
 -      printf("向作业添加进程成功");
 
 -  }else
 
 -  {
 
 -      nderror = GetLastError();
 
 -  }
 
 -  
 
 -  
 
 -  JOBOBJECT_BASIC_LIMIT_INFORMATION limitInfo;
 
 -  limitInfo.LimitFlags = JOB_OBJECT_LIMIT_PROCESS_TIME|JOB_OBJECT_LIMIT_PRIORITY_CLASS;
 
 -  limitInfo.PerProcessUserTimeLimit.QuadPart=10000;
 
 -  limitInfo.PriorityClass=IDLE_PRIORITY_CLASS;
 
 -  
 
 - //这里是参数填这个 JobObjectCpuRateControlInformation 
 
 - //https://docs.microsoft.com/en-us/windows/win32/api/jobapi2/nf-jobapi2-setinformationjobobject开发文档
 
 -  
 
 -  ret = SetInformationJobObject(m_hJob,JobObjectBasicLimitInformation ,&limitInfo, sizeof(limitInfo));
 
 
  复制代码 
注意:系统必须win8以上,win7没这功能,代码我也没跑通,据说是所有由系统创建的进程已经放入了一个job,(为了解决兼容性) 
 
  
2.对于游戏进程,hook dx接口,sleep 20ms-50ms 代码百度太多了. 
注意,dx接口太容易被检测了,个人建议hook点选深点 
 
 
3.hook消息处理函数,引用自大佬@wzanthony 
- while (1)
 
 - {
 
 -     if (PeekMessage(...))
 
 -     {
 
 -         TranslateMessage(...);
 
 -         DispatchMessage(...);
 
 -     }
 
 -     else
 
 -     {
 
 -         Sleep(1);
 
 -     }
 
 - }
 
  复制代码 
 
4.我要降低的是无窗口进程的cpu占用率,消息处理函数还有检测,不符合我的需求,最后找到一个开源软件,大概看了下,熬了一晚上抗不住了,他是循环降低进程优先级,枚举该进程所有线程,挂起\,间隔100-300ms恢复来实现Down Cpu 
 
代码放出,下载: 
 
 
降低指定进程cpu占用率.zip
(171.66 KB, 下载次数: 3, 售价: 10 龙马币)
 
 
 
 |   
 
 
 
 |