关于VB中使用控制其他窗体的问题

来源:百度知道 编辑:UC知道 时间:2024/07/08 01:40:21
请问各位大虾,如果我想在VB中使用一些API来完成控制其他窗体在屏幕上显示区域大小和Z顺序的功能,应该如何实现呢?举个例子,比如我要编写一个程序,使他能够指令Adobe Reader的主窗体显示在所有窗体的前端(也就是将窗体的Z顺序调整到最顶端,说明一下,Adobe Reader本身没有提供如一些视频播放器那样的“总在最前”的功能),应该如何实现呢?
我知道读取系统中所有窗口使用的API是EnumWindow,调整窗体大小和Z顺序使用的API是SetWindowPos,问题是EnumWindow这个API应该如何使用呢?网上百度出来的相关介绍都很理论化,没有什么与实际操作相关的借鉴意义。可以提供一些该函数的实际使用例子以及足够详细的介绍吗?
另一个问题是,使用EnumWindow读出来的“窗口”是广义的窗口,包括窗体,也包括命令按钮、图片框等带hWnd的控件对象,要如何将Adobe Reader窗体的hWnd从中筛选出来呢?
第三个问题是,提取到该窗体的句柄后,我的应用程序是否有权限可以像操作自己的本窗体一样,使用SetWindowPos函数来改变该窗体的大小和Z顺序呢?是不是也和调整自己本程序内部的窗体的相关代码类似呢?
第四个问题是,这些API之间要如何相互配合合作呢?它们之间的接口和相互通信(比如传递hWnd值)的代码应该是整个程序的关键代码吧。请介绍一下好吗?
我知道问题有点多,这点分肯定就不够性价比的了,不过,还是希望大虾们能够帮助下我这个好学的VB者,不胜感激!!
PS:请勿随意从网上Ctrl+C,Ctrl+V代码或者介绍哈,那些对我是没有帮助的,我全部都看过了。

要将某个窗体放到前面只需对窗体句柄调用SetWindowPos就行了

可以不用遍历

简单办法如下,在窗体添加时钟,将激活窗体的句柄记录
点击按钮就可以将其放到前面

Private Const HWND_TOPMOST = -1
Private Const HWND_BOTTOM = 1
Private Const HWND_NOTOPMOST = -2
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOZORDER = &H4
Private Const SWP_NOACTIVATE = &H10
Private Const SWP_SHOWWINDOW = &H40
Private Const SWP_HIDEWINDOW = &H80

Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Dim ActiveWindow As Long

Private Sub Timer1_Timer()
Dim h As Long
h = GetForegroundWindow()
If h <> Me.hwnd Then ActiveWindow = h
End Sub

Private Sub Co