微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

JScript中是否有任何方法通过提供进程名来获取进程主窗口的句柄? Process.MainWindowHandle属性只能在JScript .NET中使用。 经典的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参数)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