65.9K
CodeProject 正在变化。 阅读更多。
Home

VBScript 中的 DestroyWindow

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.83/5 (5投票s)

2006年11月28日

CPOL

2分钟阅读

viewsIcon

88613

downloadIcon

2310

使用 VBScript 销毁或杀死一个窗口。

Sample Image - gopal_code.gif

引言

在 Microsoft Windows 平台上使用 VBScript 销毁或关闭窗口有点棘手。Windows API CloseWindowDestroyWindow 具有误导性。CloseWindow 只是最小化窗口,而 DestroyWindow 仅当从创建窗口的同一线程调用 DestroyWindow API 时才有效。由于我希望从 VBScript 销毁或关闭窗口,因此 DestroyWindow 线程将与我尝试销毁或关闭的窗口的线程不同。因此,我无法使用 DestroyWindow API。MSDN 文档将其描述为“一个线程不能使用 DestroyWindow 销毁由不同线程创建的窗口”。我在网上找到了一些文章建议从 VB 或 VBScript 使用 DestroyWindow。至少 DestroyWindow 对我不起作用。所提供的代码应该适用于所有 Windows 平台,例如 Windows 95、98、2000、XP、2003、Vista,但我只在 XP 上进行了测试。当然,VBScript 无法直接使用 Windows API,因此我将 API 嵌入到一个使用 VB 6 开发的小型 COM DLL 中。我没有使用 DestroyWindow,而是使用了带有 WM_CLOSESendMessage,这有效。

目标

如何在 Microsoft Windows 平台上使用 VBScript 销毁或关闭窗口。

使用演示项目操作方法

步骤 1:将演示项目下载并提取到您机器上的任何文件夹中。

步骤 2:如果您的机器的 system32 文件夹中没有 MSVBVM60.dll,请从 此链接 下载,然后将文件 msvbvm60.dll 复制到您机器的 system32 文件夹中。

步骤 3:双击您提取演示项目的位置中的文件 reg.bat

步骤 4:双击文件 test.txt

步骤 5:双击文件 destroy_window.vbs

您会发现打开的 test.txt 窗口将被关闭并销毁。

COM DLL 的源代码

创建一个新的 ActiveX DLL 项目。将以下代码复制并粘贴到模块的代码视图中

Option Explicit
Private Declare Function FxFindWindow Lib "user32" Alias "FindWindowA" _
(ByVal szClassName As String, ByVal szWindow As String) As Long

Private Declare Function FxSendMessage Lib "user32" Alias "SendMessageA" _
   (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam _
   As Long, ByVal lParam As Long) As Long

Private Const WM_CLOSE = &H10

Public Function FindWindow(ByVal CaptionString As String) As Long
    FindWindow = FxFindWindow(vbNullString, CaptionString)
End Function

Public Function KillWindow(ByVal winHandle As Long) As Long
    KillWindow = FxSendMessage(winHandle, WM_CLOSE, 0, 0)
End Function

VBScript 以销毁或关闭窗口

Set obj = CreateObject("APIWrapperCOM.APIWrapper")
winHandle = obj.FindWindow("test.txt - Notepad")
obj.KillWindow(winHandle)

COM DLL 的注册和依赖项

如上所述,Visual Basic 生成的 COM DLL 依赖于 MSVBVM60.dll,可以从上面的链接免费下载。一旦 MSVBVM60.dll 文件存在于您机器的 system32 文件夹中,您可以使用 regsvr32 命令注册 DLL。此命令包含在演示项目中的 reg.bat 文件中。

历史

  • 2006 年 11 月 28 日:初始发布
© . All rights reserved.