首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 关于GetModuleFileName第一个参数使用的问题 [已结贴,结贴人:zhichizhongguo]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zhichizhongguo
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2008-08-19 11:51:03 楼主
    已得到一个进程名,如svchost.exe或emule.exe之类,如何设置GetModuleFileName第一个参数HMODULE,(除了NULL外不能设置其它?)从而得到对应的可执行文件路径呢?
    谢谢各位了!
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • qifa
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-19 12:20:521楼 得分:0
    第一个参数可以用HMODULE GetModuleHandle(LPCTSTR lpModuleName);的返回值,lpModuleName指向模块的名称 exe 或 dll
    像你说的问题, 可以用 Tool Help Functions来解决
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zhichizhongguo
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-19 13:54:432楼 得分:0
    最好能给个例子。谢谢!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zhichizhongguo
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 01:10:273楼 得分:0
    没人帮我吗?
    我自已顶。。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • princewwj
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 08:54:094楼 得分:0
    AfxGetInstanceHandle()
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • unsigned
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 3

      2

      5

    发表于:2008-08-20 08:56:355楼 得分:0
    使用GetModuleFileNameEx
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • unsigned
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 3

      2

      5

    发表于:2008-08-20 08:57:226楼 得分:5
    MSDN的Example
    C/C++ code
    #include <windows.h> #include <tchar.h> #include <stdio.h> #include <psapi.h> void PrintModules( DWORD processID ) { HMODULE hMods[1024]; HANDLE hProcess; DWORD cbNeeded; unsigned int i; // Print the process identifier. printf( "\nProcess ID: %u\n", processID ); // Get a list of all the modules in this process. hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID ); if (NULL == hProcess) return; if( EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded)) { for ( i = 0; i < (cbNeeded / sizeof(HMODULE)); i++ ) { TCHAR szModName[MAX_PATH]; // Get the full path to the module's file. if ( GetModuleFileNameEx(hProcess, hMods[i], szModName, sizeof(szModName)/sizeof(TCHAR))) { // Print the module name and handle value. _tprintf(TEXT("\t%s (0x%08X)\n"), szModName, hMods[i]); } } } CloseHandle( hProcess ); } void main( ) { // Get the list of process identifiers. DWORD aProcesses[1024], cbNeeded, cProcesses; unsigned int i; if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) ) return; // Calculate how many process identifiers were returned. cProcesses = cbNeeded / sizeof(DWORD); // Print the name of the modules for each process. for ( i = 0; i < cProcesses; i++ ) PrintModules( aProcesses[i] ); }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • maomaoxiong
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 10:39:367楼 得分:5
    GetModuleHandle 或者 LoadLibrary获得HMODULE句柄,而后调用GetModuleFileName
    C/C++ code
    HMODULE hModule = ::LoadLibrary("C:\\WINDOWS\\system32\\svchost.exe"); if(hModule == NULL) { printf("hModule is NULL!\n"); } else { TCHAR filename[MAX_PATH]; if(::GetModuleFileName(hModule, filename, MAX_PATH)) { printf("%s\n", filename); } } ::FreeLibrary(hModule);
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • idAnts
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 14:45:258楼 得分:5
    那个其实是模块加载的基址,就是WinMain或者DllMain函数里第一个参数。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zhichizhongguo
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 15:00:169楼 得分:0
    不好意思,大家可能误解我了。我想得到的是.exe文件的路径,而不是其模块(.dll)的文件路径,如进程名为QQ.exe,最终得到启动路径C:\ProgramFiles\Tecent\QQ\QQ.exe是这样的。。。又如svchost.exe,-》C:\Windows\system32\svchost.exe之类。。。。。
    请高手支招。谢谢了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • unsigned
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 3

      2

      5

    发表于:2008-08-20 15:59:3810楼 得分:5
    GetModuleFileNameEx(进程,0,...);
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved