15,471
社区成员
发帖
与我相关
我的任务
分享
/******************************************************************************
* 演示枚举窗口和枚举进行模块
*
* 作者:高宏伟(DukeJoe)
* 时间:2008-08-23 21:17:13
* 地点:黑龙江省哈尔滨市
* QQ:21807822
* E-MAIL:dukejoe@163.com
* BLOG:http://blog.donews.com/dukejoe/
*
* 开发环境:Microsoft Visual Studio .NET 2008 SP1
* 操作系统:Microsoft Windows XP Home Edition SP2,
* Visual Studio .NET 2008 SDK 1.1
* Windows SDK 6.1
*****************************************************************************/
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include "psapi.h"
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) ;
void MyPrint( DWORD dwID )
{
TCHAR szProcessName[1024] ;
HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, dwID );
if (NULL != hProcess )
{
HMODULE hMod;
DWORD dwNeeded;
if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod),
&dwNeeded) )
{
GetModuleFileNameEx( hProcess, hMod, szProcessName, 1024);
}
}
_tprintf(_T("%s\n"), szProcessName) ;
CloseHandle( hProcess );
}
void main( )
{
// 由于我没有合适的HWND,所以我使用了枚举窗口,来得到一些HWND,以便用于演示
EnumWindows(EnumWindowsProc,0) ;
}
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
DWORD dwID ;
// 这里得到的HWND,就可以做为你问题的开始了
GetWindowThreadProcessId(hwnd, &dwID);
MyPrint(dwID) ;
return TRUE ;
}