Как сделать так, чтобы моя веб-страница открывалась в браузере IE 11, чтобы она всегда была на переднем плане, если я не сверну ее? - PullRequest
0 голосов
/ 01 ноября 2018

Мне нужно сделать окно браузера (IE 11), которое открывает мою веб-страницу, чтобы всегда быть на переднем плане, пока она не свернется. Написал C # activex dll, зарегистрировал его. ActiveX DLL реализует простую печать «Привет мир». Код выглядит так.

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>

Как мы можем контролировать родительское окно IE, чтобы оно всегда было на переднем плане (например, как работает окно диспетчера задач) из dll activex?

Ответы [ 3 ]

0 голосов
/ 13 ноября 2018

«Мне нужно сделать окно браузера (IE 11), которое открывает мою веб-страницу, чтобы она всегда была на переднем плане, пока она не свернется». - это активно враждебно ... кто бы ни придумал это требование, ненавидит пользователей;

Звучит так, как будто вы на самом деле ищете "режим киоска"; Вы можете сделать это очень легко, просто используя любой ярлык, который они используют:

iexplore -k {url}
0 голосов
/ 14 ноября 2018

Попробовал приведенный ниже код, и он работал нормально.

пространство имен 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);
    }

}

}

Вызов SetIEWindowOnTop () из html, как объяснено в вопросе, сделает волшебство.

0 голосов
/ 02 ноября 2018

Обычно, когда вы запускаете 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 на передний план.

...