我想实现用api关闭窗体,第一次成功,后来每次多了个关闭提示框,不知道为啥了

xingxingxiangrong 2009-02-25 09:17:17

Private Sub Command3_Click()
Dim a As Long
Dim b As Long
Dim c As Long
Dim d As Long
a = FindWindow("DFX_WINDOW", "DFX 7.5 Winamp")
SendMessage a, WM_CLOSE, 0, 0 ’发送关闭指令
b = FindWindow("#32770", "关闭") ‘这句是查找关闭窗体的句柄
c = FindWindowEx(b, 0, "Button", "确定") ‘关闭窗体时提示,弹出一关闭窗体,有“确认”和“取消”按钮
SendMessage c, WM_CLICK, 0, 0 ‘发送关闭指令
End Sub

第一关闭主窗体,并关闭了提示窗体
第二次关闭主窗体,但没有关闭提示窗体,这是为啥了
...全文
158 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2009-02-25
  • 打赏
  • 举报
回复
在 SendMessage 之后要加一点的延时。
你不能保证对方收到 WM_CLOSE 就是马上出对话框,也许它需要停止当前播放的媒体、也许要检查一下上次保存的配置等等,这些都需要花时间的。
xingxingxiangrong 2009-02-25
  • 打赏
  • 举报
回复
算了,这个只能yon 静态变量判判=1 那个按钮就不能用了
xingxingxiangrong 2009-02-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 cih2000zg 的回复:]
针对你多了个关闭框的问题

VB code
Private Sub Command3_Click()
Dim a As Long
Dim b As Long
Dim c As Long
Dim d As Long
dim i
a = FindWindow("DFX_WINDOW", "DFX 7.5 Winamp")
SendMessage a, WM_CLOSE, 0, 0 '发送关闭指令
b = FindWindow("#32770", "关闭") '这句是查找关闭窗体的句柄
for i=1 to b
c = FindWindowEx(b, 0, "Button", "确定") …
[/Quote]
就拿记事本来说,
我新建一个记事本,输入内容,然后直接点关闭按钮,他就会提示是否保存,我要实现的就是点关闭直接保存,即要实现
既要关闭记事本对话框,又要关闭提示保存的对话框

你的WM_CLOSE是怎么定义的?
=======================

Const WM_CLOSE = &H10
cih2000zg 2009-02-25
  • 打赏
  • 举报
回复
针对你多了个关闭框的问题

Private Sub Command3_Click()
Dim a As Long
Dim b As Long
Dim c As Long
Dim d As Long
dim i
a = FindWindow("DFX_WINDOW", "DFX 7.5 Winamp")
SendMessage a, WM_CLOSE, 0, 0 '发送关闭指令
b = FindWindow("#32770", "关闭") '这句是查找关闭窗体的句柄
for i=1 to b
c = FindWindowEx(b, 0, "Button", "确定") '关闭窗体时提示,弹出一关闭窗体,有“确认”和“取消”按钮
SendMessage c, WM_CLICK, 0, 0 '发送关闭指令
next i
End Sub



其实不是很明白你想实现什么功能
如果你要关闭一个窗口的话,可以用getwindows找到窗口然后直接关闭他。。
如果要关闭程序的话,可以通过关闭进程来实现,先EnumWindowsProc遍历出进程,GetWindowThreadProcessId得到进程,最后关闭他。
cih2000zg 2009-02-25
  • 打赏
  • 举报
回复
你的WM_CLOSE是怎么定义的?
javacb 2009-02-25
  • 打赏
  • 举报
回复
ding
cih2000zg 2009-02-25
  • 打赏
  • 举报
回复
会不会是窗口关闭了,进程还在?
xingxingxiangrong 2009-02-25
  • 打赏
  • 举报
回复
up
dlschan 2009-02-25
  • 打赏
  • 举报
回复
ding
cih2000zg 2009-02-25
  • 打赏
  • 举报
回复
就记事本来说:
你要不保存的话,可以通过时钟来判断那个窗口有没有出现,出现了就 SendMessage 关闭窗口。。
但是你如果要保存的话,,你点了保存之后,还会出现保存对话框,你也可以继续添加时钟来判断保存对话框有没有出现,出现了就输入文件路径,然后 SendMessage 点保存。。保存后跳出时钟。。
但是这样就太麻烦了。。如果要保存成文件的话不是这样做的。我相信你也不会是用在记事本的保存上吧?

xingxingxiangrong 2009-02-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 Tiger_Zhao 的回复:]
在 SendMessage 之后要加一点的延时。
你不能保证对方收到 WM_CLOSE 就是马上出对话框,也许它需要停止当前播放的媒体、也许要检查一下上次保存的配置等等,这些都需要花时间的。
[/Quote]
我尝试过,不行的

7,763

社区成员

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

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