在Windows Mobile和Wince(Windows Embedded CE)下进行Win32开发,取出窗口句柄的方法

简介:

在上一篇文章讲述了取进程信息的方法,链接如下:

在Windows Mobile和Wince(Windows Embedded CE)下进行Win32开发,取出当前所有运行中进程信息的方法

本文讲述取出进程对应窗口句柄的方法。

 

程序是在上一篇文章的例子上进行修改的。

核心代码如下:

ProcessWndsInfo procInfo;
procInfo.processId = it->th32ProcessID;
if (EnumWindows(EnumWindowsProc, (LPARAM)&procInfo) == FALSE)
{
wprintf(TEXT("EnumWindowsProc Failed. Error: %d\n"),
GetLastError());
continue;
}

通过调用EnumWindows()来取出进程下所有窗口信息。EnumWindows()函数的第一个参数是 回调函数的指针,代码如下:

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
ProcessWndsInfo* procInfo = (ProcessWndsInfo*)lParam;
DWORD ProcessId;

GetWindowThreadProcessId ( hwnd, &ProcessId );

if (procInfo != NULL && ProcessId == procInfo->processId)
{
procInfo->windowsHandles.push_back(hwnd);
}

// Keep enumerating
return true;
}

由于EnumWindows()函数轮询所有窗口,每个窗口都会会回调EnumWindowsProc()一次。所以需要判断这个窗口所属进程号。如果属于该进程,就当到list里面。

ProcessWndsInfo的定义如下:

struct ProcessWndsInfo
{
DWORD processId;
std::list<HWND> windowsHandles;
};

包含的进程ID和进程下所有窗口的句柄的list。

 

下面是显示窗口句柄信息的代码。

// Output information for each running process
for( std::list<PROCESSENTRY32>::iterator it=processes.begin();
it!=processes.end(); ++it)
{
wprintf(TEXT("%-*s %8X %13d %9d %9X %10X\n"),
maxProcessNameLength,
it->szExeFile,
it->th32ProcessID,
it->pcPriClassBase,
it->cntThreads,
it->th32MemoryBase,
it->th32AccessKey
);

ProcessWndsInfo procInfo;
procInfo.processId = it->th32ProcessID;
if (EnumWindows(EnumWindowsProc, (LPARAM)&procInfo) == FALSE)
{
wprintf(TEXT("EnumWindowsProc Failed. Error: %d\n"),
GetLastError());
continue;
}

//Output a header to describe the HWnd
wprintf(TEXT("\tHWnd\t\tWindows Title\n"));

WCHAR title[255];
for( std::list<HWND>::iterator itHWnd=procInfo.windowsHandles.begin();
itHWnd!=procInfo.windowsHandles.end(); ++itHWnd)
{
//Get title of the window
GetWindowText(*itHWnd, title, 255);
wprintf(TEXT("\t%10X\t%s\n"), *itHWnd, title);
}
}

为了显示更详细的信息,我把窗口名称一同显示了。效果如下:

Windows-Embedded-CE-HWnd-3

 

源代码:http://files.cnblogs.com/procoder/GetHWnd-without-project-file.rar

由于我在wince下进行开发的,不是通用平台,我把项目文件删掉了,上传源代码,只用于参考。




    本文转自Jake Lin博客园博客,原文链接:http://www.cnblogs.com/procoder/archive/2009/11/19/Windows-Mobile-Native-HWnd.html,如需转载请自行联系原作者


相关文章
|
Ubuntu Linux Python
如何利用wsl-Ubuntu里conda用来给Windows的PyCharm开发
如何在WSL(Windows Subsystem for Linux)的Ubuntu环境中使用conda虚拟环境来为Windows上的PyCharm开发设置Python解释器。
2933 1
|
存储 安全 程序员
Windows任务管理器开发原理与实现
Windows任务管理器开发原理与实现
|
监控 关系型数据库 MySQL
PowerShell 脚本编写 :自动化Windows 开发工作流程
PowerShell 脚本编写 :自动化Windows 开发工作流程
869 0
|
安全 芯片 SoC
Windows CE嵌入式导航系统研究( 嵌入式系统的概述)
1.1 嵌入式系统的概述 1.1.1 嵌入式系统的定义与组成 嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁减,适用于应用系统,对功能、可靠性、成本、体积和功耗等方面有特殊要求的专用的计算机系统。
1432 0
|
Java 开发工具 C++
Windows CE嵌入式导航系统研究(软件平台的选择)
1.1.1 软件平台的选择 1. 操作系统的选择 尽管嵌入式系统有着无比广阔的市场需求和发展前景,但嵌入式系统的发展多年来却经历了一个曲折和痛苦的历程。
1369 0
|
存储 芯片 Windows
Windows CE嵌入式导航系统研究(硬件设计2)
1.1 嵌入式处理器 S3C2440A[17] S3C2440A是一款专用的以手持设备为主而设计的芯片,其特点有低功耗,高速的处理计算能力。为了减少系统的耗费,2440使用了如下组件:2440基于ARM920T内核的,0.13Um cmos 标准单元和存储单元复合体,它功耗及小、简单、稳定的设计非常适合对电源要求较高的产品上。
1444 0
|
Windows
Windows CE嵌入式导航系统研究(总结)
       当前,以具有无线通讯功能的个人数字助理 PDA、手持个人电脑 HPC、交互式网络信息家电、车载多媒体系统为代表的新一轮智能型 3C(Computer、Communication、Consumer)合一的类 PC 嵌入式系统与技术进入了一个崭新的智能化、网络化的发展阶段,类 PC 嵌入式系统与产品的嵌入式操作系统及其应用软件也同时得到了空前的发展与繁荣。
1192 0
|
9月前
|
安全 数据安全/隐私保护 虚拟化
Windows Server 2022 中文版、英文版下载 (2025 年 10 月更新)
Windows Server 2022 中文版、英文版下载 (2025 年 10 月更新)
2229 2
Windows Server 2022 中文版、英文版下载 (2025 年 10 月更新)
|
9月前
|
安全 Unix 物联网
Windows 7 & Windows Server 2008 R2 简体中文版下载 (2025 年 10 月更新)
Windows 7 & Windows Server 2008 R2 简体中文版下载 (2025 年 10 月更新)
973 0
Windows 7 & Windows Server 2008 R2 简体中文版下载 (2025 年 10 月更新)
|
10月前
|
运维 安全 网络安全
Windows Server 2019拨号“找不到设备”?Error 1058解决指南
Windows Server 2019拨号报错1058?别急!这不是硬件故障,而是关键服务被禁用。通过“服务依存关系”排查,依次启动“安全套接字隧道协议”“远程接入连接管理”和“路由与远程访问”服务,仅需4步即可恢复PPPoE或VPN拨号功能,轻松解决网络中断问题。
696 1