如何获取某个进程的主窗口以及创建进程的程序名
2010-08-22 20:47:15 来源:WEB开发网这两个类的定义如下:(对应的文件是 EnumProc.h 和 EnumProc.cpp)
//////////////////////////////////////////////////////
// 这个类主要是封装::EnumWindows,列举顶层窗口
//
class CWindowIterator {
protected:
HWND* m_hwnds; // 隶属于某个进程PID窗口句柄数组
DWORD m_nAlloc; // 数组大小
DWORD m_count; // 找到的窗口句柄数
DWORD m_current; // 当前的窗口句柄
static BOOL CALLBACK EnumProc(HWND hwnd, LPARAM lp);
// 虚拟枚举函数
virtual BOOL OnEnumProc(HWND hwnd);
// 在派生中改写此函数来过滤不同种类的窗口
virtual BOOL OnWindow(HWND hwnd) {
return TRUE;
}
public:
CWindowIterator(DWORD nAlloc=1024);
~CWindowIterator();
DWORD GetCount() { return m_count; }
HWND First();
HWND Next() {
return m_hwnds && m_current <m_count ? m_hwnds[m_current++] : NULL;
}
};
////////////////////////////////////
// 列举某个进程的顶层窗口
//
class CMainWindowIterator : public CWindowIterator {
protected:
DWORD m_pid; // 进程ID
virtual BOOL OnWindow(HWND hwnd);
public:
CMainWindowIterator(DWORD pid, DWORD nAlloc=1024);
~CMainWindowIterator();
};
图一是用上述C++类编写的一个控制台程序lp.exe的输出画面。最后两栏分别是对应进程的“窗口句柄”和“类名/窗口标题”。其命令行开关“/ct”表示列出窗口类名(c)和窗口标题(t)。
图一
更多精彩
赞助商链接