如何通过进程id枚举到所有的窗口

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过进程id枚举到所有的窗口相关的知识,希望对你有一定的参考价值。

参考技术A /********************************************************************
created: 2010/03/09
created: 9:3:2010 10:03
file base: CWindowIterator
file ext: h
author: zhangwf

purpose: 封装枚举窗口类
*********************************************************************/
#ifndef _CWINDOW_ITERATOR_ZWF_H_
#define _CWINDOW_ITERATOR_ZWF_H_
//////////////////////////////////////////////////////////////////////////
#include <vector>
using namespace std;
//////////////////////////////////////////////////////////////////////////
class CWindowIterator

public:
// 构造析构函数
CWindowIterator();
~CWindowIterator();

public:
// 接口函数
void EnumWnds(); // 枚举窗口
unsigned long GetWndCounts(); // 获得窗口总数
HWND First(); // 获得第一个窗口句柄
HWND Next(); // 获得下一个窗口句柄
HWND GetHWnd(unsigned long wndIndex); // 根据索引获得窗口句柄

protected:
vector<HWND> m_hWndArray; // 存放枚举得到的窗口句柄
unsigned long m_nCurrentWndIndex; // 当前窗口句柄

// 枚举窗口回调函数
static BOOL CALLBACK EnumWndProc(HWND hwnd, LPARAM lp);

// virtual enumerator
virtual BOOL AddWnd(HWND hwnd);

// override to filter different kinds of windows
virtual BOOL IsTargetWnd(HWND hwnd) return TRUE;

;
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// 派生出主窗口类(只获取进程的主窗口)
class CMainHWnd : public CWindowIterator

public:
// 构造析构函数
CMainHWnd();
CMainHWnd(unsigned long pid);
~CMainHWnd();

public:
// 接口函数
void EnumWndsByPid(DWORD pid);

protected:
DWORD m_pid;
virtual BOOL IsTargetWnd(HWND hwnd);

;
//////////////////////////////////////////////////////////////////////////
#endif

如何在脚本中获取进程ID

用法:开个cmd.exe窗口,输入:ntsd -c q -p PID
把最后那个PID,改成你要终止的进程的ID。如果你不知道进程的ID,任务管理器->进程选项卡->查看->选择列->勾上"PID(进程标识符)",然后就能看见了。
答2:xp下还有两个好东东tasklist和tskill。tasklist能列出所有的进程,和相应的信息。tskill能查杀进程,语法很简单:tskill 程序名!!

比如杀死进程 QQ

taskkill /f /fi "IMAGENAME eq QQ.exe"

1、用taskill命令
①taskkill /im
进程名称
示例:用taskkill /im
VStart.exe命令关闭音速启动,VStart.exe就是音速启动的进程名称,下面看操作,执行了三次,成功关闭了音速启动,再看下面的方法.
②taskkill /pid[进程码]
-t(结束该进程)
-f(强制结束该进程以及所有子进程)
注:有两种方法查进程的PID码:
①在命令行下用 tasklist 命令查出进程的PID号码,就是这些
参考技术A Theron Welch和Stefan Krueger写过一个ShutDownRunningApp的接口,你可以改造一下再应用。至于链接吗,百度知道一般审核是不过的,你也知道的。

以上是关于如何通过进程id枚举到所有的窗口的主要内容,如果未能解决你的问题,请参考以下文章

VC怎么通过进程ID得到窗口句柄

vb如何获取到窗口的句柄

C# 根据进程ID获取进程主窗口句柄

C# 根据进程ID获取进程主窗口句柄

通过Xlib枚举指定进程下所有窗体

API怎么获取外部进程的起始内存地址