WIN32 API获取窗口句柄
2009-07-24 09:38
323 查看
WIN32 API获取窗口句柄
2008-08-13 05:28 P.M.
2008-08-13 05:28 P.M.
关于如何获取窗口句柄,以及有哪些函数可供使用的简单讨论! 首先罗列出一些获取句柄的win32 api 函数,然后简单说说他们的用途!最后说说是怎么理解和应用的。 可用的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,可以扫描桌面所有窗口并对之处理! 我的理解 任务:得到所有的窗口的类名。 解决办法1:我们会先想到第三组,可以自桌面窗口开始(它是所有窗口的祖先),依次扫描,获取类名并存之。有点儿像Visual Stdio的Spy++,或者Borland 的WinSight32,具体办法如下:(bcb中) 在主程序中,调用EnumWindows,传入 YouEnumProc的函数地址作第一个参数,别忘了转换成WNDENUMPROC类型。第二参可 NULL。::EnumWindows(reinterpret_cast<WNDENUMPROC> YouEnumProc,NULL); 在YouEnumProc函数中,如果第一参HWND = = NULL,就跳离(return FALSE;),可以结束啦! 然后,把类名数组准备好,得到类名,存之。 返回真值,继续下一次扫描。 看起来并不复杂,是一种函数递归。但是我可会解释!面啊!: p 第二种解决方法:简单、直观——自己想出来的,颇得意 首先准备一个时钟,一种存类名方法(我用TMemo) 在定时器处理函数中: 1、得到当前cursor的点位置 2、再用WindowFromPoint, 3、然后得到类名,放到TMemo里 第三种方法:其实利用FindWindow和循环结构也应该可以。 |
相关文章推荐
- 如何获取设备描述表句柄--WIN32 api
- win32 获取窗口句柄的方法
- win32 API窗口句柄的获得--我的经验
- API方式(Foxpro中HtmlHelp)调用chm帮助文档(不用foxtools.fll获取窗口句柄)
- win32 获取窗口句柄的方法
- win32 API窗口句柄 HWND
- python 通过js控制滚动条拉取全文 通过psutil获取pid窗口句柄,通过win32gui使程序窗口前置 通过autopy实现右键菜单和另存为操作
- MFC中获取窗口句柄以及相关API
- win32 API窗口句柄的获得——我的经验
- win32 API窗口句柄的获得——我的经验
- 根据一个点获取窗口句柄的API
- 使用WIN32 API CreateProcess()以无窗口方式创建DOS程序
- 通过进程名获取窗口句柄
- 从子窗口中获取父窗口的句柄例子
- C#用API如何遍历所有窗口句柄
- ACTIVEX OCX 获取 IE窗口的句柄
- VC中获取窗口句柄的各种方法
- VMware vSphere Client 解决 无法获取“”控件的窗口句柄。不支持无窗口的 ActiveX 控件
- WinAPI: WindowFromPoint- 获取指定点所在窗口的句柄
- C++ 通过WIN32 API 获取逻辑磁盘详细信息