【问题标题】:find a value from loop value and compare从循环值中找到一个值并进行比较
【发布时间】: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 是的,我意识到这一点。你能修好吗?所以我可以从中学习。谢谢
  • 每次有进程要检查时都会读取文件。为什么?将程序开始时的文件读入一个集合(你可以忽略大小写)。不仅仅是检查文件名是否在集合中......

标签: c++ winapi


【解决方案1】:

行:

if (line[i] == szProcessName)

只比较两个字符串的地址,当然是不同的。您想比较这些地址的内容。尝试改用wcsncmp()

if (wcsncmp(line[I], szProcessName, 44) == 0)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多