用MYIE打开了两个不同的网页后,要让焦点切换到指定的窗体里,请问如何实现

解决方案 »

  1.   

    ' 在窗体上放一个CommandButton和一个ListBox。
    ' 启动时ListBox中会显示出所有已打开的IE窗口,选中后单击CommandButton切换焦点。Option Explicit
    Dim IEWindow As New SHDocVw.ShellWindows
    Dim Browser As New SHDocVw.WebBrowserPrivate Sub Command1_Click()
        Set Browser = IEWindow.Item(List1.ListIndex)
        Browser.Visible = True
    End SubPrivate Sub Form_Load()
        Dim i As Long
        For i = 0 To IEWindow.Count
            Set Browser = IEWindow.Item(i)
            List1.AddItem Browser.LocationName
        Next i
    End Sub
      

  2.   

    TO GOODNAME008
    提示这两句语言类型未定义,是否需要引用什么控件?
    Dim IEWindow As New SHDocVw.ShellWindows
    Dim Browser As New SHDocVw.WebBrowser将程序改成如下可执行,但只对IE窗口有效,对MYIE窗口无效
    ' 在窗体上放一个CommandButton和一个ListBox。
    ' 启动时ListBox中会显示出所有已打开的IE窗口,选中后单击CommandButton切换焦点。Option Explicit
    Dim IEWindow As New ShellWindows
    Dim BrowserPrivate Sub Command1_Click()
        Set Browser = IEWindow.Item(List1.ListIndex)
        Browser.Visible = True
    End SubPrivate Sub Form_Load()
        Dim i As Long
        For i = 0 To IEWindow.Count - 1
            Set Browser = IEWindow.Item(i)
            List1.AddItem Browser.LocationName
        Next i
    End Sub
      

  3.   

    MyIE...要截取它的消息了难道你要做插件不成
      

  4.   

    补充一下,我的代码要在菜单中选工程--引用--选中Microsoft Internet Controls。
      

  5.   

    我引用了啊,可是还是不行,只定义成New ShellWindows
    而不能定义成New SHDocVw.ShellWindows
      

  6.   

    不好意思,是MyIE,没注意,我一直以为是IE呢。
    要是这样的话,可以用FindWindow找出所有的MyIE窗口,然后用SetForegroundWindow将窗口设置到当前窗口就行了。
      

  7.   

    非常感谢你的回复,不过我试了用SetForegroundWindow,只能切换到MYIE,却不是指定的窗体,以下是我的程序,请看一下:
    Dim Handle As Long, FindClass As Long, bb As Long
    FindClass = FindWindow(vbNullString, "MyIE - [CSDN]")
    Handle = FindWindowEx(1442226, 0, "MDIClient", "")
    bb = FindWindowEx(Handle, 0, "Afx:400000:8:0:0:bf40427", "CSDN.NET--中国最大的开发者网络,为开发人员和相关企业提供全面的信息服务和技术服务")
    SetForegroundWindow bb
    其中1442226是我找出来的MYIE母窗体的HWND
      

  8.   

    如果bb成功找到(非零)的话,最后的SetForegroundWindow bb改用SetWindowPos函数试试。我没装MYIE,不好调试,实在抱歉。
    SetWindowPos VB声明 
    Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (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 
    说明 
    这个函数能为窗口指定一个新位置和状态。它也可改变窗口在内部窗口列表中的位置。该函数与DeferWindowPos函数相似,只是它的作用是立即表现出来的(在vb里使用:针对vb窗体,如它们在win32下屏蔽或最小化,则需重设最顶部状态。如有必要,请用一个子类处理模块来重设最顶部状态 
    返回值 
    Long,非零表示成功,零表示失败。会设置GetLastError 
    参数表 
    参数 类型及说明 
    hwnd Long,欲定位的窗口 
    hWndInsertAfter Long,窗口句柄。在窗口列表中,窗口hwnd会置于这个窗口句柄的后面。也可能选用下述值之一: 
    HWND_BOTTOM 将窗口置于窗口列表底部 
    HWND_TOP 将窗口置于Z序列的顶部;Z序列代表在分级结构中,窗口针对一个给定级别的窗口显示的顺序 
    HWND_TOPMOST 将窗口置于列表顶部,并位于任何最顶部窗口的前面 
    HWND_NOTOPMOST 将窗口置于列表顶部,并位于任何最顶部窗口的后面 
    x Long,窗口新的x坐标。如hwnd是一个子窗口,则x用父窗口的客户区坐标表示 
    y Long,窗口新的y坐标。如hwnd是一个子窗口,则y用父窗口的客户区坐标表示 
    cx Long,指定新的窗口宽度 
    cy Long,指定新的窗口高度 
    wFlags Long,包含了旗标的一个整数 
    SWP_DRAWFRAME 围绕窗口画一个框 
    SWP_HIDEWINDOW 隐藏窗口 
    SWP_NOACTIVATE 不激活窗口 
    SWP_NOMOVE 保持当前位置(x和y设定将被忽略) 
    SWP_NOREDRAW 窗口不自动重画 
    SWP_NOSIZE 保持当前大小(cx和cy会被忽略) 
    SWP_NOZORDER 保持窗口在列表的当前位置(hWndInsertAfter将被忽略) 
    SWP_SHOWWINDOW 显示窗口 
    SWP_FRAMECHANGED 强迫一条WM_NCCALCSIZE消息进入窗口,即使窗口的大小没有改变 
    注解 
    窗口成为最顶级窗口后,它下属的所有窗口也会进入最顶级。一旦将其设为非最顶级,则它的所有下属和物主窗口也会转为非最顶级。Z序列用垂直于屏幕的一根假想Z轴量化这种从顶部到底部排列的窗口顺序
     
      

  9.   

    更改如下,依旧不行
    Dim Handle As Long, FindClass As Long, bb As Long, CC As Long
    FindClass = FindWindow(vbNullString, "MyIE - [CSDN]")
    Handle = FindWindowEx(1442226, 0, "MDIClient", "")
    bb = FindWindowEx(Handle, 0, "Afx:400000:8:0:0:bf40427", "CSDN.NET--中国最大的开发者网络,为开发人员和相关企业提供全面的信息服务和技术服务")
    SetForegroundWindow bb
    CC = SetWindowPos(bb, HWND_TOPMOST, 200, 200, 300, 300, SWP_SHOWWINDOW)
    'ShowWindow bb, 1
    End Sub
    bb 的值非零,在编译后生成文件运行也不行
      

  10.   

    是一个子窗口,因为原焦点不一定在BB上面,所以切换后也不一定在BB上面
      

  11.   

    你运行spy++看看bb确实是你想找的窗口吗?
      

  12.   

    我用的不是SPY++,用了程序间谍
      

  13.   

    看过了,BB的确为所需窗体,且与父窗体关系亦是对应的
    不过有一点忘记说了,bb是第二级子窗体了,中间的一个子窗体是Handle