主要问题:
对于函数: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()并在此处查找其返回值.
主要问题:
对于函数: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()并在此处查找其返回值.