IamEasy_Man

Filled With Confidence , And Never Say Give Up !

【转载】进程,窗口,可执行文件名的相互获取

【转自】http://blog.donews.com/zwell/articles/37069.aspx 

下面是如何由进程得到窗口标题文字的例子:


typedef struct tagWNDINFO
{
DWORD dwProcId;
HWND hWnd;
} WNDINFO, *LPWNDINFO;

BOOL CALLBACK MyEnumProc(HWND hWnd,LPARAM lParam)
{
DWORD dwProcId;

GetWindowThreadProcessId(hWnd, &dwProcId);

LPWNDINFO pInfo = (LPWNDINFO)lParam;

if(dwProcId == pInfo->dwProcId)
{
pInfo->hWnd = hWnd;
return FALSE;
}

return TRUE;
}

HWND GetProcessMainWnd(DWORD dwProcId)
{
WNDINFO wi;

wi.dwProcId = dwProcId;
wi.hWnd = NULL;

EnumWindows(MyEnumProc,(LPARAM)&wi);

return wi.hWnd;


通过函数GetProcessMainWnd得到窗口的句柄后,就可以

调用GetWindowText(Hwnd)得到窗口标题了。

注:具体函数的调用参数请参考MSDN Library!

如何由窗口得到可执行文件名 :
下面是如何由窗口得到可执行文件名的例子:

void __fastcall GetExeByWnd(HWND hWnd)
{
HANDLE hProc;
char szProcessName [80];
HMODULE hMod;
DWORD dwProcId;

hMod = GetClassLong(hWnd,GCL_HMODULE);</P><P> GetWindowThreadProcessId(hWnd,&dwProcId);</P><P> hProc = OpenProcess (PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,
FALSE,
dwProcId);
if (hProc)
{
if (GetModuleBaseName (hProc, 
hMod, 
szProcessName, 
sizeof(szProcessName)))
{
//加入自己的处理程序
}
else
{
//加入自己的处理程序


CloseHandle (hProc);
}
}</P><P> GetModuleBaseName可以用GetModuleFileNameEx这个函数替换,

它可以查指定进程中任何模块的文件名,而且带有路径。

但这个函数在Win9X下有时候不行,这样的话,只有枚举进程来得到文件名及路径信息了。

注:具体函数的调用参数请参考MSDN Library!

如何由进程得到可执行文件名 :
下面是如何由进程得到可执行文件名的简单例子:

void __fastcall GetExeByProcId(DWORD dProcID)
{
HANDLE hProc;
char szProcessName [80];
HMODULE ahMod [10];
DWORD dwNeeded;

hProc = OpenProcess (PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,
FALSE,
dProcID);
if (hProc)
{
if (EnumProcessModules (hProc, 
ahMod, 
sizeof(ahMod), 
&dwNeeded))
{
if (GetModuleBaseName (hProc, 
ahMod[0], 
szProcessName, 
sizeof(szProcessName)))
{
//加入自己的处理程序
}
else
{
//加入自己的处理程序

}
CloseHandle (hProc);
}
}</P><P>
有关进程ID获取的API函数:
::GetCurrentProcessId() 得到当前运行程序的进程ID;

下面三个API函数可枚取系统中所有的进程ID:
::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0),
::Process32First(hSnapshot,&lpProc),
::Process32Next(hSnapshot,&lpProc)

注:具体函数的调用参数请参考MSDN Library!

posted on 2009-10-23 11:57  IamEasy_Man  阅读(659)  评论(0编辑  收藏  举报

导航