返回首页


GetWindowModuleFileName()函数可以用来寻找whichnbsp EXE或DLL创建了一个窗口。但与此功能的问题是,它不会跨进程的工作。
每当我们创建了一个窗口,我们已经传递到一个HINSTANCE。后来,我们可以使用GetWindowLong,HINSTANCE。 HINSTANCE其实不过是HMODULE本身。因此,如果我们得到一个窗口的HINSTANCE,我们可以通过这个句柄GetModuleFileNameEx(),简单地从其他进程的窗口的名称以及。

CString 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;

}
| aveen

回答

评论会员:游客 时间:2012/01/24
你是男人!这正是我需要的是的。你救了我的研究时间,我的项目是如期。谢谢!imgsrc=http://www.orcode.com/img/ico/smiley_biggrin.gif知道什么不能做也很重要。最终,你将完全解决方案
。Pepsibot
评论会员:游客 时间:2012/01/24
等待,我回来。你可能救了我的研究日。imgsrc=http://www.orcode.com/img/ico/smiley_laugh.gif知道什么不能做也很重要。最终,你将完全解决方案
。Blkbam
评论会员:游客 时间:2012/01/24
这是C代码而不是C#
。only_jack
评论会员:游客 时间:2012/01/24
他说这是一个C#代码如果你在看文章的标题,你会看到(三)imgsrc=http://www.orcode.com/img/ico/smiley_laugh.gif这是一个C/MFC代码(因为包含CString的)