加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 01:38:00 所属栏目:Windows 来源:网络整理
导读:我甚至不确定从哪里开始我的问题,我尝试了几百个东西并用谷歌搜索了几个小时但没有找到任何有用的东西. (我对每一个肮脏的把戏持开放态度.) 这是我的问题: 我有一个带有列表框的.hta文件,如下所示: 它列出了我的SAP Gui运行的所有会话/ modi. Set SapGuiAu
我甚至不确定从哪里开始我的问题,我尝试了几百个东西并用谷歌搜索了几个小时但没有找到任何有用的东西. (我对每一个肮脏的把戏持开放态度.)

这是我的问题:

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

hta file

它列出了我的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 Gui实例应该到达前台/被激活.

不幸的是,我的taskmanager只列出了一个任务,即“SAP Logon”.我打开的一个窗口也有“SAP Logon”的名称,其他所有窗口都有相同的名称:“SAP Easy Access”.

enter image description here

我能看到连接ID(servername)和会话ID的唯一方法是通过vbscript提取它们. (往上看)

有没有办法做到这一点?在尝试了一千个解决方案后,我能想到的唯一解决方法是这两个:

非常难看的解决方法:

If sessionID = sess.ID Then

Set objShell = CreateObject("shell.application")
objShell.MinimizeAll

sess.findById("wnd[0]").maximize

End If

它最小化所有窗口,然后最大化选定的SAP窗口.不幸的是,我的HTA-GUI也被最小化了,这有点糟糕.

第二个想法:

以某种方式通过快捷方式获取这些可点击的东西,并将其放在我的脚本或其他丑陋的方式.

手动你必须这样做:

单击该小箭头,右键单击图标,然后单击鼠标左键.

info tray symbols

有没有办法自动化这个?这让我疯狂.

希望有人可以帮助我,我会非常感激.

PS:我坐在一台权限有限的机器上,所以我可能无法使用Windows API-ish解决方案解决这个问题.

关于评论的编辑:

这不可能:

>更改注册表项
>创建COM对象
>使用除VBScript之外的任何其他内容

解决方法

来自帮助.

激活应用程序窗口.

object.AppActivate title

宾语
WshShell对象.

标题
指定要激活的应用程序.这可以是一个字符串,其中包含应用程序的标题(显示在标题栏中)或应用程序的进程ID.

我不知道您对该窗口的信息访问权限.某些COM对象具有HWnd属性.这篇文章将向您介绍如何将hwnd转换为上面要使用的ProcessID.

How to find the window Title of Active(foreground) window using Window Script Host

这显示了如何将进程的命令行转换为ProcessID.要查看可用的属性和方法,请使用命令行工具wmic(wmic process get /?和wmic process call /?)

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!.rootcimv2")

Set colItems = objWMIService.ExecQuery("Select * From Win32_Process")

For Each objItem in colItems
    msgbox objItem.ProcessID & " " & objItem.CommandLine
Next

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读