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

Windows 如何使用JScript获取进程的主窗口句柄?,windows,scripting,wsh,window-handles,jscript,Windows,Scripting,Wsh,Window Handles,Jscript,JScript中是否有任何方法可以通过提供进程名称来获取进程主窗口的句柄?该属性仅在JScript.NET中有效。在classic JScript中是否有类似的功能?我不确定这是否有效,只需尝试循环window.parent,直到其未定义 差不多- var mainWindow = window; while( mainWindow.parent ) { mainWindow = mainWindow.parent; } 您还有类似于window.top的东西,它总是返回最上面的窗口。

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

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

差不多-

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

您还有类似于
window.top的东西,它总是返回最上面的窗口。但不确定是否所有浏览器都支持此功能。

我不确定此功能是否有效,请尝试循环
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自动化功能非常有限。如果您知道窗口标题,可以尝试使用to和方法激活该窗口,并向其发送Alt+F4快捷方式。你可以找到一个例子。(代码是用VBScript编写的,但它应该能让您了解情况。)但是,这种方法不可靠

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


编辑2:您是否尝试过录制窗口的关闭?您应该得到如下脚本:

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

这不是您所需要的吗?

JScript和Windows脚本主机没有此功能,WMI也没有

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

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


编辑:因此您需要关闭窗口-这是一项UI自动化任务

Windows脚本主机提供的UI自动化功能非常有限。如果您知道窗口标题,可以尝试使用to和方法激活该窗口,并向其发送Alt+F4快捷方式。你可以找到一个例子。(代码是用VBScript编写的,但它应该能让您了解情况。)但是,这种方法不可靠

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


编辑2:您是否尝试过录制窗口的关闭?您应该得到如下脚本:

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

这不是您需要的吗?

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

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

一旦我不得不为Outlook编写外接程序。我的老板希望在Outlook加载时显示启动屏幕。但是Outlook的窗口会被忽略。经过大量搜索,我找到了
FindWindow
这是它的帮助。此函数根据窗口标题和窗口类名查找窗口。我p-调用它并从C#使用它。如果您可以通过JScript使用这个函数,我认为它可以为您完成这项工作。(我使用Spy++查找
lpClassName
参数)

一旦我不得不为Outlook编写外接程序,我就可以了。我的老板希望在Outlook加载时显示启动屏幕。但是Outlook的窗口会被忽略。经过大量搜索,我找到了
FindWindow
这是它的帮助。此函数根据窗口标题和窗口类名查找窗口。我p-调用它并从C#使用它。如果您可以通过JScript使用这个函数,我认为它可以为您完成这项工作。(我使用Spy++查找
lpClassName
参数)

我使用与Sachin相同的循环来确保我的手放在最上面的窗口上。它只是工作。Sachin,我没有任何子窗口的句柄。我只有进程名。我认为上面的循环将一直迭代到父窗口返回undefined。如果我的假设是错误的,请纠正我。@rainbow365-使用窗口对象不需要任何子窗口句柄。它总是返回您当前正在处理的当前窗口。检查这个-谢谢Sachin。但我有不同的要求。我不需要“当前”窗口的主窗口句柄。我需要一个作为输入传递或提供的进程的主窗口句柄。@Dick:从OP的帖子上看,它不像是在使用浏览器脚本。JScript是一种Windows shell脚本语言。我使用与Sachin相同的循环来确保我掌握了最上面的窗口。它只是工作。Sachin,我没有任何子窗口的句柄。我只有进程名。我认为上面的循环将一直迭代到父窗口返回undefined。如果我的假设是错误的,请纠正我。@rainbow365-使用窗口对象不需要任何子窗口句柄。它总是返回您当前正在处理的当前窗口。检查这个-谢谢Sachin。但我有不同的要求。我不需要“当前”窗口的主窗口句柄。我需要作为inp传递或提供的进程的主窗口句柄