加载中…
个人资料
实分精选
实分精选
  • 博客等级:
  • 博客积分:0
  • 博客访问:1,182
  • 关注人气:15
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

7、API之EnumProcessModules

(2012-11-20 17:07:34)
标签:

例子

个数

实例

实际

句柄

分类: C/C++API常练手
API之EnumProcessModules
/////////////////////////////////////////////////////////////////////////////////////////////////
//我们继续演示枚举系列函数的功能

//////////////////////////////////////////////////////////////////////////////////////////////////
//vc++2005 win32 sdk 控制台下测试成功 创建一个支持MFC控制台程序
//////////////////////////////////////////////////////////////////////////////////////////////////

//====================================================================
//楚人外挂辅助工作室 QQ群:237084663 欢迎免费入群交流 

//陶项辉
//====================================================================
//MSDN:
//The EnumProcessModules function retrieves a handle for each module in the specified process.
//作者翻译:该函数枚举获取一个进程的所有模块(比如DLL,THREAD等等)。
//BOOL EnumProcessModules(
  HANDLE hProcess,要枚举的一个进程句柄

//HMODULE* lphModule,该进程所包含的模块句柄的数组,我们可以定义一个数组来接受该进程所含有的//模块句柄
//DWORD
cb, 你估计这个进程大概有多少个模块的数量,以字节BYTE来计数
//LPDWORD
lpcbNeeded );该进程实际的模块的数量,以字节来计数

//Parameters

//hProcess
//[in] Handle to the process.
//lphModule
//[out] Pointer to the array that receives the list of module handles.
//cb
//[in] Size of the lphModule array, in bytes.
//lpcbNeeded
//[out] Number of bytes required to store all module handles in the lphModule array.
////////////////////////////////////////////////////////////////////////////////////////////////

// EnumProcessModules.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "EnumProcessModules.h"
#include "Psapi.h"
#include "tchar.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

#pragma comment(lib,"Psapi.lib")
// 唯一的应用程序对象

CWinApp theApp;

using namespace std;
//BOOL EnumProcessModules(
//                        HANDLE hProcess,
//                        HMODULE* lphModule,
//                        DWORD cb,
//                        LPDWORD lpcbNeeded
//                        );
//我们还是以“计算器”这个实例来枚举该进程的所有用到的模块的句柄,并打印出来
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    HMODULE nHmodule[1024]={NULL};
    DWORD cbNeeded=0;
    HWND hwnd=::FindWindow(NULL,__T("计算器"));//以计算机为例子,枚举它的模块句柄
    DWORD idProcess=0;
    ::GetWindowThreadProcessId(hwnd,&idProcess);//获取计算器进程ID
    HANDLE hCalc=::OpenProcess(PROCESS_ALL_ACCESS,NULL,idProcess);//获取进程的句柄
    if (!hCalc)
    {
        CloseHandle(hwnd);
        ::MessageBoxW(NULL,__T("很遗憾,你没有运行计算器"),__T("EnumProcessModules"),MB_OK);
    }
    else
    {
        BOOL bRetn= ::EnumProcessModules(hCalc,nHmodule,sizeof(nHmodule),&cbNeeded);
        if (!bRetn)
        {
            CloseHandle(hCalc);
            ::MessageBoxW(NULL,__T("很遗憾,获取模块句柄失败"),__T("EnumProcessModules"),MB_OK);
           
        }
        else
        {
            for (int i=0;i<(cbNeeded/sizeof(HMODULE));i++)
            {
                cerr<<nHmodule[i]<<endl;
                cerr<<__T("**********************")<<endl;
                cerr<<i<<endl;
                cerr<<__T("======================")<<endl;

            }
        }
       
    }
    getchar();
    return 0;
}
//////////////////////////////////////////////////////////////////////////////////////////

运行截图:http://s12/mw690/906bb6a9nceea9acca0bb&690






 
对你是否有用最多可选1项
发起时间:2012-11-21 00:00    截止时间:2013-01-21 00:00    投票人数:0人
  • 0(0%)
  • 0(0%)
  • 0(0%)
  • 0(0%)
  • 0(0%)
投票已截止
最后投票

    0

    阅读 收藏 喜欢 打印举报/Report
      

    新浪BLOG意见反馈留言板 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

    新浪公司 版权所有