1

嗨,我在我的应用程序“piko.exe”运行后使用此代码检查进程,如果运行“non.exe”、“firefox.exe”、“lol.exe”等程序关闭我的应用程序并返回错误。

但我需要每 30 秒检查一次,我使用了 while 但我的主程序(此代码是我项目的一部分)停止工作,所以如果可能,请有人编辑我的代码,谢谢。

#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);
}
4

2 回答 2

0

你能解释一下为什么这种方法对你不起作用吗?下面的代码旨在每秒计算一个值。在 sleep 调用之前,让“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 一对进程。

编辑:

我添加了对“fork”的调用,因此您可以看到两个进程同时工作。注意:如果“checkMyProcess”函数需要了解“doOtherWork”函数中正在发生的内存,线程对您来说将是一个更容易的解决方案!

于 2013-06-06T18:39:25.530 回答
0

根据您使用的操作系统,您可以轮询系统时间并检查 30 秒是否已过期。这样做的方法是在循环开始时花费时间,在结束时花费时间并减去它们。然后从代码运行该例程所花费的时间中减去您想睡觉的时间。

此外,如果您不需要 EXACTLY 30 秒,您可以将 sleep(30) 添加到循环中。

于 2013-06-06T17:57:06.677 回答