|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
一番搜索+编辑+测试之后,API关闭窗口的答案来了。用到的API函数有:FindWindow、GetWindowText、GetWindowTextLength、GetWindow、PostMessage
通过Function GetHandleFromPartialCaption获取标题中包含指定内容(例:test.pdf)的窗口句柄。
如果发现符合条件的窗口,则使用PostMessage关闭此窗口。
- Option Explicit
- Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
- ByVal lpClassName As String, _
- ByVal lpWindowName As String) As Long
- Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" ( _
- ByVal hWnd As Long, _
- ByVal lpString As String, _
- ByVal cch As Long) As Long
- Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" ( _
- ByVal hWnd As Long) As Long
- Private Declare Function GetWindow Lib "user32" ( _
- ByVal hWnd As Long, ByVal wCmd As Long) As Long
- Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" ( _
- ByVal hWnd As Long, _
- ByVal wMsg As Long, _
- ByVal wParam As Long, lParam As Any) As Long
- Const WM_CLOSE = &H10
- Const GW_HWNDNEXT = 2
- Public lhWndP As Long
- Sub ClosePDFwindow()
- Dim strCaption As String
- strCaption = "test.pdf"
- If GetHandleFromPartialCaption(lhWndP, strCaption) = True Then
- PostMessage lhWndP, WM_CLOSE, 0&, 0&
- End If
- End Sub
- Function GetHandleFromPartialCaption(ByRef lWnd As Long, ByVal sCaption As String) As Boolean
- Dim sStr As String
- GetHandleFromPartialCaption = False
- lhWndP = FindWindow(vbNullString, vbNullString) 'PARENT WINDOW
- Do While lhWndP <> 0
- sStr = String(GetWindowTextLength(lhWndP) + 1, Chr$(0))
- GetWindowText lhWndP, sStr, Len(sStr)
- sStr = Left$(sStr, Len(sStr) - 1)
- If InStr(1, sStr, sCaption) > 0 Then
- GetHandleFromPartialCaption = True
- lWnd = lhWndP
- Exit Do
- End If
- lhWndP = GetWindow(lhWndP, GW_HWNDNEXT)
- Loop
- End Function
复制代码
|
|