枚举桌面窗口并获取进程信息

原创 2015年11月17日 17:00:13
#include <Windows.h>
#include <Psapi.h>
#include <iostream>

#pragma comment(lib, "psapi.lib")
using namespace std;

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
	if (GetParent(hwnd) == NULL && IsWindowVisible(hwnd))
	{
		char WindowText[100] = {0};
		::GetWindowTextA(hwnd, WindowText, 100);
		if (strlen(WindowText) != 0)
		{
			std::cout << WindowText <<std::endl;
			char szClassName[100] = {0};
			::GetClassNameA(hwnd, szClassName, 100);
			cout<< szClassName <<endl;
			DWORD dwPID = 0;
			GetWindowThreadProcessId(hwnd, &dwPID);
			cout<< "PID: "<<dwPID <<endl;
			HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID);
			cout<< "PHandle: "<<hProcess<< endl;

			HMODULE hMod = NULL;
			DWORD dwcbNeeded = 0;
			if (EnumProcessModules(hProcess, &hMod, sizeof(hMod), &dwcbNeeded))
			{
				char szPath[MAX_PATH] = {0};
				GetModuleFileNameA(hMod, szPath, MAX_PATH);
				cout<< szPath << endl;
				GetModuleFileNameExA(hProcess, hMod, szPath, MAX_PATH);
				cout<< szPath<<std::endl <<endl;;
			}
			CloseHandle(hProcess);
		}
	}
	return TRUE;
}
int _tmain(int argc, _TCHAR* argv[])
{
	EnumWindows(EnumWindowsProc, 0);

	system("pause");
	return 0;
}



另外上面的代码中在获取进程模块路径时用到的GetModuleFileNameA和GetModuleFileNameExA两个API获取路径不同, 第一个只能获取本进程的模块路径,包括主路径和dll路径(比如 kernel32.dll)。 

第二个可以获取用OpenProcess打开的进程句柄的路径。

版权声明:本文为博主原创文章,未经博主允许不得转载。

枚举窗口及其应用

枚举窗口及其应用示例代码下载:枚举窗口及其应用(请不要直接使用迅雷下载)1.下面请看几种枚举窗口的方式一:利用GetWindow(ParentWnd, GW_CHILD);void FindAllCh...
  • jacky_qiu
  • jacky_qiu
  • 2010年11月04日 21:58
  • 3471

C# Windows API应用之GetDesktopWindow ——获得桌面所有窗口句柄的方法

Windows APIWindows 这个多作业系统除了协调应用程序的执行、分配内存、管理资源…之外, 它同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务就是一个函数),可以帮应用程...
  • testcs_dn
  • testcs_dn
  • 2015年04月19日 14:29
  • 18082

VC Windows API应用之GetDesktopWindow ——获得桌面所有窗口句柄的方法

Windows APIWindows 这个多作业系统除了协调应用程序的执行、分配内存、管理资源…之外, 它同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务就是一个函数),可以帮应用程...
  • testcs_dn
  • testcs_dn
  • 2015年04月19日 14:49
  • 15557

C#应用WindowsApi实现查找\枚举(FindWindow、EnumChildWindows)窗体控件,并发送消息。

转载:http://www.cnblogs.com/hehexiaoxia/p/4223927.html 首先介绍基本WindowsApi: public static exter...
  • beyonddeg
  • beyonddeg
  • 2016年10月22日 05:15
  • 2120

EnumWindows-枚举桌面窗口

  • 2017年02月07日 16:55
  • 175KB
  • 下载

如何枚举桌面所有顶层窗口

  • 2013年08月04日 12:05
  • 13KB
  • 下载

VC++ 枚举进程模块信息

  • 2012年09月14日 17:13
  • 46KB
  • 下载

枚举进程加获取qq号

  • 2017年05月22日 19:23
  • 28KB
  • 下载

枚举进程信息

1.PSAPI法 #include #include #include #include "psapi.h" #pragma comment ( lib, "psapi.lib" ) i...
  • evi10r
  • evi10r
  • 2011年09月02日 10:58
  • 2522

Win32使用Psapi库枚举系统进程信息

一、枚举当前的所有进程(64位的程序暂时不会处理)     通过EnumProcesses得到当前所有的进程的进程ID,然后调用OpenProcess通过进程ID得到进程句柄,再调用EnumPr...
  • Kevin_Samuel
  • Kevin_Samuel
  • 2014年06月08日 18:03
  • 1901
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:枚举桌面窗口并获取进程信息
举报原因:
原因补充:

(最多只允许输入30个字)