在用findwindow 时,窗体标题能不能只要前面多少字符匹配就算呢?

myqiao 2006-06-07 03:38:10
因为在找一个窗体时,标题太长了,而且后半部会有变化,能不能只取前多少字符这样来找呢?

或者有其他什么方法没有呢?

先谢谢了...
...全文
418 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
myqiao 2006-06-10
  • 打赏
  • 举报
回复
好,感谢大家哈,结贴了..
清晨曦月 2006-06-09
  • 打赏
  • 举报
回复
:)
提供一种方法:
Option Explicit
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 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
Dim CptWnd() As String

'获取含指定字符指定窗口句柄
Public Sub mGetWindow(ByVal cName As String, ByRef fText As String)
Dim myStr As String * 255
Dim strLen As String
Dim bWnd As Long
Dim bWndback As Long
Dim i As Long
ReDim CptWnd(1, 0)
strLen = Len(myStr)
bWndback = 0: i = 0
Do
'获取子窗口标志
bWnd = FindWindowEx(0, bWndback, cName, vbNullString)
If bWnd <> 0 Then
'获取子窗口标题
GetWindowText bWnd, myStr, strLen
myStr = Trim(myStr)
If InStr(myStr, fText) Then
ReDim Preserve CptWnd(1, i)
CptWnd(0, i) = myStr
CptWnd(1, i) = bWnd
Me.Print bWnd
i = i + 1
'Exit Do
End If
Else
Exit Do
End If
bWndback = bWnd
Loop
End Sub

Private Sub Form_Load()
Dim i As Long
mGetWindow vbNullString, "Visual"
For i = 0 To UBound(CptWnd, 2) ' - 1
Debug.Print CptWnd(1, i) & " " & CptWnd(0, i)
Next
End Sub

结束语,这种方法可以列出标题中喊有指定字符(这里是"Visual")的窗体(包括子窗,“控件”),也可以列出具有指定类名的。如果不想要子窗,可以把FINDWINDOWSEX换成FINDWINDOW。
myqiao 2006-06-08
  • 打赏
  • 举报
回复
好的,先谢谢大家啊,我去试试看....
verywzm 2006-06-07
  • 打赏
  • 举报
回复
=======================窗体====================
Option Explicit

Private Sub Command1_Click()
EnumWindows AddressOf EnumProc, 0 '枚举窗口列表中的所有父窗口
End Sub

=======================模块======================

Option Explicit

Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Any, ByVal lParam As Long) As Long
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

Dim buf As String
Dim title As String

Public Function EnumProc(ByVal app_hwnd As Long, ByVal lParam As Long) As Boolean '遍查主窗口
Dim buf As String * 1024
Dim length As Long

length = GetWindowText(app_hwnd, buf, Len(buf))
title = Left$(buf, length)

If Left(title, 2) = "QQ" Then '判断是否为 OICQ 窗口
MsgBox "QQ"
End If
EnumProc = 1
End Function
verywzm 2006-06-07
  • 打赏
  • 举报
回复
用EnumWindow函数枚举所有窗口,再用GetWindowText函数取得标题,用Left()函数判断前多少字符是否匹配。
lsftest 2006-06-07
  • 打赏
  • 举报
回复
用EnumWindow吧
kmlxk0 2006-06-07
  • 打赏
  • 举报
回复
只能枚举所有窗口来判断吧。。

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