美文网首页
VB6、按键精灵中用循环和栈实现递归算法

VB6、按键精灵中用循环和栈实现递归算法

作者: 神梦无痕 | 来源:发表于2021-09-24 22:29 被阅读0次

标题: VB6、按键精灵中用循环和栈实现递归算法
作者: 神梦无痕(QQ:1042207232)
链接: https://www.jianshu.com/p/bcc00fff0894
版权: 本人所有文章,都遵守“署名-非商业性使用-相同方式共享 2.5 中国大陆”协议条款。

'遍历当前句柄的所有子句柄
Call 遍历所有子句柄(GetForegroundWindow())

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
Declare Function GetForegroundWindow Lib "user32" Alias "GetForegroundWindow" () As Long
Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount 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

Function 遍历所有子句柄(Hwnd)
    Dim i, HwndIE
    '用循环和栈代替递归:
    栈_数组 = Array() : i = -1 : HwndIE = 0
    Do
        HwndIE = FindWindowEx(Hwnd, HwndIE, vbNullString, vbNullString)
        If HwndIE > 0 Then 
            sClass = Space(50)
            GetClassName HwndIE, sClass, Len(sClass) : sClass = Left(sClass, Len(Trim(sClass)) - 1)
            sText = Space(255)
            GetWindowText HwndIE, sText, Len(sText) : sText = Left(sText, Len(Trim(sText)) - 1)
            TracePrint HwndIE & "|" & sClass & "|" & sText 
            '------[入栈]------
            i = i + 1 : Redim Preserve 栈_数组(i) : 栈_数组(i) = Array(Hwnd, HwndIE)
            Hwnd = HwndIE : HwndIE = 0
        Else
            If i = -1 Then Exit Do
            '------[出栈]------
            Hwnd = 栈_数组(i)(0) : HwndIE = 栈_数组(i)(1) : i = i - 1
        End If
    Loop
    栈_数组 = ""
End Function

VB6 中需要加上下面的语句,否则报错

Function TracePrint(Str)
    debug.Print Str
End Function

相关文章

  • VB6、按键精灵中用循环和栈实现递归算法

    标题: VB6、按键精灵中用循环和栈实现递归算法作者: 神梦无痕(QQ:1042207232)链接: https:...

  • 单链表递归求平均数

    设计一个算法:实现用递归求单链表的平均数 实现思路 通过递归循环累加,要注意用double类型,避免在递归过程中用...

  • Java版归并排序算法实现

    merge函数的实现 递归方式实现(自顶向下)的归并排序算法 借用栈实现循环方式(自顶向下)的归并排序算法 不借用...

  • 算法

    1.很多算法都可以通过递归和循环两种方式实现。 通常基于递归的实现算法代码会比较简洁,但性能不如基于循环的实现算法...

  • 二叉树算法之3-二叉树的遍历(递归、非递归)

    方法一:递归遍历 方法二:非递归遍历算法思想:使用栈。 内层循环用来存储节点,外层循环将内层循环的存储不断地转至节...

  • 【数据结构】【C#】026-二叉树(BT):🌱遍历介绍

    一、递归遍历: 1、先序遍历:2、中序遍历:3、后续遍历:总结规律: 二、非递归遍历:利用栈来实现 非递归算法实现...

  • 树-三大遍历

    三种遍历都有递归、栈、循环三种方式,其中,递归最为简单,栈次之,循环最为麻烦。递归的深度如果太大则会导致栈溢出;栈...

  • 剑指offer学习笔记:2.4 算法和数据操作

    2.4 算法和数据操作 重点关注二分查找,归并排序和快速排序。很多算法都有递归和循环两种不同实现方法。通常基于递归...

  • 二叉树的插入和搜索--python实现

    本文首先介绍了二分查找法,采用“循环”和“递归”2种方法实现。采用递归算法实现了二叉树的插入和搜索算法。 一、二分...

  • 递归实现 n!

    递归的特点: 自己调用自己 设定终止条件 优点:算法简单缺点:效率低下 用递归实现阶乘 n! 用 for 循环实现...

网友评论

      本文标题:VB6、按键精灵中用循环和栈实现递归算法

      本文链接:https://www.haomeiwen.com/subject/idsfnltx.html