每x秒从.exe内的dll调用函数

Call function from dll inside .exe every x seconds

本文关键字:dll 调用 函数 内的 exe 秒从      更新时间:2023-10-16

我在c++中编写了一个.dll,它做了一些检查(如果窗口打开,如果运行等,杀死进程)。它的导出是一个功能。将该函数导入到。exe文件中。当我启动exe时,一切都很好!但我想问,是否有一种方法来循环dll的功能每x秒,所以它可以执行检查所有的时间?

提前感谢!

void killMe(const char *filename)
{
HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, NULL);
PROCESSENTRY32 pEntry;
pEntry.dwSize = sizeof (pEntry);
BOOL hRes = Process32First(hSnapShot, &pEntry);
while (hRes)
{
    if (strcmp(pEntry.szExeFile, filename) == 0)
    {
        HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, 0,
            (DWORD)pEntry.th32ProcessID);
        if (hProcess != NULL)
        {
            TerminateProcess(hProcess, 9);
            CloseHandle(hProcess);
        }
    }
    hRes = Process32Next(hSnapShot, &pEntry);
}
CloseHandle(hSnapShot);
}

extern "C" __declspec(dllexport)
void Chek(void) {
for (int x = 0; x < 1; x++){
    HWND Find = FindWindow(0, "NotePad");
    if (Find != 0){
        killMe("notepad.exe");
        Chek();
    }
}
}
BOOL APIENTRY DllMain(HMODULE hModule,
DWORD _reason,
LPVOID lpReserved
){
switch (_reason)
{
case DLL_PROCESS_ATTACH:
    Chek();

case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
    break;
}
return TRUE;
}

您可以使用计时器或在线程中执行。例如,你可以在DllLoad上创建一个线程,dll可以是这样的:

while( continueKilling )
{
    killMe( "test" );
    Sleep( 5000 ); // 5 seconds
}