如何使用JScript获取进程的主窗口句柄?

时间:2010-09-14 10:49:52

标签: windows scripting wsh window-handles jscript

JScript中是否有任何方法通过提供进程名称来获取进程主窗口的句柄? Process.MainWindowHandle属性仅适用于JScript .NET。经典的JScript中有类似的东西吗?

4 个答案:

答案 0 :(得分:0)

我不确定这是否有效,只是尝试循环window.parent直到它未定义。

之类的东西 -

var mainWindow = window;
while( mainWindow.parent ) {
    mainWindow = mainWindow.parent;
}

你也有类似window.top的东西,它总能让你回到最顶层的窗口。但不确定所有浏览器是否支持此功能。

答案 1 :(得分:0)

JScript和Windows Script Host没有此功能,WMI也没有。

如果PowerShell是您的选项,那么您可以使用您提到的Process.MainWindowHandle属性:

(Get-Process notepad).MainWindowHandle

否则,您需要查找或编写提供此功能的实用程序(COM对象,命令行工具等),并从脚本中调用此工具。


编辑:所以你需要关闭窗口 - 这是一个UI自动化任务。

Windows脚本宿主提供非常有限的UI自动化功能。如果你知道窗口标题,可以尝试使用AppActivateSendKeys方法激活该窗口并发送 Alt + F4 快捷方式它。您可以找到示例this answer。 (代码在VBScript中,但它应该给你一个想法。)但是,这种方法并不可靠。

如果你真的不想杀死这个过程,最简单的解决方案就是使用一些第三方UI自动化工具。例如,您可以尝试使用免费的AutoIt工具 - 我认为它应该能够满足您的需求。


编辑2:您是否尝试过录制关闭窗口?你应该得到一个这样的脚本:

Sys.Process("notepad").Window("Notepad", "Untitled - Notepad").Close();

这不是你需要的吗?

答案 2 :(得分:0)

对于本机win32应用程序,没有“主窗口”这样的东西。一个进程根本没有窗口,或几个顶级“主”窗口。

答案 3 :(得分:0)

一旦我必须为Outlook编写一个加载项。我的老板想要在Outlook加载时出现闪屏。但是Outlook窗口可以解决问题。经过大量搜索,我找到了FindWindow http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k%28FINDWINDOW%29%3bk%28TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22%29%3bk%28DevLang-CSHARP%29&rd=true这对此有所帮助。此函数根据窗口标题和窗口类名称查找窗口。我调用它并从C#中使用它。如果您可以通过JScript使用此功能,我认为它可以为您完成这项工作。 (我使用Spy ++查找lpClassName参数)