NtSuspendProcess
Bir döngüde arayabilir , 450 msn için askıya alabilir ve 50 msn için devam ettirebilirsiniz. Benim açımdan bununla ilgili deneylerin belirgin bir yan etkisi olmadığı görülüyor. İşlem ön plana geldiğinde, bu döngüyü devre dışı bırakıyorum.
Java örneği:
boolean inForeground = false;
for(;;) {
updateProcesses(); // updates list of handles to throttle
if(!inForeground) {
for(HANDLE handle : handles.values()) {
NtDll.INSTANCE.NtSuspendProcess(handle);
}
}
Thread.sleep(480);
int foregroundPid = getForegroundPid();
inForeground = false;
for(Map.Entry<Integer, HANDLE> entry : handles.entrySet()) {
NtDll.INSTANCE.NtResumeProcess(entry.getValue());
if(entry.getKey() == foregroundPid) {
inForeground = true;
}
}
Thread.sleep(20);
}