.net - 创建IE对象后失去焦点

时间:2010-11-12 00:14:46

标签: .net internet-explorer focus

我有一个在后台运行的应用程序,偶尔会创建一个隐藏的IE对象。每当创建此对象时,它会导致我正在查看的窗口失去焦点。有没有办法让它在创建IE对象时不会导致我的当前窗口失去焦点?

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

3 个答案:

答案 0 :(得分:0)

不,这是由操作系统控制... CreateObject()创建一个COM对象,在这种情况下是完整的IE应用程序。在幕后,COM正在调用您正在创建的对象,即启动浏览器窗口。没有参数可以传递给CreateObject(),因为这个调用实际上无法控制实例化的COM对象的作用。

但是,操作系统有一个设置可以禁止窗口在启动时窃取焦点......这就是你需要的。

http://pcsupport.about.com/od/windowsxp/ht/stealingfocus02.htm - 链接说明以禁用此功能。

如果您仍在使用XP,可以下载一个名为TweakUI的工具,让您设置它。

HTH,
詹姆斯

答案 1 :(得分:0)

假设您正在谈论Windows foms,只需在将ie对象设置为可见后调用Window.Activate

顺便说一下,我建议你将com dll导入你的应用程序作为参考,而不是使用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

答案 2 :(得分:0)

仅供参考使用TweakUI或更改' ForegroundLockTimeout'注册表项无法解决问题。每次运行oIE.Navigate IE都会从活动窗口中窃取焦点,即使oIE.Visible = False。

在撰写本文时,没有已知的解决方案(也许这就是为什么操作最终只是必须按照他的说法处理它)。