除非我将其最小化,如何使在IE 11浏览器中打开的网页始终处于前台?

时间:2018-11-01 09:17:58

标签: c# com internet-explorer-11 activex

我必须使打开我的网页的浏览器窗口(IE 11)始终处于前台状态,直到将其最小化为止。 编写了一个C#activex dll,并将其注册。 activex dll实现简单的“ Hello world”打印。代码看起来像这样。

namespace SampleActX
{

    [ProgId("SampleActX.SampleActX")]
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [Guid("7F6A5914-9C8A-4977-AF5B-DE9D45E01B44")]
    [ComVisible(true)]

    public class SampleActX
    {
        [ComVisible(true)]
        public string SayHello()
        {
            return "Hello World!";
        }


    }
}

将dll嵌入html内,如下所示。

<!DOCTYPE>
<html>
   <head>
          <title>SampleActX webpage</title>
   </head>
   <body>
       <OBJECT id="SampleActX" classid="clsid:7F6A5914-9C8A-4977-AF5B-DE9D45E01B44" codebase="SampleActX.cab"></OBJECT>  
        <script type="text/javascript">
            try {
                var obj = document.SampleActX;
                if (obj) {
                    alert(obj.SayHello());
                } else {
                    alert("Object is not created!");
                }
            } catch (ex) {
                alert("Some error happens, error message is: " + ex.Description);
            }      
        </script>
   </body>
</html>

我们如何通过Activex dll控制IE父窗口使其始终位于前台(例如任务管理器窗口的工作方式)?

3 个答案:

答案 0 :(得分:1)

通常,当您启动IE时,它将在所有窗口上方启动。您正在使用哪个操作系统进行测试?

在JavaScript中,您可以参考下面的代码来明确地做到这一点。

function sample_window() {
 newwindow = window.open('https://microsoft.com', 'popup_return',     'menubar=no,history=no,resizable=yes,scrollbars=yes,toolbar=no,width=800,height=600');
if (window.focus) {newwindow.focus()}
   }

如果您使用的是VBA或任何其他脚本,则可以先隐藏浏览器窗口,然后再次使其可见将IE窗口置于前台。

答案 1 :(得分:1)

尝试以下代码,效果很好。

命名空间SampleActX {

[ProgId("SampleActX.SampleActX")]
[ClassInterface(ClassInterfaceType.AutoDual)]
[Guid("7F6A5914-9C8A-4977-AF5B-DE9D45E01B44")]
[DllImport("user32.dll", SetLastError = true)]
static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
[ComVisible(true)]

public class SampleActX
{
    [ComVisible(true)]
    public string SayHello()
    {
        return "Hello World!";
    }
    public void SetIEWindowOnTop()
    {
        var myId = Process.GetCurrentProcess().Id;//Fetches the pid of the current tab in IE only

        var query = string.Format("SELECT ParentProcessId FROM Win32_Process WHERE ProcessId = {0}", myId); //Finding the actual IE window handle
        var search = new ManagementObjectSearcher("root\\CIMV2", query);
        var results = search.Get().GetEnumerator();
        results.MoveNext();
        var queryObj = results.Current;
        var parentId = (uint)queryObj["ParentProcessId"];
        var parent = Process.GetProcessById((int)parentId);

        IntPtr windoHandle = parent.MainWindowHandle;//Fetches the parent window handle

        var bresu = SetWindowPos(windoHandle,   //Sets the window on Top
                    HWND_TOPMOST,
                    0, 0, 0, 0,
                   SWP_NOSIZE|SWP_SHOWWINDOW);
    }

}

}

按照问题中的说明从html调用SetIEWindowOnTop()会很神奇。

答案 2 :(得分:0)

“我必须使打开我的网页的浏览器窗口(IE 11)始终处于前台状态,直到将其最小化为止。” -这是一种积极的敌意...提出该要求的人都会讨厌用户;

听起来您实际上是在“信息亭模式”下;您只需做任何捷径即可轻松做到这一点:

iexplore -k {url}