不错呦!smile@林凯西,确保“准备文件”中的几个文件都有安装,S...您好,看了您这篇帖子觉得很有帮助。但是有个问题想请...我的修改过了怎么还被恶意注册呢 @jjjjiiii 用PJ快9年了,主要是A...PJ3啊,貌似很少有人用PJ了,现在不是WP就是z...@332347365,我当时接入时错误码没有-10...楼主,ChkValue值应为-103是什么意思呢?...大哥 你最近能看到我发的信息,请跟我联系,我有个制...
按键精灵9插件:EnumChilds 遍历符合窗口
编辑:dnawo 日期:2012-04-13

在上图所示的软件中,StandardWindow下面有3个ToolBarPlus,当要获取句柄为10488138的ToolBarPlus时,尝试了下面几个命令均不成功:
复制内容到剪贴板
程序代码

Plugin.Window.FindEx
Plugin.Window.Search
Plugin.Window.SearchEx
Plugin.Window.Search
Plugin.Window.SearchEx
没办法,只能写插件来调用winapi的EnumChildWindows了。
按键精灵9插件:EnumChilds 遍历符合窗口
解压并用VB6.0打开按键精灵9自带的QMPlugin插件制作模版(VB 6.0),增加一个模块:
复制内容到剪贴板
程序代码

Option Explicit
Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private hWnds As String
'--------------------------------------------------------------------------------
'* 枚举子窗口回调函数
'*
'* @param Long hWnd 子窗口句柄
'* @param Integer lParam 调用 EnumChildWindows 函数时传递的参数
'* @return Boolean
'--------------------------------------------------------------------------------
Private Function EnumFunc(ByVal hWnd As Long, ByVal lParam As Integer) As Boolean
hWnds = hWnds & CStr(hWnd) & "|"
EnumFunc = True
End Function
'--------------------------------------------------------------------------------
'* 获取指定句柄的窗口类名
'*
'* @param Long hWnd 窗口句柄
'* @return String
'--------------------------------------------------------------------------------
Private Function GetClassNameX(ByVal hWnd As Long) As String
Dim cName As String, nLength As Integer
nLength = 255
cName = Space(nLength)
GetClassName hWnd, cName, nLength
GetClassNameX = cName
End Function
'--------------------------------------------------------------------------------
'* 获取子窗口句柄
'*
'* @param Long hWnd 父窗口句柄
'* @param String lpClassName 子窗体类名
'* @return String 窗体1句柄|窗体2句柄|窗体3句柄
'--------------------------------------------------------------------------------
Public Function EnumChildWindowsX(ByVal hWnd As Long, ByVal lpClassName As String) As String
Dim LstHwnd, i
hWnds = ""
EnumChildWindows hWnd, AddressOf EnumFunc, 0
'条件筛选
If Len(hWnds) > 0 And lpClassName <> vbNullString Then
LstHwnd = Split(hWnds, "|")
hWnds = ""
For i = 0 To UBound(LstHwnd)
If LstHwnd(i) <> "" Then
If LCase(Mid(GetClassNameX(CLng(LstHwnd(i))), 1, Len(lpClassName))) = LCase(lpClassName) Then
hWnds = hWnds & CStr(LstHwnd(i)) & "|"
End If
End If
Next
End If
'函数返回值
If Len(hWnds) > 0 Then
EnumChildWindowsX = Mid(hWnds, 1, Len(hWnds) - 1)
Else
EnumChildWindowsX = ""
End If
End Function
Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private hWnds As String
'--------------------------------------------------------------------------------
'* 枚举子窗口回调函数
'*
'* @param Long hWnd 子窗口句柄
'* @param Integer lParam 调用 EnumChildWindows 函数时传递的参数
'* @return Boolean
'--------------------------------------------------------------------------------
Private Function EnumFunc(ByVal hWnd As Long, ByVal lParam As Integer) As Boolean
hWnds = hWnds & CStr(hWnd) & "|"
EnumFunc = True
End Function
'--------------------------------------------------------------------------------
'* 获取指定句柄的窗口类名
'*
'* @param Long hWnd 窗口句柄
'* @return String
'--------------------------------------------------------------------------------
Private Function GetClassNameX(ByVal hWnd As Long) As String
Dim cName As String, nLength As Integer
nLength = 255
cName = Space(nLength)
GetClassName hWnd, cName, nLength
GetClassNameX = cName
End Function
'--------------------------------------------------------------------------------
'* 获取子窗口句柄
'*
'* @param Long hWnd 父窗口句柄
'* @param String lpClassName 子窗体类名
'* @return String 窗体1句柄|窗体2句柄|窗体3句柄
'--------------------------------------------------------------------------------
Public Function EnumChildWindowsX(ByVal hWnd As Long, ByVal lpClassName As String) As String
Dim LstHwnd, i
hWnds = ""
EnumChildWindows hWnd, AddressOf EnumFunc, 0
'条件筛选
If Len(hWnds) > 0 And lpClassName <> vbNullString Then
LstHwnd = Split(hWnds, "|")
hWnds = ""
For i = 0 To UBound(LstHwnd)
If LstHwnd(i) <> "" Then
If LCase(Mid(GetClassNameX(CLng(LstHwnd(i))), 1, Len(lpClassName))) = LCase(lpClassName) Then
hWnds = hWnds & CStr(LstHwnd(i)) & "|"
End If
End If
Next
End If
'函数返回值
If Len(hWnds) > 0 Then
EnumChildWindowsX = Mid(hWnds, 1, Len(hWnds) - 1)
Else
EnumChildWindowsX = ""
End If
End Function
修改类模块:
复制内容到剪贴板
程序代码

