GetWindowModuleFileName()函数可以用来寻找whichnbsp EXE或DLL创建了一个窗口。但与此功能的问题是,它不会跨进程的工作。
每当我们创建了一个窗口,我们已经传递到一个HINSTANCE。后来,我们可以使用GetWindowLong,HINSTANCE。 HINSTANCE其实不过是HMODULE本身。因此,如果我们得到一个窗口的HINSTANCE,我们可以通过这个句柄GetModuleFileNameEx(),简单地从其他进程的窗口的名称以及。
| aveenCString MyGetWindowModuleFileName( HANDLE hwindowhandle )
{
CString csModuleName;
DWORD dwProcessId;
GetWindowThreadProcessId( hwindowhandle, &dwProcessId );
HINSTANCEhModule = (HINSTANCE)GetWindowLong( hwindowhandle, GWL_HINSTANCE );
if(hModule == NULL)
{
return csModuleName;
}
HANDLE hProcess = OpenProcess(PROCESS_VM_READPROCESS_QUERY_INFORMATION,
FALSE, dwProcessId );
if( hProcess == NULL )
{
return csModuleName;
}
BOOL bReturn = GetModuleFileNameEx( hProcess, hModule,
csModuleName.GetBuffer( MAX_PATH), MAX_PATH );
csModuleName.ReleaseBuffer();
CloseHandle(hProcess);
return csModuleName;
}