【发布时间】:2017-11-30 06:50:07
【问题描述】:
我在名为b.txt 的文本文件中有一个可执行名称列表,例如:
notepad.exe, chrome.exe
我需要将它们与当前进程名称进行比较,如果应用程序匹配,则执行一些操作:
DWORD aProcesses[1024], cbNeeded, cProcesses;
unsigned int i;
EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded);
cProcesses = cbNeeded / sizeof(DWORD);
for (i = 0; i < cProcesses; i++)
{
if (aProcesses[i] != 0)
{
DWORD processID = aProcesses[i];
wchar_t szProcessName[MAX_PATH] = TEXT("<unknown>");
HMODULE hMod;
DWORD cbNeeded;
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, processID);
if (EnumProcessModules(hProcess, &hMod, sizeof(hMod),
&cbNeeded))
{
GetModuleBaseName(hProcess, hMod, szProcessName,
sizeof(szProcessName) / sizeof(TCHAR));
_wcslwr_s(szProcessName, wcslen(szProcessName) + 1);
FILE *pFile;
wchar_t *file = L"c:\\b.txt";
wchar_t line[100][44];
unsigned int i = 0;
if (_wfopen_s(&pFile, file, L"r, ccs = UNICODE") == 0)
{
while (fgetws(line[i], 100, pFile))
{
i++;
}
}
if (line[i] == szProcessName)
{
cout << szProcessName + "It's Found";
}
}
}
}
我不知道为什么这段代码不起作用。如果我通过std::wcout 测试每个它输出正确,但比较总是失败。
【问题讨论】:
-
你的代码有很多问题,但基本上你的测试是在错误的地方;它需要在 while 循环内。
-
@JonathanPotter 是的,我意识到这一点。你能修好吗?所以我可以从中学习。谢谢
-
每次有进程要检查时都会读取文件。为什么?将程序开始时的文件读入一个集合(你可以忽略大小写)。不仅仅是检查文件名是否在集合中......