GetProcessImageFileName and LPTSTR
GetProcessImageFileName and LPTSTR
有人可以说我用对了吗?
LPTSTR nameProc = "";
...
GetProcessImageFileName( hProcess, nameProc, 50 );
printf("name process : %sn", nameProc);
我不习惯win32类型,GetProcessImageFileName的第二个参数需要LPTSTRtypedef,第三个参数使用DWORD变量。如果不是方法,也许我没有以正确的方式打印nameProc的值?(顺便打印一个空字符串)
提前谢谢。
(请尽量避免让我看到一些win32api文档,我无意了解它,我只需要跟踪一个进程的使用内存,因此我不再处理win类型)
EDIT(更新代码):
void printMemoryInfo( DWORD processID ) {
HANDLE hProcess;
TCHAR nameProc[MAX_PATH];
printf("nProcess ID: %un", processID);
hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID );
if (hProcess == NULL) return;
if (GetProcessImageFileName( hProcess, nameProc, sizeof(nameProc)/sizeof(*nameProc) )==0)
printf("errorn");
else printf("%sn", nameProc);
}
int main (void) {
DWORD aProcesses[1024], cbNeeded, cProcesses;
unsigned int i;
if (!EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded )) {
return 1;
}
cProcesses = cbNeeded/sizeof(DWORD);
for (i=0; i < cProcesses; i++) {
printMemoryInfo( aProcesses[i] );
}
return 0;
}
nameProc
需要是一个可变缓冲区,因为它是一个输出参数,目前它可能只是崩溃。更改此项:
LPTSTR nameProc = "";
到此:
TCHAR nameProc[MAX_PATH];
同时通过MAX_PATH
,此时您正通过50。
您可能不想了解Win32类型(和IMHO,这是一个很糟糕的主意,因为在Windows上编程通常API很有用),但即使不了解什么是LPTSTR
,MSDN文档也非常明确地介绍了第二个参数:
lpImageFileName[out]
nbsp nbsp nbsp nbsp;指向缓冲区的指针,该缓冲区接收可执行文件的完整路径。
很明显,你的nameProc
是不好的,因为你没有为它分配任何内存
TCHAR nameProc[MAX_PATH];
if(GetProcessImageFileName(hProcess, nameProc, sizeof(nameProc)/sizeof(*nameProc))==0)
{
// some error happened
}
相关文章:
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 为什么C++逐位AND运算符在不同大小的操作数中表现为这样
- 为什么 Clang 不允许"and"作为函数名称?
- 位阵列上的快速AND运算
- 是否可以在 C++03 中定义'move-and-swap idiom'等效项
- BoostPython and CMake
- OpenSSL BIO and SSL_read
- Gurobi GRBModel and GRBmodel in C++
- std::visit and std::variant usage
- SHBrowseForFolder with BIF_BROWSEFORCOMPUTER and SHGetPathFr
- Directx12 and keystrokes
- different between int **arr =new int [ n]; and int a[i][j]?
- C++ getenv and setenv
- Inference pytorch C++ with alexnet and cv::imread image
- Visual Studio 2019 C++ and std::filesystem
- 保证逻辑 AND 表达式中的函数调用
- python ctypes and C++ pointers
- C++ const char with .begin() and .end()
- Threads with Classes and std::packaged_task
- GetProcessImageFileName and LPTSTR