已解决:看看我的最后一个帖子。这可能是 Windows XP 和以前版本的 GetProcessId 函数所需权限的问题。
没有构建错误。GetProcessId 仍然返回 0。我无法解决这个问题。
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <psapi.h> //For EnumProcessModules.
#include <tlhelp32.h>
#include <iostream>
using namespace std;
HANDLE GetHandleByName( string str )
{
HANDLE hProcess = NULL;
PROCESSENTRY32 entry;
entry.dwSize = sizeof( PROCESSENTRY32 );
HANDLE snapshot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, NULL );
if( Process32First( snapshot, &entry ) == TRUE )
{
while( Process32Next( snapshot, &entry ) == TRUE )
{
WCHAR* wchrstr = ( WCHAR * )malloc( 128 );
mbstowcs ( wchrstr, str.c_str(), 128 );
if( wcscmp( reinterpret_cast< const wchar_t * >( entry.szExeFile ), wchrstr ) == 0 )
{
hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, entry.th32ProcessID );
}
free( wchrstr );
}
}
CloseHandle( snapshot );
return hProcess;
}
void main()
{
HANDLE hProcess = GetHandleByName( "System" );
cout << GetProcessId( hProcess );
cin.get();
}