代码改变世界

Windows API学习——千里之行,始于足下

2011-10-03 21:20  上帝之骰  阅读(273)  评论(0编辑  收藏  举报

随着网络和移动平台的发展,Windows独霸天下的时代已经过去,现在是网络和移动终端统治世界的时候了,而因为在新领域的表现不佳,微软的市值先后被苹果和IBM超越。基于C/C++的Window程序似乎也正逐渐失去往日的光辉,且不说平台的原因,即使是在Win平台上,新的、易用性更强的编程语言也层出不穷。对于专业的程序员而言,Windows C/C++的吸引力恐怕大大减弱了,而我认识的一些软件专业的同学,其必修课都没有涉及这一方面。但是Windows依然是最常用的PC系统,除了在消费PC保持垄断地位外,还开始在工业控制、数据采集等领域占据一席之地,而后者也是我学习Windows API的动力。

开始整理API方面学习经验的直接原因是想编一个网页游戏的外挂,却发现自己对API熟悉的有限,而且很是缺乏条理。虽然有MSDN可以查询,但翻阅别人的东西总是不如自己理解和记忆来的简便和实用。我本身不是软件专业的学生,在编程方面只是个小菜鸟,如果写的东西很幼稚,各位大神看了还请不要见笑~

今天整理下和获取窗口句柄有关的函数

1)HWND WINAPI FindWindow(

__in_opt  LPCTSTR lpClassName,

__in_opt  LPCTSTR lpWindowName );

这个函数对顶层窗口进行搜索,如果找到窗口类名和窗口名匹配的窗口,则返回其句柄,否则返回NULL并影响GetLastError()的结果。

如果lpClassName 参数是由RegisterClass 或者RegisterClassEx函数创建的类atom,那么atom必须位于该参数的低位字中,而该参数的高位字必须为零,atom是windows系统维护的一种索引表,在以后会做相应的总结。如果lpClassName 参数是字符串,则可以是使用RegisterClass 或者RegisterClassEx函数创建的窗口类名或者windows预定义的窗口类名。

    如果lpClassName 参数为NULL,则函数只对第二个参数lpWindowName进行匹配,该参数为窗口名。如果lpWindowName为NULL,则任何窗口名都可匹配。

    需要注意的是,该函数不能用于搜索子窗口,而且对字符串的匹配不区分大小写。

2)HWND WINAPI FindWindowEx(

  __in_opt  HWND hwndParent,
  __in_opt  HWND hwndChildAfter,
  __in_opt  LPCTSTR lpszClass,
  __in_opt  LPCTSTR lpszWindow
);
    这个函数是FindWindow的扩展,对由hwndParent指定的父窗口的子窗口进行搜索。函数从hwndChildAfter指定的子窗口的下一个子窗口第一个参数指定了父窗口句柄,如果该句柄为NULL,则函数将桌面视为父窗口,对桌面的子窗口进行搜索。第二个参数hwndChildAfter指定了一个子窗口,搜索从Z序中hwndChildAfter的下一个窗口开始搜索。而如果前两个参数皆为NULL,则函数作用与FindWindow相同。
返回值规则与FindWindow相同。