您好我使用此代码检查我的应用程序“piko.exe”运行后的进程以及如果程序如 “non.exe”,“firefox.exe”,“lol.exe”如果运行已关闭我的应用程序并返回错误。
但是我需要每隔30秒进行一次这个检查过程,但我使用的时候,但是我的主程序(这段代码是我项目的一部分)停止工作,如果可能,请求有人编辑我的代码谢谢。
#include "StdInc.h"
#include <windows.h>
#include <tlhelp32.h>
#include <tchar.h>
#include <stdio.h>
void find_Proc(){
HANDLE proc_Snap;
HANDLE proc_pik;
HANDLE proc_pikterm;
PROCESSENTRY32 pe32;
PROCESSENTRY32 pe32pik;
int i;
char* chos[3] = {"non.exe","firefox.exe","lol.exe"};
char* piko = "piko.exe";
proc_pik = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
proc_Snap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
pe32.dwSize = sizeof(PROCESSENTRY32);
pe32pik.dwSize = sizeof(PROCESSENTRY32);
for(i = 0; i < 3 ; i++){
Process32First(proc_Snap , &pe32);
do{
if(!strcmp(chos[i],pe32.szExeFile)){
MessageBox(NULL,"CHEAT DETECTED","ERROR",NULL);
Process32First(proc_pik,&pe32pik);
do{
if(!strcmp(iw4m,pe32pik.szExeFile)){
proc_pikterm = OpenProcess(PROCESS_ALL_ACCESS, TRUE, pe32pik.th32ProcessID);
if(proc_pikterm != NULL)
TerminateProcess(proc_pikterm, 0);
CloseHandle(proc_pikterm);
}
} while(Process32Next(proc_pik, &pe32pik));
}
} while(Process32Next(proc_Snap, &pe32));
}
CloseHandle(proc_Snap);
CloseHandle(proc_pik);
}
答案 0 :(得分:0)
根据您使用的操作系统,您可以轮询系统时间并检查30秒是否已过期。这样做的方法是在循环开始时花时间,在结束时花时间并减去它们。然后从代码运行该例程开始,减去您想要睡眠的时间。
另外,如果你不需要30秒,你可以在你的循环中添加sleep(30)。
答案 1 :(得分:0)
你能解释一下为什么这种方法不适合你吗?以下代码旨在每秒计算一个值。让“checkMyProcess”在睡眠调用之前执行在while循环中所需的任何操作。
#include <iostream>
using namespace std;
int someGlobal = 5;//Added in a global so you can see what fork does, with respect to not sharing memory!
bool checkMyProcess(const int MAX) {
int counter = 0;
while(counter < MAX) {
cout << "CHECKING: " << counter++ << " Global: " << someGlobal++ << endl;
sleep(1);
}
}
void doOtherWork(const int MIN) {
int counter = 100;
while(counter > MIN) {
cout << "OTHER WORK:" << counter-- << " Global: " << someGlobal << endl;
sleep(1);
}
}
int main() {
int pid = fork();
if(pid == 0) {
checkMyProcess(5);
} else {
doOtherWork(90);
}
}
当然要意识到,如果你想在while循环外工作,在同一个程序中,你必须使用线程,或者分叉一对进程。
编辑:
我在调用“fork”时添加了,因此您可以看到两个进程同时工作。注意:如果“checkMyProcess”函数需要了解“doOtherWork”功能中的内存,那么线程将是一个更容易的解决方案!