2

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

4

4 回答 4

0

Well once i had to write a add-in for Outlook. My boss wants a splash-screen to appear when Outlook loads. But Outlook window goes over the splash. After a lot of search i found 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 this is help for it . This function finds window based on window caption and window class name. I p-invoked it and used it from C#. If you can use this function through JScript I think it could do the job for you. (I used Spy++ for finding lpClassName parameter)

于 2010-09-30T09:09:36.790 回答
0

对于本机 win32 应用程序,没有“主窗口”之类的东西。一个进程可以没有窗口,也可以有几个顶级“主”窗口。

于 2010-09-17T17:44:19.117 回答
0

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

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

(Get-Process notepad).MainWindowHandle

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


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

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

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


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

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

这不是你需要的吗?

于 2010-09-14T11:57:39.307 回答
0

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

就像是 -

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

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

于 2010-09-14T11:00:51.580 回答