我有一个在后台运行的应用程序,偶尔会创建一个隐藏的IE对象。每当创建此对象时,它会导致我正在查看的窗口失去焦点。有没有办法让它在创建IE对象时不会导致我的当前窗口失去焦点?
oIE = CreateObject("InternetExplorer.Application")
oIE.Visible = False
答案 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。
在撰写本文时,没有已知的解决方案(也许这就是为什么操作最终只是必须按照他的说法处理它)。