VB根据进程名获取对应窗体标题 20

【情景介绍】我在窗体中放了一个List1,Command1和Label1,在Form_Load中输入SetobjWMIServer=GetObject("winmgmts... 【情景介绍】我在窗体中放了一个List1,Command1和Label1,在Form_Load中输入
Set objWMIServer = GetObject("winmgmts:\\.\root\cimv2")
Set colProcesses = objWMIServer.ExecQuery("Select * from Win32_process")
For Each Process In colProcesses
List1.AddItem Process.Caption
Next
这样程序一运行,在List1中就列出当前系统中运行的所有进程的名称
【问题描述】我想实现的效果是,当选中List1中的一项进程后,再按下Command1,在Label1中就显示出选中进程所对应的窗体的标题。请问如何写代码?
【奖励说明】悬赏20分,答对者追加不少于20分的分数
【例子补充】例如我在List1中选中了“VB6.EXE”进程,那么点击Command1后在Label1中就显示出“VB6.EXE”这个进程所对应的窗体的标题:“工程1 - Microsoft Visual Basic [设计]”
展开
 我来答
百度网友3dc6540e7
2009-08-19 · 超过17用户采纳过TA的回答
知道答主
回答量:31
采纳率:0%
帮助的人:0
展开全部
Private Declare Function EnumWindows Lib "user32.dll" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
首先枚举所有的窗口。
然后
Private Declare Function EnumWindows Lib "user32.dll" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32.dll" (ByVal hwnd As Long, ByRef lpdwProcessId As Long) As Long
判断窗口的所属进程。
建立一个集合。
最后通过索引显示就OK了。
生鱼片ゆ超095b
2013-04-02 · 超过12用户采纳过TA的回答
知道答主
回答量:127
采纳率:0%
帮助的人:22.2万
展开全部
窗体代码如下 在TEXT输入进程PID
Private Sub Command1_Click()
List1.Clear
Find_Window Val(Text1.Text)
End Sub
Private Sub Form_Load()
Text1.Text = ""
Command1.Caption = "枚举窗口"
End Sub
模块代码如下
Option Explicit
Private Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Dim IfPid As Long
Private Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
Dim Pid1 As Long
Dim wText As String * 255
GetWindowThreadProcessId hwnd, Pid1
If IfPid = Pid1 Then
GetWindowText hwnd, wText, 100
Form1.List1.AddItem "句柄:" & hwnd & " 标题:" & wText
End If
EnumWindowsProc = True
End Function
Public Sub Find_Window(ByVal Pid As Long)
IfPid = Pid
EnumWindows AddressOf EnumWindowsProc, 0
End Sub
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
enochwills
2009-08-19 · TA获得超过4793个赞
知道大有可为答主
回答量:2031
采纳率:96%
帮助的人:1645万
展开全部
直接用FindWindow(0, "窗口标题")就可以获取窗口句柄,不用通过winmgmts,那个东西不好用,服务一停就没法工作了,FindWindow是API,任何情况都能使用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式