- 注册时间
- 2021-4-16
- 最后登录
- 2024-9-9
- 在线时间
- 6 小时
编程入门
- 龙马币
- 72
|
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, 下载次数: 2, 售价: 10 龙马币)
|
|