在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,如需转载请自行联系原作者


相关文章
|
XML C# 数据格式
掌握了在Windows平台上查看DLL依赖的方法
掌握了在Windows平台上查看DLL依赖的方法
4457 4
|
Ubuntu Unix Linux
在Windows上轻松安装和使用Ubuntu的方法详解
继续点击“Continue”按钮以继续安装流程,随后选择清理磁盘并安装操作系统的选项。 接下来,在安装过程中,你需要选择时区。为了与你的地理位置相匹配,请选择中国上海作为你的时区设置。 在安装过程中,你还需要设置计算机的名称以及账号密码。请务必牢记这些信息,因为它们将作为你登录系统的凭证。
|
Linux Windows
Windows 10/11从官网下载ISO的方法
本文介绍了两种从微软官网下载Windows 10/11 ISO镜像的方法。一是通过修改浏览器User Agent为Linux系统,使官网提供ISO下载链接;二是使用UUPDUMP工具,从官网下载并转换为ISO格式,支持最新开发版,操作简便。
|
12月前
|
运维 iOS开发 Windows
windows电脑备案ios APP获取公钥和证书指纹Sha-1值的方法
在阿里云进行APP备案、在备案IOS端的环节的时候,发现需要我们将p12证书安装在电脑上,再用xcode或或钥匙串访问来获取这个证书的公钥和sha-1值。 但是大部分开发uniapp应用的同学们,或者进行发布的运维人员的电脑都是windows,无法按照阿里云的教程来获取ios的公钥和sha-1。备案就被卡主了。 这里介绍下另一个方法,就是使用香蕉云编来在线上传证书获取。如下图所示,打开香蕉云编后,找到下图这个功能
1497 0
|
存储 安全 虚拟化
Windows 11 绕过 TPM 方法总结,通用免 TPM 镜像下载 (2025 年 2 月更新)
Windows 11 绕过 TPM 方法总结,通用免 TPM 镜像下载 (2025 年 2 月更新)
3093 0
Windows 11 绕过 TPM 方法总结,通用免 TPM 镜像下载 (2025 年 2 月更新)
|
人工智能 JavaScript 网络安全
ToB项目身份认证AD集成(三完):利用ldap.js实现与windows AD对接实现用户搜索、认证、密码修改等功能 - 以及针对中文转义问题的补丁方法
本文详细介绍了如何使用 `ldapjs` 库在 Node.js 中实现与 Windows AD 的交互,包括用户搜索、身份验证、密码修改和重置等功能。通过创建 `LdapService` 类,提供了与 AD 服务器通信的完整解决方案,同时解决了中文字段在 LDAP 操作中被转义的问题。
855 1
|
Ubuntu Linux Python
如何利用wsl-Ubuntu里conda用来给Windows的PyCharm开发
如何在WSL(Windows Subsystem for Linux)的Ubuntu环境中使用conda虚拟环境来为Windows上的PyCharm开发设置Python解释器。
3045 1
|
存储 缓存 安全
硬盘数据恢复:恢复硬盘数据的9个实用方法(Windows版)
无论是工作文档、家庭照片,还是其他珍贵的数字资产,数据丢失总是一件让人头疼的事情。然而,当硬盘发生问题时,不必过于慌张——只要正确应对,许多数据都可以被成功恢复。本文将从常见数据丢失原因到具体恢复方法,为您提供全面的硬盘数据恢复指导。
|
监控 关系型数据库 MySQL
PowerShell 脚本编写 :自动化Windows 开发工作流程
PowerShell 脚本编写 :自动化Windows 开发工作流程
940 0
|
弹性计算 数据安全/隐私保护 Windows
阿里云国际版无法远程连接Windows服务器的排查方法
阿里云国际版无法远程连接Windows服务器的排查方法