当前位置:  开发笔记 > 编程语言 > 正文

QueryFullProcessImageName失败并带有有效的HINSTANCE?

如何解决《QueryFullProcessImageName失败并带有有效的HINSTANCE?》经验,为你挑选了1个好方法。

主要问题:

对于函数:QueryFullProcessImageName,第一个参数不是HINSTANCE,它是进程句柄.它们是不同的.要获取当前进程ID,您应该使用GetCurrentProcessId.然后将其传递给OpenProcess以获取进程句柄.


其他问题:

你应该用GetWindowLongPtr上面,而不是GetWindowLong.使用GetWindowLong可能会在x64系统上引起问题.


如何找出自己的问题:

在大多数Win32函数失败后,您可以通过使用GetLastError找出原因.

所以在调用QueryFullProcessImageName之后,请执行以下操作:

DWORD dwLastError = GetLastError();
LPVOID lpMsgBuf;
std::string strErrorMessage;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwLastError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf,    0, NULL);
if (lpMsgBuf)
{
    strErrorMessage = (const TCHAR*)lpMsgBuf;
    LocalFree(lpMsgBuf);
}

您也可以简单地调用GetLastError()并在此处查找其返回值.



1> Brian R. Bon..:

主要问题:

对于函数:QueryFullProcessImageName,第一个参数不是HINSTANCE,它是进程句柄.它们是不同的.要获取当前进程ID,您应该使用GetCurrentProcessId.然后将其传递给OpenProcess以获取进程句柄.


其他问题:

你应该用GetWindowLongPtr上面,而不是GetWindowLong.使用GetWindowLong可能会在x64系统上引起问题.


如何找出自己的问题:

在大多数Win32函数失败后,您可以通过使用GetLastError找出原因.

所以在调用QueryFullProcessImageName之后,请执行以下操作:

DWORD dwLastError = GetLastError();
LPVOID lpMsgBuf;
std::string strErrorMessage;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwLastError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf,    0, NULL);
if (lpMsgBuf)
{
    strErrorMessage = (const TCHAR*)lpMsgBuf;
    LocalFree(lpMsgBuf);
}

您也可以简单地调用GetLastError()并在此处查找其返回值.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有