大家帮我分析一下,我那里做错了~~`

lq__222 2007-04-30 07:56:16
我的程序思想是通过EnumWindows遍历所有窗口。然后用IsWindowVisible(hwnd)和(IsIconic(hwnd))分别统计出显示和最小化的窗体,并赋值给I_O。再传回TIME控件。执行相应的程序。但是不知道为什么统计结果总是不是自已想的,大家帮我看看到底出了什么漏
模块代码:

'这个程序获得当前运行的所有窗口、模块、程序的列表
'
Declare Function IsIconic Lib "user32" (ByVal hwnd As Long) As Long
Declare Function IsWindowVisible Lib "user32" (ByVal hwnd 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
Public i_o As Integer

'该函数是EnumWindows的回调函数,EnumWindows函数将遍历的窗口句柄传递到hwnd参数中
Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
Dim astr As String * 256
Dim l As Long

l = GetWindowText(hwnd, astr, Len(astr)) '得到窗口的标题
If (InStr(astr, " ") > 1) And (IsWindowVisible(hwnd) Or (IsIconic(hwnd)) = 1) Then '(InStr(astr, " ") > 1)
nbs.List1.AddItem astr
i_o = i_o + 1
End If
EnumWindowsProc = True
End Function

主窗体程序代码:
Option Explicit

Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function SetBkMode Lib "gdi32" (ByVal hdc As Long, ByVal nBkMode As Long) As Long
Private Declare Function TextOut Lib "gdi32.dll" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetActiveWindow Lib "user32" () As Long

Private Const TRANSPARENT = 1
Dim mHdc As Long
Private Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long

Private Sub Form_Load()
mHdc = GetDC(0)
End Sub

Private Sub Timer1_Timer()
Dim l As Long

List1.Clear
'遍历所有的窗口
i_o = 0
l = EnumWindows(AddressOf EnumWindowsProc, 0)
Label1.Caption = i_o
If i_o < 3 Then

SetBkMode mHdc, TRANSPARENT '设置透明
TextOut mHdc, 550, 150, "桌面写字测试~~", 14 '写字
DoEvents

End If
End Sub
...全文
275 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fishmans 2007-05-02
  • 打赏
  • 举报
回复
这里为什么要用回调?
嗷嗷叫的老马 2007-05-01
  • 打赏
  • 举报
回复
........................................
迈克揉索芙特 2007-05-01
  • 打赏
  • 举报
回复
哈哈,我也没搞明白 InStr(astr, " ") 是干什么的。找标题有空格的?
rainstormmaster 2007-05-01
  • 打赏
  • 举报
回复
//If (InStr(astr, " ") > 1) And (IsWindowVisible(hwnd) Or (IsIconic(hwnd)) = 1) Then

检查一下这句是否有逻辑错误,注意and和or的优先级

另外,InStr(astr, " ") 你查找空格的目的何在
lq__222 2007-05-01
  • 打赏
  • 举报
回复
如何该~
cangwu_lee 2007-05-01
  • 打赏
  • 举报
回复
Ding
改完了,就顶
迈克揉索芙特 2007-05-01
  • 打赏
  • 举报
回复
我贴的那段已经改完了
CathySun118 2007-05-01
  • 打赏
  • 举报
回复
单步跟踪
迈克揉索芙特 2007-04-30
  • 打赏
  • 举报
回复
在这里发现了问题,如果还有其它问题请回贴。

'该函数是EnumWindows的回调函数,EnumWindows函数将遍历的窗口句柄传递到hwnd参数中
Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
Dim astr As String
Dim l As Long
astr = Space(256)
l = GetWindowText(hwnd, astr, Len(astr)) '得到窗口的标题
astr = Left(astr, InStr(1, astr, vbNullChar) - 1)
If (InStr(astr, " ") > 1) And (IsWindowVisible(hwnd) Or (IsIconic(hwnd)) = 1) Then '(InStr(astr, " ") > 1)
nbs.List1.AddItem astr
i_o = i_o + 1
End If
EnumWindowsProc = True
End Function
内容概要:本文针对间歇性光伏出力条件下48V直流母线电压稳定控制及储能双向充放电闭环调控问题,提出一种基于离网光伏直流微网系统的协同控制体系。通过构建包含光伏阵列、Boost型DC-DC变换器、双向DC-DC变换器与锂离子电池储能系统的完整拓扑结构,结合光伏最大功率点跟踪(MPPT)技术和储能系统的双向功率调节能力,实现对功率供需失衡的有效抑制。系统采用分层控制架构,集成电压外环与电流内环双闭环控制策略,确保在光照强度波动、负载突变等动态工况下维持母线电压稳定。在Simulink环境中搭建全系统仿真模型,验证了控制策略在多种扰动场景下的有效性与鲁棒性,显著提升了微网在无外部电网支撑下的自主运行能力和电能质量水平。; 适合人群:具备电力电子、自动控制与新能源系统基础知识的电气工程及相关专业研究生、科研人员,以及从事光伏储能系统、直流微网设计与仿真的工程技术人员。; 使用场景及目标:①用于教学与科研中离网型光伏直流微网系统的建模与仿真分析;②指导实际工程中48V直流微网的电压稳定控制与储能协调管理方案设计;③为新能源微网中的能量管理与动态响应优化提供理论支持与仿真验证平台。; 阅读建议:建议结合Simulink仿真模型同步学习,重点关注MPPT控制算法、储能双向变换器的双闭环控制结构及其参数整定方法,深入理解系统在不同扰动工况下的响应特性与控制逻辑设计原理。

1,488

社区成员

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

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