在调用 DLL 函数前必须理解的另外一个重要概念是句柄。句柄是一个 32 位的正整数,Microsoft® Windows® 用它来识别窗体或其他对象,例如字体或位图。在 Windows 中,窗口可以有许多种。窗口可以是屏幕上的一块矩形封闭区域,比如您熟悉的应用程序窗口。窗体上的控件(例如列表框或滚动条)也可以是窗口,但并不是所有类型的控件都是窗口。桌面上的图标和桌面本身也是窗口。因为所有这些类型的对象都是窗口,所以 Windows 可以用类似的方式处理它们。Windows 给每个窗口一个唯一的句柄,通过句柄操纵该窗口。许多 API 函数可返回句柄或者接受句柄作参数。创建窗口时,Windows 给它指派一个句柄,窗口消失后句柄被释放。虽然句柄在窗口的整个生存期内保持不变,但不能保证某窗口在被损坏并重新创建后还使用原来的句柄。所以,如果在变量中存储了一个句柄,请记住窗口损坏后句柄就失效了。例如 GetActiveWindow 函数就可以返回窗口的句柄,这里的窗口是一个当前活动的应用程序窗口。GetWindowText 函数接受窗口的句柄,如果该窗口有标题,则返回标题。下面的过程用 GetActiveWindow 返回活动窗口的句柄,用 GetWindowText 返回该窗口的标题

解决方案 »

  1.   

    为什么hwnd设置为可以  设置为(int)button1.Handle也可以呢 ?
         两者有什么区别吗 ?楼主是不是少打了什么啊。hwnd必须设置为窗口的句柄,一个button也是一个窗口!!!
      

  2.   

    为什么hwnd设置为0可以,  设置为(int)button1.Handle也可以呢 
    请讲一下吧。
      

  3.   

    你问如何枚举出 所有控件的handle啊?不知道要达到什么目的,一般都没这个必要。一般是窗口的都会有handle这个属性的。如果一定枚举的话,就用EnumWindows和EnumChildWindows 这2个API。不过看你好象是刚刚学API,还是先学习基础的,然后再来用这2个函数吧!!!
      

  4.   

    为什么hwnd设置为0可以。不是每个API函数都设置为0就行的,你先搞清楚MessageBox这个API的hWnd参数是什么意思:这个参数可以指定你生成的MessageBox的拥有者,如果用0或null,就代表这个MessageBox没有拥有者,但仍然会产生MessageBox!!!
      

  5.   

    不错的问题 我也上了一课 thank 搂住
      

  6.   

    返回某一指定的应用程序的句柄 如何做到呢 ?
    GetActiveWindow 只能获得应用程序本身的handle!