Public Function EnumChilds(hWnd As Variant, lpClassName As String) As String
EnumChilds = EnumChildWindowsX(CLng(hWnd), lpClassName)
End Function
Public Function Get_Plugin_Description(ItemName As String) As String
Dim Description_Text As String
Description_Text = ""
Select Case ItemName
Case ""
Description_Text = "窗口扩展插件"
Case "EnumChilds"
Description_Text = "遍历符合窗口"
End Select
Get_Plugin_Description = Translate_Description(Description_Text)
End Function
Public Function Get_Plugin_Interpret_Template(ItemName As String) As String
Dim Description_Text As String
Description_Text = ""
Select Case ItemName
Case ""
Description_Text = "窗口扩展插件"
Case "EnumChilds"
Description_Text = "遍历符合窗口"
End Select
Get_Plugin_Interpret_Template = Translate_Description(Description_Text)
End Function
EnumChilds = EnumChildWindowsX(CLng(hWnd), lpClassName)
End Function
Public Function Get_Plugin_Description(ItemName As String) As String
Dim Description_Text As String
Description_Text = ""
Select Case ItemName
Case ""
Description_Text = "窗口扩展插件"
Case "EnumChilds"
Description_Text = "遍历符合窗口"
End Select
Get_Plugin_Description = Translate_Description(Description_Text)
End Function
Public Function Get_Plugin_Interpret_Template(ItemName As String) As String
Dim Description_Text As String
Description_Text = ""
Select Case ItemName
Case ""
Description_Text = "窗口扩展插件"
Case "EnumChilds"
Description_Text = "遍历符合窗口"
End Select
Get_Plugin_Interpret_Template = Translate_Description(Description_Text)
End Function
生成WindowEx.dll,放到按键精灵安装目录的plugin文件夹中就可以使用了:

调用语法
复制内容到剪贴板
程序代码

Plugin.WindowEx.EnumChilds(hwnd, vbNullString) //获取全部子窗口句柄
Plugin.WindowEx.EnumChilds(hwnd, "ToolBarPlus") //获取指定类名子窗口句柄
Plugin.WindowEx.EnumChilds(hwnd, "ToolBarPlus") //获取指定类名子窗口句柄
也可以直接下载编译好的WindowEx.dll:点击下载
评论: 0 | 引用: 0 | 查看次数: 7564
发表评论
请登录后再发表评论!