Windows 使用vbscript激活(带到前台)特定窗口

Windows 使用vbscript激活(带到前台)特定窗口,windows,vbscript,sap,Windows,Vbscript,Sap,我甚至不知道从哪里开始我的问题,我尝试了100种方法,在谷歌上搜索了几个小时,但没有发现任何有用的东西。(我对每一个肮脏的把戏都持开放态度。) 我的问题是: 我有一个.hta文件,其列表框如下所示: 它列出了我运行的SAP Gui的所有会话/modi Set SapGuiAuto = GetObject("SAPGUI") Set application = SapGuiAuto.GetScriptingEngine If applicati

我甚至不知道从哪里开始我的问题,我尝试了100种方法,在谷歌上搜索了几个小时,但没有发现任何有用的东西。(我对每一个肮脏的把戏都持开放态度。)

我的问题是:

我有一个.hta文件,其列表框如下所示:

它列出了我运行的SAP Gui的所有会话/modi

        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