(VB)如何遍历指定进程名的窗口是否隐藏?

进程里有多个一样的进程名(如:12345678.exe),
且每个进程都有对应的窗口,
但这些进程的窗口会随机被隐藏,
现需要一段代码,功能如下:
遍历所有进程名为"12345678.exe"的进程,并一一判断与它们相关联的顶级窗口是否隐藏,如为隐藏状态则立即终止进程.
注意:(一定要循环遍历,终止所有窗口为隐藏状态的进程)
以上要求的功能可能不容易实现,其实用另一种方法也可以解决,描述如下:
系统内有多个标题和类名相同的窗口,用findwindow只能查找到第一个,请问findwindow如何获取所有标题相同的窗口的窗口句柄?
(获得所有标题相同的窗口句柄后,通过IsWindowVisible判断窗口是否隐藏,如果隐藏则终止)

---------------------------------------
回 siyiqing : 你的方法只对第一个符合条件的窗口有用..而实际上系统内存在多个该标题的窗口.
现在需要对所有是这个标题的窗口进行判断和操作..

根据你的反馈,回复如下:
假如进程名为12345678.exe,则可以分三步解决:
一、定义数组a(),然后枚举所有进程,找出进程名为12345678.exe的进程,并将其ID存入数组a()中
二、枚举所有窗口,取得对应的进程ID,然后与数组a()中的ID进行比较,若处于可见状态且ID相同,则将该数组元素置为空。
三、循环检验数组a(),如ID不为空,则终止此进程。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-07-12
能搞定,但是这点分数说实在话不够贴代码的哦。实在是抱歉了。
我个人推荐你用第一个方法。
第二个也行,但是不确定因素太多了。

找到进程名就已经是抓到小辫子了 hoho
第2个回答  2009-07-11
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) As Long
Private Const WM_CLOSE = &H10
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Sub Command1_Click()
Dim hwnd As Long
hwnd = FindWindow(vbNullString, "abcdefg")
If hwnd = 0 Then
MsgBox "程序未运行"
ElseIf IsWindowVisible(hwnd) = 0 Then SendMessage hwnd, WM_CLOSE, 0, 0
End If
End Sub
你多按几下command
第3个回答  2009-07-11
呵呵,所有系统服务进程的窗口都隐藏的,你也要结束?
第4个回答  2009-07-11
LZ 如果找不到满意答案的话 建议不要再提高分数啦 因为我以前提过100分
竟然回答的人都没有一个 - -
百度这个很不好啊 为什么不能没有人回答分数回返呢?
相似回答