使用System :: AnsiString类

Jav*_*492 1 c++ winapi

我正在尝试从以下答案中导入代码:获取完整的运行进程列表(Visual C ++)

bool FindRunningProcess(AnsiString process) {
/*
Function takes in a string value for the process it is looking for like ST3Monitor.exe
then loops through all of the processes that are currently running on windows.
If the process is found it is running, therefore the function returns true.
*/
AnsiString compare;
bool procRunning = false;

HANDLE hProcessSnap;
PROCESSENTRY32 pe32;
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

if (hProcessSnap == INVALID_HANDLE_VALUE) {
    procRunning = false;
} else {
    pe32.dwSize = sizeof(PROCESSENTRY32);
    if (Process32First(hProcessSnap, &pe32)) { // Gets first running process
        if (pe32.szExeFile == process) {
            procRunning = true;
        } else {
            // loop through all running processes looking for process
            while (Process32Next(hProcessSnap, &pe32)) { 
                // Set to an AnsiString instead of Char[] to make compare easier
                compare = pe32.szExeFile;
                if (compare == process) {
                    // if found process is running, set to true and break from loop
                    procRunning = true;
                    break;
                }
            }
        }
        // clean the snapshot object
        CloseHandle(hProcessSnap);
    }
}
Run Code Online (Sandbox Code Playgroud)

用Phil的回答,他正在使用System::AnsiString类,不确定我如何将其包含在我的项目中,即它是否与已安装的软件包分开,还是我需要下载并包含它?

这个问题的扩展:我可以使用其他替代品来实现与AnsiString相同的功能吗?

我对该代码的最终目标是对其进行修改,以便获得当前正在运行的进程的列表,并且我正在寻找一个特定的进程(如果正在运行)终止。我尝试使用ce::string,但由于pe32.szExeFile是type TCHAR [260],因此无法将其传递给以下ce::string声明ce::string process_name;(这可能是他使用的原因System::AnsiString)。

我假设pe32.szExeFile将要返回进程名称,所以我想将其与具有特定进程名称的另一个声明的字符串进行比较。

Lig*_*ica 5

好吧,所以根本不清楚AnsiString您假设这是Embarcadero System::AnsiString,坦率地说,这看起来像是一个合理的假设

不过,我不会尝试获取它。我将专注于编写标准代码,并切换到std::string/ std::wstring(视情况而定)。要使该作者的代码易于移植,应该几乎是平凡的。您必须四处浏览并阅读该代码中使用的功能的文档,以了解哪些有效,哪些无效。它看起来就像System::AnsiString是几乎或完全std::string兼容的,但你不会知道,直到你试试吧。

我不敢强调,不要走上踏入时光机并在1950年开放它的重要性,因为有一个充满指针的午餐盒和令人讨厌的C字符串比较功能。我真的不明白为什么有人会建议这样做。