b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

获取无标题窗口句柄_由进程id获得窗口句柄_获取窗口句柄(2)

电脑杂谈  发布时间:2017-02-19 18:59:47  来源:网络整理

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。可是对于刚接触编程的朋友,不一定知道所有的窗口(包括标题栏、按钮等等)的类名。可以简单举例,请问你知道Windows桌面窗口的类名吗?而对于窗口标题,有可能不同窗口会出现相同的标题。好了,这个问题先放放,继续下一组。

第二组,通过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 Studio的Spy++,或者Borland 的WinSight32,具体办法如下:(bcb中)

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

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

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

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

看起来并不复杂,是一种函数递归。

第二种解决方法:简单、直观

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

在定时器处理函数中:

1、得到当前cursor的点位置

2、再用WindowFromPoint,

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

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

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

总结:其实得到HWND的方法很多,比如知道了窗口层次,依次向下扫。获取窗口句柄。。在说第三种呢!各位朋友自己可以根据需要选择一种最直接有效的方法。

欢迎大家与我一起讨论这个问题。对于API使用不清楚的地方,大家可以参照MSDN。

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

获取窗口的句柄我们就可以获取窗口的环境参数,这样就可以获取设备场景句柄,那么我们可以把图形输出到这个设备场景上。获取窗口句柄但是我们不可以在WINDOWS下开启这样一个进程,然后再获取另外一个进程窗口的句柄,然后由这个进程控制另外一个进程


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-33369-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 中村昌也
      中村昌也

      那分开是不是也是缘分呢

    热点图片
    拼命载入中...