有人可以说我用得对吗?
LPTSTR nameProc = "";
...
GetProcessImageFileName( hProcess, nameProc, 50 );
printf("name process : %s\n", nameProc);我不使用win32类型,win32的第二个参数需要一个LPTSTR类型,第三个参数需要一个DWORD变量。如果不是这种方法,也许我没有以正确的方式打印nameProc的值?(顺便说一句,它打印一个空字符串)
提前谢谢。
(请尽量避免向我介绍一些win api文档,我无意了解它,我只需要跟踪一个进程的使用内存,因此我将不再处理win32类型)。
编辑(更新的代码):
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;
}发布于 2012-02-26 00:03:47
nameProc需要是一个可变的缓冲区,因为它是一个输出参数,目前它可能会崩溃。改变这一点:
LPTSTR nameProc = "";对此:
TCHAR nameProc[MAX_PATH];也通过MAX_PATH,在那里你现在超过50。
发布于 2012-02-26 00:03:57
您可能不想了解Win32类型(而且IMHO是个很糟糕的主意,因为在Windows上编程通常都是有用的),但是即使不了解LPTSTR是什么,MSDN文档对于第二个参数也是非常明确的:
lpImageFileName out
用于接收到可执行文件的全部路径的缓冲区的指针。
所以很明显,您的nameProc是不好的,因为您没有为它分配任何内存。你可能会想写:
TCHAR nameProc[MAX_PATH];
if(GetProcessImageFileName(hProcess, nameProc, sizeof(nameProc)/sizeof(*nameProc))==0)
{
// some error happened
}https://stackoverflow.com/questions/9449270
复制相似问题