微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将给定的进程名称与从快照中找到的进程名称进行比较?

如何解决如何将给定的进程名称与从快照中找到的进程名称进行比较?

if ((WCHAR*)procName == procEntry32.szExeFile)

这就是我所拥有的,我被告知要使用“strcmp”,但它似乎从未奏效。有人可以解释为什么吗?或者给我另一个解决方案?

bool attachProc(char* procName)
{
    PROCESSENTRY32 procEntry32;
    //_bstr_t procEntry32Char(procEntry32);

    // defining the size for populating it
    procEntry32.dwSize = sizeof(PROCESSENTRY32);

    //getting the list of all the processes 
    auto hProcSnap = Createtoolhelp32Snapshot(TH32CS_SNAPPROCESS,NULL);

    std::cout << procEntry32.szExeFile;

    if (hProcSnap == INVALID_HANDLE_VALUE)
    {
        std::cout << "Failed To Take Snapshot Of Processes!" << std::endl;
        return false;
    }

    Process32First(hProcSnap,&procEntry32);

    while (Process32Next(hProcSnap,&procEntry32))
    {

        std::wcout << "Proc: " << procEntry32.szExeFile << std::endl;

        int correct = (procEntry32.szExeFile == (WCHAR*)procName);

        if (correct == 1)
        {
            //std::cout << "\nThe Program Was Found!\n";
        }
        else {
            //std::cout << "\nThe Program Was Not Found!\n";
        }

        std::cout << ((WCHAR*)procName == procEntry32.szExeFile);
        std::cout << "\nBoth:\n" << (WCHAR*)procName << "\n" << procEntry32.szExeFile << "\n\n";
        if ((WCHAR*)procName == procEntry32.szExeFile)
        {
            std::cout << "Found Process " << procEntry32.szExeFile << " with process ID: " << procEntry32.th32ProcessID << std::endl;

            hProc = OpenProcess(PROCESS_ALL_ACCESS,FALSE,procEntry32.th32ProcessID);

            pID = procEntry32.th32ProcessID;

            if (hProc == NULL)
            {
                std::cout << "Failed getting handle to process." << std::endl;
            }

            CloseHandle(hProcSnap);

            return true;
        }

    }

    std::cout << procEntry32.szExeFile;

    std::cout << "Couldn't find " << procName << " in the process snapshot!" << std::endl;
    CloseHandle(hProcSnap);

    return false;
}

这是其余的功能,我是初学者,对于不好的做法很抱歉!

解决方法

您似乎在使用 Win32 API 函数的宽字符串 Unicode 版本(否则,您为什么将 procName 强制转换为 WCHAR*?),但您的 procName 是一个窄字符串ANSI 字符串。因此,您需要:

  1. 更改您的代码以使用窄字符串 ANSI API 函数,然后您可以使用 strcmp() 进行比较。

  2. 将您的 procName 参数更改为 (const) wchar_t* 而不是 char*,然后您可以使用 wcscmp()(或等效的)进行比较。

  3. 与#2 相同,除非您无法在编译时更改 procName 的类型,然后在运行时使用 { 将 procName 转换为 wchar_t* {1}}(或等价物)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。