民间, 我现在已经打了好几个星期了。我们在组织中的瘦客户端上运行专有企业应用程序。从这个应用程序,我们可以在幕后应用VBA脚本来做简单的功能。在过去添加按钮来打开IE并将它们引导到某些网站以输入数据,打开Calc等等。
最近我一直在使用下面的代码。它是在服务器上使用RDP会话开发的,该会话启动完整的桌面和explorer.exe。我注意到,如果explorer.exe没有运行,那么代码会在“ For each oWin in oShApp.Windows ”中显示为“运行时错误'429'”的函数中的行。
但是,如果我脚本启动explorer.exe(这很糟糕,因为它启用了启动栏和任务栏),ThinClient启动桌面和完整功能,它运行得很好,因为瘦客户端用户是登录。 我已经阅读了一些关于使用remoteapp而不是完整桌面时运行的“Limited Shell”的信息,并且想知道周围是否还有它,而没有启用开始菜单和任务栏?
请参阅下面的代码。 感谢您的帮助,CreteIT
Private Sub cmdHomePage_Click()
Dim ie As Object
Dim sMatch As String
sMatch = "http://www.companyweb.com"
On Error Resume Next
Set ie = GetIEatURL(sMatch & "*")
On Error GoTo 0
If Not ie Is Nothing Then
ShowWindow ie.hwnd, 9
BringWindowToTop ie.hwnd
Else
Dim strHome
Dim strAPP
strHome = "c:\progra~1\intern~1\iexplore.exe www.companyweb.com"
strAPP = Shell(strHome, vbNormalFocus)
End If
End Sub
Function GetIEatURL(sMatch As String) As Object
Dim ie As Object, oShApp As Object, oWin As Object
Set oShApp = CreateObject("Shell.Application")
For Each oWin In oShApp.Windows
If TypeName(oWin.Document) = "HTMLDocument" Then
Set ie = oWin
If LCase(ie.LocationURL) Like LCase(sMatch) Then
Set GetIEatURL = ie
Exit For
End If
End If
Next
Set oShApp = Nothing
Set oWin = Nothing
End Function
答案 0 :(得分:1)
我在Microsoft的RemoteApp团队工作。我不太清楚你是从一个实际的RemoteApp会话运行这个脚本还是你自己的设置,它有一个不同的shell替换explorer.exe(或者根本没有shell),但无论哪种方式答案大致相同
您的脚本尝试实例化的Shell.Application ActiveX对象似乎是由shell实现的 - 通常是explorer.exe。如果没有运行,COM运行时将无法创建对象的实例,当您尝试激活它时,您将收到错误。
显而易见的解决方案是运行explorer.exe,但正如您所观察到的那样,还包括您可能不需要的任务栏和开始菜单。 RemoteApp运行自己的shell替换(rdpshell.exe),但是没有实现Shell.Application,因此只需在RemoteApp下运行您的应用程序就无法解决问题。
我能想到一些潜在的解决方案:
不幸的是,这些解决方案都不是理想的,但希望某些东西可以让你做你需要的。