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

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

Solutions Collecting From Web of "如何使用JScript获取进程的主窗口句柄?"

我不知道这是否工作,只是尝试循环window.parent直到它未定义。

就像是 –

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

你也有类似window.top东西总是返回你最上面的窗口。 但不知道这是否被所有的浏览器支持。

JScript和Windows脚本宿主没有这个功能,WMI也没有。

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

 (Get-Process notepad).MainWindowHandle 

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


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

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

如果你真的不想杀死进程,最简单的解决方案是使用一些第三方UI自动化工具。 例如,你可以尝试免费的AutoIt工具 – 我认为它应该能够完成你所需要的。


编辑2:你有没有尝试录制关闭的窗口? 你应该得到这样的脚本:

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

这不是你需要的吗?

对于原生的win32应用程序,不存在“主窗口”这样的事情。 一个进程可以根本没有窗口,或几个顶级的“主”窗口。

那么一旦我不得不为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这是对它的帮助。 这个函数根据窗口标题和窗口类名找到窗口。 我p调用它并从C#中使用它。 如果你可以通过JScript使用这个函数,我认为它可以为你做这个工作。 (我用Spy ++查找lpClassName参数)