c++ - GetProcessImageFileName 和 LPTSTR

标签 c++ winapi visual-c++

有人能说我用对了吗?

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/

相关文章:

c++ - Winapi GetOpenFileName 扩展过滤器不工作

c++ - 如何自动更新 HWND 的样式和位置?

c++ - 如何检测USRP USB类型?

c++ - 非常量指针类型的参数不调用带有常量指针模板类型参数的函数

c++ - OpenCL 计数器变量

c - winapi c - 读/写系统驱动器的 mbr

visual-c++ - C++/CLI 包含问题

c++ - 将 C++ 模板函数定义存储在 .CPP 文件中

c++ - 我怎样才能使用我的CPU的MM0到MM7寄存器?