.net - Потеря фокуса после создания объекта IE - PullRequest
0 голосов
/ 12 ноября 2010

У меня есть приложение, которое работает в фоновом режиме и иногда создает скрытый объект IE. Всякий раз, когда этот объект создается, он заставляет окно, которое я просматривал, терять фокус. Есть ли способ сделать так, чтобы при создании объекта IE это не приводило к потере фокуса моего текущего окна?

oIE = CreateObject("InternetExplorer.Application")
oIE.Visible = False

Ответы [ 3 ]

0 голосов
/ 12 ноября 2010

Предполагая, что вы говорите о Windows, просто позвоните Window.Activate после установки объекта ie видимым.

И, кстати, я бы посоветовал вам импортировать пакет в ваше приложение в качестве справочного, а не делать это жестко, используя CreateObject(), CreateObject() - это рецепт для отказа и не очень хорошая практика, если это следует избегать.
Вам нужно добавить в ваш проект ссылку на SHDocVw.dll , тогда вы можете просто объявить объект InternetExplorer строго типизированным и не жестко закодированным:

Public Class Form1 : Inherits Form
  Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) _
      Handles MyBase.Load
    Dim ie As New SHDocVw.InternetExplorer
    ie.Navigate("http://google.com")
    ie.Visible = True
    Me.Activate()
  End Sub
End Class
0 голосов
/ 24 августа 2012

К вашему сведению, используя TweakUI или изменяя запись реестра 'ForegroundLockTimeout', проблема не решается.Каждый раз, когда вы запускаете oIE.Navigate IE будет красть фокус из вашего активного окна, даже если oIE.Visible = False.

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

0 голосов
/ 12 ноября 2010

Нет, это контролируется ОС ... CreateObject() создает COM-объект, который в данном случае является полноценным приложением IE. За кулисами COM вызывает объект, который вы создаете, который запускает окно браузера. Нет параметров, которые вы можете передать CreateObject(), потому что этот вызов буквально не контролирует то, что делает экземплярный COM-объект.

Тем не менее, в ОС есть настройка, позволяющая отключить кражу окон при запуске ... это то, что вам нужно.

http://pcsupport.about.com/od/windowsxp/ht/stealingfocus02.htm - ссылка с инструкциями по отключению этого.

Если вы все еще используете XP, вы можете загрузить инструмент под названием TweakUI, который позволит вам установить это.

HTH,
Джеймс

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