Основная проблема:
Для функции: QueryFullProcessImageName , первый параметр не HINSTANCE, это дескриптор процесса. Они разные. Чтобы получить текущий идентификатор процесса, вы должны использовать 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 () и найти здесь его возвращаемое значение .