我正在尝试从以下答案中导入代码:Get full running process list ( 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);
}
}
在Phil的回答中,他使用的是
System::AnsiString
类,不确定我如何将其包含在我的项目中,即它是否与已安装的软件包分开,还是我需要下载并包含它?这个问题的扩展:我可以使用其他替代品来实现与AnsiString相同的功能吗?
我对该代码的最终目标是对其进行修改,以便我可以获取正在运行的进程的当前列表,并且我正在寻找一个特定的进程(如果正在运行)终止。我尝试使用
ce::string
,但是由于pe32.szExeFile
是TCHAR [260]
类型,因此我无法将其传递给以下ce::string
的ce::string process_name;
声明(这可能是他使用System::AnsiString
的原因)。我假设
pe32.szExeFile
将返回进程名称,所以我想将其与具有特定进程名称的另一个声明的字符串进行比较。 最佳答案
好的,所以,根本不清楚AnsiString
是什么。 ,您假设它是the Embarcadero System::AnsiString
class,坦率地说,这看起来像是一个合理的假设。
不过,我不会尝试获取它。 我将专注于编写标准代码,并根据需要切换到std::string
/ std::wstring
。 要使该作者的代码易于移植,应该几乎是平凡的。您必须四处浏览并阅读该代码中使用的功能的文档,以了解哪些有效,哪些无效。看来System::AnsiString
与std::string
几乎或完全兼容,但是直到尝试它,您才知道。
我不能太强调您不要走入您的时间机器并在1950年开启它的路上有多么重要,它带有一个充满指针的便当盒和非常陈旧的C字符串比较功能。我真的不明白为什么有人会建议这样做。
关于c++ - 使用System::AnsiString类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30604485/