Запустите Internet Explorer 7 в новом процессе без панелей инструментов. - PullRequest
1 голос
/ 17 июня 2009

Мне нужно запустить веб-приложение в IE, чтобы оно как минимум выглядело как отдельное приложение. Мне также нужно иметь возможность запускать несколько экземпляров этого веб-приложения одновременно в отдельных сеансах.

Чтобы добиться этого, я бы хотел всегда запускать Internet Explorer 7 в новом процессе без панелей инструментов / строки состояния из ярлыка на рабочем столе.

Я пробовал несколько вещей. Пока что шкаф, к которому я пришел, создает ярлык для следующего скрипта vb,

Set objExplorer = CreateObject("InternetExplorer.Application")
objExplorer.Navigate "http://stackoverflow.com"
objExplorer.ToolBar = 0
objExplorer.StatusBar = 0
objExplorer.Width = 1024
objExplorer.Height = 768
objExplorer.Left = 0
objExplorer.Top = 0
objExplorer.Visible = 1

Это выглядит так, как я хочу. Однако, если дважды щелкнуть ярлык, он откроет новое окно, но в том же процессе (т. Е. В диспетчере задач Windows есть только один процесс iexplore.exe). Поскольку два экземпляра находятся в одном процессе, они совместно используют один и тот же сеанс. Поэтому, если вы вошли в один экземпляр приложения, то вы вошли в другой экземпляр приложения, что мне не подходит.

Я тоже пробовал,

"Program Files\Internet Explorer\iexplore.exe" http://stackoverflow.com

, который всегда запускает новый процесс, но вы не можете удалить только панели инструментов / строку состояния. Режим киоска (параметр "-k") мне не подходит, так как он нужен для отображения в окне.

Может кто-нибудь сказать, как всегда запускать Internet Explorer 7 в новом процессе без панелей инструментов / строки состояния из ярлыка на рабочем столе?

Я открыт для любых технологий для решения.

Спасибо, Эверетт

Ответы [ 4 ]

1 голос
/ 18 июня 2009

Ни один из других ответов не сработал для меня, так что вот сценарий vb, который я собрал из разных источников (я не сценарист vb).

On Error Resume Next

AppURL = "http://www.stackoverflow.com"
AppToRun = "iexplore about:blank"
AboutBlankTitle = "Blank Page"
LoadingMessage = "Loading stackoverflow..."
ErrorMessage = "An error occurred while loading stackoverflow.  Please close the Internet Explorer with Blank Page and try again.  If the problem continues please contact IT."
EmptyTitle = ""

'Launch Internet Explorer in a separate process as a minimized window so we don't see the toolbars disappearing
dim WshShell
set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run AppToRun, 6

dim objShell
dim objShellWindows

set objShell = CreateObject("Shell.Application")
set objShellWindows = objShell.Windows

dim ieStarted
ieStarted = false

dim ieError
ieError = false

dim seconds
seconds = 0

while (not ieStarted) and (not ieError) and (seconds < 30)

    if (not objShellWindows is nothing) then
        dim objIE
        dim IE

        'For each IE object
        for each objIE in objShellWindows

            if (not objIE is nothing) then

                if isObject(objIE.Document) then
                    set IE = objIE.Document

                    'For each IE object that isn't an activex control
                    if VarType(IE) = 8 then

                        if IE.title = EmptyTitle then
                            if Err.Number = 0 then
                                IE.Write LoadingMessage

                                objIE.ToolBar = 0
                                objIE.StatusBar = 1
                                objIE.Navigate2 AppURL

                                ieStarted = true
                            else
                                'To see the full error comment out On Error Resume Next on line 1
                                MsgBox ErrorMessage
                                Err.Clear

                                ieError = true

                                Exit For
                            end if
                        end if
                    end if
                end if
            end if

            set IE = nothing
            set objIE = nothing
        Next
    end if

    WScript.sleep 1000
    seconds = seconds + 1
wend

set objShellWindows = nothing
set objShell = nothing

'Activate the IE window and restore it
success = WshShell.AppActivate(AboutBlankTitle)

if success then 
    WshShell.sendkeys "% r"  'restore 
end if

Я открыт для любых улучшений или предложений.

1 голос
/ 17 июня 2009

Вы можете сделать это, манипулируя сервером COM COM. Это легко сделать в powershell:

$ie = new-object -COM InternetExplorer.Application
$ie.ToolBar = $false
$ie.StatusBar = $false
$ie.Navigate2( "http://www.stackoverflow.com" )
$ie.Visible = $true

Если бы это было в ie-app.ps1, то ваш ярлык будет иметь «powershell -command ie-app.ps1» для его вызова.

По сути, это то же самое, что вы сделали с Windows Scripting Host в vbscript. Вы можете использовать все, что может манипулировать COM-объектом InternetExplorer.Application. У меня IE8, и это может быть только разницей между IE7 и IE8, но с моим примером PowerShell я получаю два процесса.

1 голос
/ 17 июня 2009

Вы не указываете, какой режим кодирования вы хотите использовать для этого, но вы, несомненно, захотите взглянуть на WebBrowser Class .

1 голос
/ 17 июня 2009

Вы можете использовать приложение HTML, например:

<html>
<head>
<title>Stack Overflow</title>
<hta:application showintaskbar="yes" singleinstance="no" sysmenu="yes" scroll="no"
icon="http://www.stackoverflow.com/favicon.ico">
<style type="text/css">
* { margin: 0px; padding: 0px; }
iframe { position: absolute; top: 0px; left: 0px; width: 100%; height: 100%; }
</style>
</head>
<body>
<IFRAME SRC="http://www.stackoverflow.com/" APPLICATION="no">
</body>
</html>

Однако, это имеет тенденцию портить JS любой страницы без особых предосторожностей для HTA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...