如果我使用它,有人可以说吗?
LPTSTR nameProc = "";
...
GetProcessImageFileName( hProcess, nameProc, 50 );
printf("name process : %s\n", nameProc);
我没有使用win32类型, GetProcessImageFileName 的第二个参数需要 LPTSTR typedef,第三个参数需要 DWORD 变量。 如果不是方法,我可能不是正确的方式打印 nameProc 的值? (顺便说一下,它会打印一个空字符串)
提前感谢。
(请尽量避免向我引导一些win32 api文档,我无意了解它,我只需要跟踪一个进程的使用记忆,因此我将不再处理win类型)< / p>
编辑(更新代码):
void printMemoryInfo( DWORD processID ) {
HANDLE hProcess;
TCHAR nameProc[MAX_PATH];
printf("\nProcess ID: %u\n", 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("error\n");
else printf("%s\n", 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;
}
答案 0 :(得分:4)
nameProc
需要是一个可变缓冲区,因为它是一个输出参数,目前它可能只是崩溃。改变这个:
LPTSTR nameProc = "";
到此:
TCHAR nameProc[MAX_PATH];
此时通过MAX_PATH
传递50。
答案 1 :(得分:4)
你可能不想了解Win32类型(和恕我直言,这是一个非常糟糕的主意,因为在Windows上编程通常API很有用),但即使不了解LPTSTR
是什么,MSDN文档也是如此显式关于第二个参数:
lpImageFileName [out]
指向缓冲区的指针,该缓冲区接收可执行文件的完整路径。
所以很明显你的nameProc
不行,因为你没有为它分配任何内存。你可能想写:
TCHAR nameProc[MAX_PATH];
if(GetProcessImageFileName(hProcess, nameProc, sizeof(nameProc)/sizeof(*nameProc))==0)
{
// some error happened
}