有人能说我用对了吗?
LPTSTR nameProc = "";
...
GetProcessImageFileName( hProcess, nameProc, 50 );
printf("name process : %s\n", nameProc);
我不习惯 win32 类型, GetProcessImageFileName 的第二个参数需要一个 LPTSTR typedef,第三个参数需要一个 DWORD 变量。 如果不是方法,也许我没有以正确的方式打印 nameProc 的值? (顺便打印一个空字符串)
提前致谢。
(请尽量避免带我去看一些win32 api文档,我无意去了解它,我只是想跟踪一个进程的使用内存,所以我不再处理win类型)
编辑(更新代码):
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;
}
最佳答案
nameProc
需要是一个可变缓冲区,因为它是一个输出参数,目前它可能会崩溃。改变这个:
LPTSTR nameProc = "";
为此:
TCHAR nameProc[MAX_PATH];
同时传递 MAX_PATH
,此时您正在传递 50。
关于c++ - GetProcessImageFileName 和 LPTSTR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9449270/