使用 System::AnsiString class
Using System::AnsiString class
我正在尝试从以下答案中导入代码: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
class,我不确定如何将它包含在我的项目中,即它是安装包的一部分还是我需要下载和包括它?
这个问题的扩展:我可以使用另一种替代品来实现与 AnsiString 相同的功能吗?
我对这段代码的最终目标是修改它,以便我可以获得 运行 个进程的当前列表,并且我正在寻找一个特定的进程来终止,如果它是 运行。我尝试使用 ce::string
,但由于 pe32.szExeFile
是类型 TCHAR [260]
,我无法将它传递给以下 ce::string process_name;
的 ce::string
声明(这是可能他为什么使用 System::AnsiString
).
我假设 pe32.szExeFile
将 return 进程名称,所以我想将它与另一个声明的具有特定进程名称的字符串进行比较。
好吧,所以,根本不清楚AnsiString
是什么; 您假设它是 the Embarcadero System::AnsiString
class,坦率地说,这看起来是一个合理的假设。
不过,我不会去尝试获得它。 我会专注于编写标准代码,切换到 std::string
/std::wstring
(视情况而定)。 将作者的代码改编为可移植的应该是近乎微不足道的.您将不得不尝试并阅读该代码中使用的函数的文档,以查看哪些有效,哪些无效。它 看起来 与 System::AnsiString
几乎或完全 std::string
兼容,但您只有尝试才能知道。
我怎么强调都不为过,你不要走上你的时光机并在 1950 年打开它的道路,带着一个装满午餐的午餐盒指针和非常过时的 C 字符串比较函数。我真的不明白为什么有人会建议这样做。
我正在尝试从以下答案中导入代码: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
class,我不确定如何将它包含在我的项目中,即它是安装包的一部分还是我需要下载和包括它?
这个问题的扩展:我可以使用另一种替代品来实现与 AnsiString 相同的功能吗?
我对这段代码的最终目标是修改它,以便我可以获得 运行 个进程的当前列表,并且我正在寻找一个特定的进程来终止,如果它是 运行。我尝试使用 ce::string
,但由于 pe32.szExeFile
是类型 TCHAR [260]
,我无法将它传递给以下 ce::string process_name;
的 ce::string
声明(这是可能他为什么使用 System::AnsiString
).
我假设 pe32.szExeFile
将 return 进程名称,所以我想将它与另一个声明的具有特定进程名称的字符串进行比较。
好吧,所以,根本不清楚AnsiString
是什么; 您假设它是 the Embarcadero System::AnsiString
class,坦率地说,这看起来是一个合理的假设。
不过,我不会去尝试获得它。 我会专注于编写标准代码,切换到 std::string
/std::wstring
(视情况而定)。 将作者的代码改编为可移植的应该是近乎微不足道的.您将不得不尝试并阅读该代码中使用的函数的文档,以查看哪些有效,哪些无效。它 看起来 与 System::AnsiString
几乎或完全 std::string
兼容,但您只有尝试才能知道。
我怎么强调都不为过,你不要走上你的时光机并在 1950 年打开它的道路,带着一个装满午餐的午餐盒指针和非常过时的 C 字符串比较函数。我真的不明白为什么有人会建议这样做。