可用的win32 api函数:

1.HWND FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName)

HWND FindWindowEx(HWND hwndParent, HWND hwndChildAfter,LPCTSTR lpClassName, LPCTSTR lpWindowName)

2.HWND WindowFromPoint(POINT& Point)

3.BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)

BOOL CALLBACK EnumChildWindows(HWND hWndParent, WNDENUMPROC lpEnumFunc,LPARAM lParam)

BOOL CALLBACK EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam)

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)

一般用途:

对于第一种,大家都很熟悉,是捕捉句柄的常规武器,FindWindow这两兄弟,可以接受捕捉对象的类名或者窗口标题之一,作为参数,返回一个HWND。可是对于一般群众,不一定知道所有的窗口(包括标题栏、按钮等等)的类名啊!棗可以简单举例,请问你知道桌面图标的窗口的类名吗?而对于窗口标题,有可能会出现相同的标题,有两个窗口棗指一个程序的两个进程,这又是个麻烦吧!好了,这个问题先放放,继续下一组。

第二组,通过win32定义的POINT结构(typedef struct tagPOINT {   LONG x;

LONG y;} POINT),来获得当前鼠标光标位置的窗口HWND,这是最直观的武器!常规操作如下:先得到Cursor的POINT(BOOL GetCursorPos(LPPOINT)函数),再用WindowFromPoint。这样,我们几乎可以获得任何打开的有窗口的函数的HWND了!然后通过获取类名的win32 api函数(int GetClassName(  HWND hWnd,   LPTSTR lpClassName,   int nMaxCount ))得到类名棗这里的lpClassName最好用字符数组地址,nMaxCount就是数组的size了,同时,这种方法解决了第一个问题的麻烦!棗我可以把鼠标放在任何地方!*^_^*

第三组,这些是用来列举和处理任何窗口的超级武器!通过组合运用EnumWindows和EnumWindowsProc,EnumChildWindows与EnumChildProc,可以扫描桌面所有窗口并对之处理!

我的理解:(这部分用任务驱动式教学方法棗谁让小弟是老师呢!xi xi)

任务:得到所有的窗口的类名。

解决办法1:我们会先想到第三组,可以自桌面窗口开始(它是所有窗口的祖先),依次扫描,获取类名并存之。有点儿像Visual Stdio的Spy++,或者Borland 的WinSight32,具体办法如下:(bcb中)

在主程序中,调用EnumWindows,传入YouEnumProc的函数地址作第一个参数,别忘了转换成WNDENUMPROC类型。第二参可NULL。::EnumWindows(reinterpret_cast YouEnumProc,NULL);

在YouEnumProc函数中,如果第一参HWND = = NULL,就跳离(return FALSE;),可以结束啦!

然后,把类名数组准备好,得到类名,存之。

返回真值,继续下一次扫描。

看起来并不复杂,是一种函数递归。但是我可会解释!面啊!: p

第二种解决方法:简单、直观棗自己想出来的,颇得意

首先准备一个时钟,一种存类名方法(我用TMemo)

在定时器处理函数中:

1、得到当前cursor的点位置

2、再用WindowFromPoint,

3、然后得到类名,放到TMemo里

这样可以用鼠标获得你想要的窗口(包括按钮等),只要鼠标在窗口放一会儿。。。哈哈

第三种方法:其实利用FindWindow和循环结构也应该可以

总结:其实得到HWND的方法很多,比如知道了窗口层次,依次向下扫。。。在说第三种呢!但我觉得,我的方法最直接有效,你说呢?

欢迎大家与我联系,并讨论这个问题!有关这个问题我还有许多疑问,比如HWND与ID的转换,在如IE页面中的表单控件的HWND或ID,还是其他的东东,总之是能识别他的东西。。。这个我很困惑,没办法!

不清楚地方,大家要参照MSDN啊!(好东西呀!)

下面是来自微软的例子,这个枚举所有的窗口,然后向窗口发送关闭的消息。

#include

BOOL CALLBACK EnumWindowsProc(

HWND hwnd,

DWORD lParam

);

//

// EnumWindowsProc must be called from a Windows

// application on Windows 95.

//

int WINAPI WinMain(

HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow

)

{

//

// Close all open applications.

//

EnumWindows(EnumWindowsProc, 0);

// Now do a regular logoff.

ExitWindowsEx(EWX_LOGOFF , 0);

}

BOOL CALLBACK EnumWindowsProc(

HWND hwnd,

DWORD lParam

)

{

DWORD pid = 0;

LRESULT lResult;

HANDLE hProcess;

DWORD dwResult;

lResult = SendMessageTimeout(

hwnd,

WM_QUERYENDSESSION,

0,

ENDSESSION_LOGOFF,

SMTO_ABORTIFHUNG,

2000,

&dwResult);

if( lResult )

{

//

// Application will terminate nicely, so let it.

//

lResult = SendMessageTimeout(

hwnd,

WM_ENDSESSION,

TRUE,

ENDSESSION_LOGOFF,

SMTO_ABORTIFHUNG,

2000,

&dwResult);

}

else // You have to take more forceful measures.

{

//

// Get the ProcessId for this window.

//

GetWindowThreadProcessId( hwnd, &pid );

//

// Open the process with all access.

//

hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);

//

// Terminate the process.

//

TerminateProcess(hProcess, 0);

}

