【问题标题】:Is there a way to get access to a window handle in windows using WSH, or WMI or similar?有没有办法使用 WSH、WMI 或类似方法访问窗口中的窗口句柄?
【发布时间】:2009-11-24 05:32:31
【问题描述】:

有没有办法使用 WSH、WMI 或类似方法访问窗口中的窗口句柄?我只想将一个窗口标记为始终在顶部。理想情况下,我会为此使用 Windows 脚本主机。

请注意,我不想在相关系统上安装 PowerShell。我们对任何额外的软件感到紧张,并且已经涉及到一些 VBS 文件。

问候,

【问题讨论】:

    标签: windows wsh windows-scripting


    【解决方案1】:
    Private Const Firefox  = "C:\App32\Mozilla Firefox\firefox.exe"
    Private Const IE8      = "C:\App32\Internet Explorer\iexplore.exe"
    Private Const Opera    = "C:\App32\Opera\opera.exe"
    Private Const Chrome   = "C:\App32\Google\Chrome\Application\new_chrome.exe"
    Private Const Safari   = "C:\App32\Safari\Safari.exe"
    
    Private Const ShowTime  =20000
    Private Const TechWait  =200
    Private Const CloseWait =1000
    
    If WScript.Arguments.Count <1 then 
               Wscript.Echo "URL not found!"         & vbCrLf &_ 
                                                       vbCrLf &_
               "ex 1: "                              & vbCrLf &_ 
           Wscript.ScriptName & " ""<URI>"       & vbCrLf &_ 
           "ex 2: "                              & vbCrLf &_ 
           Wscript.ScriptName & " ""http://www.google.com"
    
           Wscript.Quit(10)
    End If
    
    Set oShell=CreateObject("Wscript.Shell")
    
    Set oCommand=oShell.exec(Firefox   & " " & WScript.Arguments(0))
    FirefoxPid=oCommand.ProcessID
    
    Set oCommand=oShell.exec(IE8       & " " & WScript.Arguments(0))
    IE8Pid=oCommand.ProcessID
    
    Set oCommand=oShell.exec(Opera     & " " & WScript.Arguments(0))
    OperaPid=oCommand.ProcessID
    
    Set oCommand=oShell.exec(Chrome    & " " & WScript.Arguments(0))
    ChromePid=oCommand.ProcessID
    
    Set oCommand=oShell.exec(Safari    & " " & WScript.Arguments(0))
    SafariPid=oCommand.ProcessID
    
    
    WScript.Sleep ShowTime
    
    oShell.AppActivate(FirefoxPid)
    WScript.Sleep TechWait
    oShell.SendKeys "%{F4}"
    
    WScript.Sleep CloseWait
    
    oShell.AppActivate(IE8Pid)
    WScript.Sleep TechWait
    oShell.SendKeys "%{F4}"
    
    WScript.Sleep CloseWait
    
    oShell.AppActivate(OperaPid)
    WScript.Sleep TechWait
    oShell.SendKeys "%{F4}"
    
    WScript.Sleep CloseWait
    
    oShell.AppActivate(ChromePid)
    WScript.Sleep TechWait
    oShell.SendKeys "%{F4}"
    
    WScript.Sleep CloseWait
    
    oShell.AppActivate(SafariPid)
    WScript.Sleep TechWait
    oShell.SendKeys "%{F4}"
    
    Set oCommand = Nothing
    Set oShell   = Nothing
    

    【讨论】:

    • 你能解释一下而不只是给出答案吗?什么是关键部分,它为什么起作用
    • 我的意思是编辑您的答案以添加更多解释。我可以将您的答案作为新用户获得的评论的一部分,以帮助指导他们了解 SO 答案的风格和习惯。
    • oCommand.ProcessID - 读取并获取 ProcessId oShell.AppActivate(Pid) - 使应用程序的活动窗口成为焦点 vbscript - 坏主意任务管理......并且 WMI 可能只会终止任务......如果工艺mof-file ... 用 C++ 简单编写 ...
    【解决方案2】:
    Private Const wbemFlagReturnImmediately = 16
    Private Const wbemFlagForwardOnly       = 32
    
    Dim strComputer, objWMIService, strUserName, strPassword
    
    UserName = ""
    Password = ""
    strComputer   = "."
    
    Set SWBemlocator = CreateObject("WbemScripting.SWbemLocator")
    Set objWMIService = SWBemlocator.ConnectServer(strComputer,"root\CIMV2",strUserName,strPassword)
    
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Process", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly)
    For Each objItem in colItems
        WScript.Echo objItem.Caption, objItem.ProcessId, objItem.Commandline
    Next
    

    看... wmic 类 win32_process > C:\4.html

    Wmic process where (Name='eclipse.exe') get CommandLine, ProcessId

    如果需要新的wmi-winApi函数,可以创建mof文件并编译...

    http://msdn.microsoft.com/en-us/library/windows/desktop/aa393907(v=vs.85).aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-12
      • 1970-01-01
      • 2010-12-05
      • 2011-01-28
      • 1970-01-01
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      相关资源
      最近更新 更多