WEB开发网
开发学院软件开发VC 如何获取某个进程的主窗口以及创建进程的程序名 阅读

如何获取某个进程的主窗口以及创建进程的程序名

 2010-08-22 20:47:15 来源:WEB开发网   
核心提示:这两个类的定义如下:(对应的文件是 EnumProc.h 和 EnumProc.cpp) 这个类主要是封装::EnumWindows,列举顶层窗口//class CWindowIterator {protected:HWND*m_hwnds;// 隶属于某个进程PID窗口句柄数组DWORD m_nAlloc;// 数组

这两个类的定义如下:(对应的文件是 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)。

图一

Tags:如何 获取 某个

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接