Windows 使用vbscript激活(带到前台)特定窗口
我甚至不知道从哪里开始我的问题,我尝试了100种方法,在谷歌上搜索了几个小时,但没有发现任何有用的东西。(我对每一个肮脏的把戏都持开放态度。) 我的问题是: 我有一个.hta文件,其列表框如下所示: 它列出了我运行的SAP Gui的所有会话/modiWindows 使用vbscript激活(带到前台)特定窗口,windows,vbscript,sap,Windows,Vbscript,Sap,我甚至不知道从哪里开始我的问题,我尝试了100种方法,在谷歌上搜索了几个小时,但没有发现任何有用的东西。(我对每一个肮脏的把戏都持开放态度。) 我的问题是: 我有一个.hta文件,其列表框如下所示: 它列出了我运行的SAP Gui的所有会话/modi Set SapGuiAuto = GetObject("SAPGUI") Set application = SapGuiAuto.GetScriptingEngine If applicati
Set SapGuiAuto = GetObject("SAPGUI")
Set application = SapGuiAuto.GetScriptingEngine
If application.Connections.Count > 0 Then
Set connection = application.Children(0)
If connection.Sessions.Count > 0 Then
Set session = connection.Children(0)
End If
End If
If IsObject(WScript) Then
WScript.ConnectObject session, "on"
WScript.ConnectObject application, "on"
End If
Set optGroup = Document.createElement("OPTGROUP")
optGroup.label = "Server"
'count all connected servers
ConnectionCount = application.Connections.Count
If ConnectionCount > 0 Then
Sessionlist.appendChild(optGroup)
Else
optGroup.label = "No connection here."
End If
'count all sessions per server
If ConnectionCount > 0 Then
For Each conn in application.Connections
'Text output connections and sessions
SessionCount = conn.Sessions.Count
whatIsIt = conn.Description
ConnectionFeld.innerhtml = ConnectionFeld.innerhtml & " <br> " & SessionCount & " Sessions auf " & whatIsIt
'fill listbox with all connections
Set objOption = nothing
Set optGroup = Document.createElement("OPTGROUP")
optGroup.label = conn.Description
Sessionlist.appendChild(optGroup)
i = 0
'fill listbox with all sessions
For Each sess In conn.Sessions
i = i + 1
Set objOption = Document.createElement("OPTION")
objOption.Text = "Session " & i & ": " & sess.ID
objOption.Value = sess.ID
SessionList.options.add(objOption)
Next
Next
Else
Exit Sub
End If
它最小化所有窗口,然后最大化选定的SAP窗口。不幸的是,我的HTA-GUI也被最小化了,这有点糟糕
第二个想法:
以某种方式通过快捷方式找到这些可点击的东西,并将其放入我的脚本或其他丑陋的方式中
您必须手动执行此操作:
单击那个小箭头,右键单击图标,然后左键单击名称
有没有办法让这一切自动化?这快把我逼疯了
希望有人能帮助我,我将不胜感激
PS:我坐在一台权限受限的机器上,因此我可能无法用Windows API ish解决方案解决这个问题
编辑有关评论:
这是不可能的:
- 更改注册表项的步骤
- 创建COM对象
- 使用VBScript以外的任何东西
object.AppActivate title
对象
WshShell对象
标题
指定要激活的应用程序。这可以是包含应用程序标题(如标题栏中所示)或应用程序进程ID的字符串
我不知道你有什么权限获取关于窗口的信息。某些COM对象具有HWnd属性。这篇文章让您了解如何将hwnd转换为上面要使用的ProcessID
这显示了如何将流程命令行转换为ProcessID。要查看可用的属性和方法,请使用命令行工具wmic(wmic process get/?
和wmic process call/?
)
我找到了
用于更改窗口大小的resizeWorkingPane
方法也适用于后台窗口。如果更改参数,窗口将出现在前景
session.findById("wnd[0]").resizeWorkingPane 300,200,false
我不得不部分撤销它,因为它不适用于所有的窗口。我仍然不知道为什么,但有时会失败。不过,在我看来,这是你能得到的最接近的命令。类似地,它也适用于以下命令:
session.findById("wnd[0]").iconify
session.findById("wnd[0]").maximize
这是一个100%的时间解决方案。虽然很难看,但它很管用。您可以将IQS3 t代码换成任何其他代码,您可以确认用户不在,并且有权访问。我选择这段代码的另一个原因是它的加载速度很快
Set objShell = CreateObject("wscript.shell")
session.findById("wnd[0]/tbar[0]/okcd").text = "/nIQS3"
session.findById("wnd[0]").sendVKey 0
objShell.AppActivate(cstr(session.ActiveWindow.Text))
session.findById("wnd[0]/tbar[0]/btn[3]").press
不幸的是,我仍然只得到一个带有以下参数的进程:“ProcessID:3208//Name:saplogon.exe//CommandLine:“C:\Program Files(x86)\SAP\FrontEnd\SAPgui\saplogon.exe”。因此仍然无法找到正确的窗口来“AppActivate”“:”进程对象有一个sessionid。也许我没有弄清楚,但是如果只有一个进程(这就是我到目前为止对代码的了解),我只得到一个sessionid(即“1”)。这个问题被否决的确切原因是什么?可能是因为你还没有接受,我个人认为这个问题没有任何问题。我见过比这更糟的我为什么要接受这些。。。不管怎样如果你见过更糟的,你可能会看到更好的我能做些什么来让它更容易理解呢?你不明白我的意思,我是说这个问题没有错(值得投反对票)。是的,我明白了只是我坐在那根柱子前按F5(比喻)。所以我手头有足够的时间让这篇文章更清晰。我今天再次测试了它,大多数时候都有效。非常感谢。我不知道为什么它有时不起作用。我很快就会试试这个。谢谢你把这封信寄给我
session.findById("wnd[0]").iconify
session.findById("wnd[0]").maximize
Set objShell = CreateObject("wscript.shell")
session.findById("wnd[0]/tbar[0]/okcd").text = "/nIQS3"
session.findById("wnd[0]").sendVKey 0
objShell.AppActivate(cstr(session.ActiveWindow.Text))
session.findById("wnd[0]/tbar[0]/btn[3]").press