//

// Continue the enumeration.

//

return TRUE;

}

c语言根据窗口姓名获取句柄,win32 API窗口句柄的获得相关推荐

  1. C++ 主程序中打开子程序窗口隐藏,操作控件 遍历窗口控件句柄EnumChildWindows();获取其他程序进度条数据 操作选择框 按钮点击

    1.线程启动子程序  ShowWindow(hWnd, SW_SHOW)显示 ShowWindow(hwnd, SW_HIDE);隐藏 system_hide(L"Odin3.exe&quo ...

  2. python获取窗口句柄_Python+selenium 获取浏览器窗口坐标、句柄的方法

    1.0 获取浏览器窗口坐标 python目录可找到Webdriver.py 文件定义了get_window_rect()函数,可获取窗口的坐标和大小(长宽),但出现"Command not ...

  3. c语言 取窗口句柄,MFC获取句柄的方法

    句柄获取方法(获取该窗口的句柄后,即可向该窗口类类发送消息.处理程序): 例如:::PostMessage("句柄", WM_USER_DRAWVIEWPIC_EDS, 0, 0) ...

  4. C#通过Windows API捕获窗,获取窗口文本(FindWindow、GetWindowText),附录:Windows窗口消息大全、Windows API大全

    文章目录 一.前言 二.使用Spy++工具分析窗口 三.C#通过Windows API捕获窗口,获取窗口文本 四.附录:Windows窗口消息 五.Windows API大全 1.API之网络函数 2 ...

  5. c语言开发窗口应用程序

    转载于:https://blog.csdn.net/liu_rong_fei/article/details/51271901 视频下载地址:链接: http://pan.baidu.com/s/1q ...

  6. 重温WIN32 API ------ 最简单的Windows窗口封装类

    1 开发语言抉择 1.1 关于开发Win32 程序的语言选择 C还是C++ 在决定抛弃MFC,而使用纯Win32 API 开发Window桌面程序之后,还存在一个语言的选择,这就是是否使用C++.C+ ...

  7. 易语言python模块_Python获取指定模块基址

    image 因为昨天研究FPS游戏时候,发现有个动态地址每次重启电脑都会不同,然后因为有过用C和易语言编写指定模块名获取基址的经验,所以打算用Python来试试 在网上搜索了一点资料,发现有吾爱有一篇 ...

  8. Win32 API 窗口版本转换度分秒为小数

    经纬度的度分秒和小数之间转换是做GIS时常用的:下面实现一个Win32 API 版本度分秒转换为小数: 与此网站对比: http://www.gzhatu.com/du2dfm.html 使用VC++ ...

  9. C语言控制台窗口界面编程:printf格式化显示-修改字符字体、颜色和背景

    环境:cygwin-Linux+GCC PS:windows的cmd下不能实现. 在linux终端中一个ls指令得出的显示结果文件夹.文件以及不同操作权限的文件的显示颜色是不同的,那么这个是如何实现的 ...

最新文章

  1. Java获取运行环境信息
  2. 全国通用计算机一级考试模板,共享WPS中符合国人习惯的好模板
  3. JVM 调优实战--什么是调优及如何调优的思路
  4. 趁爸妈不在家约男朋友回家吃饭,然而......
  5. SQLServer优化资料整理(二)
  6. 基于SSM + Redis的Shiro权限管理项目
  7. SAP License:结算金额大于可支配金额问题应对
  8. [导入]ATA 50 pin to 40 pin
  9. 拓端tecdat|R语言线性判别分析(LDA),二次判别分析(QDA)和正则判别分析(RDA)
  10. Atitit form sbmt 表单提交的几种功能方法与实现目录1.1. Atitit 表单提交 mailto协议 http协议 11.2. form-urlencoded mul
  11. ppt流程图箭头分叉_实用模版大全(最全箭头、流程图).ppt
  12. 成都11区+4县+5市高分辨率边界kml
  13. mpa和pis_有关压力单位pis
  14. MODTRAN辐射传输模型使用笔记
  15. 2020最新Android开发中高级进阶书籍推荐
  16. for循环的语句执行顺序
  17. Ubuntu16.04调整屏幕分辨率至1920*1080
  18. 超详细,Python列表解析式到底该怎么用?
  19. 新东方雅思词汇---8.3、apt
  20. 计算机专业群校企合作“蜜蜂理论”

热门文章

  1. LSPG1000-激波管压力传感器测试系统
  2. android端口数据包,【图片】android抓包工具fiddler抓包使用方法 跟踪监控android数据包【中国红客联盟吧】_百度贴吧...
  3. java中每月等额与先息后本计算
  4. 四则运算题目 Java实现 by 黄国航 黄宇航
  5. 如何生成WebP图片
  6. 让手机变成你的车机系统,中国Android用户的CarPlay来了
  7. STC12单片机P4端口测试程序
  8. Vue + Element UI 实现权限管理系统 前端篇(九):接口格式定义
  9. python笔试题奥特曼打怪兽_2019阿里校招测评题,光明小学完全图最短路径问题(python实现)...
  10. 认识/dev/shm