使用VBScript关闭Windows窗口

在Microsoft Windows平台上使用VBScript关闭窗口可能会遇到一些挑战。例如,Windows API中的CloseWindow函数仅将窗口最小化,而DestroyWindow函数仅在调用它的线程与创建窗口的线程相同的情况下才有效。因此,如果想要通过VBScript关闭或销毁一个窗口,不能使用DestroyWindow API,因为调用DestroyWindow的线程与要关闭的窗口的线程不同。MSDN文档中指出:“一个线程不能使用DestroyWindow来销毁由不同线程创建的窗口”。尽管网络上有一些文章建议在VB或VBScript中使用DestroyWindow,但至少在测试中,它并不起作用。发现在所有Windows平台上(如Windows 95、98、2000、XP、2003、Vista)都可以使用SendMessage函数与WM_CLOSE消息来关闭窗口,尽管只在XP上进行了测试。

目标

本文的目标是展示如何在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项目。将以下代码复制并粘贴到模块的代码视图中:

VB.NET 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关闭或销毁窗口

VB.NET Set obj = CreateObject("APIWrapperCOM.APIWrapper") winHandle = obj.FindWindow("test.txt - Notepad") obj.KillWindow(winHandle)
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485