VB怎么获得与程序标题对应的进程名 10
VB怎么获得与程序标题对应的进程名,比如我的程序名字为123,进程里的名字为123.exe,但是我现在不知道那个进程里的名字的,就是说,我现在只知道这个程序的最上边的名字...
VB怎么获得与程序标题对应的进程名,比如我的程序名字为123,进程里的名字为123.exe , 但是我现在不知道那个进程里的名字的,就是说,我现在只知道这个程序的最上边的名字,也就是标题是123.用什么API能够获得在开启它后,进程里显示的进程名字呢?
你没看懂我的问题诶- - 展开
你没看懂我的问题诶- - 展开
4个回答
展开全部
根据你的反馈,回复如下:
假如进程名为12345678.exe,则可以分三步解决:
一、定义数组a(),然后枚举所有进程,找出进程名为12345678.exe的进程,并将其ID存入数组a()中
二、枚举所有窗口,取得对应的进程ID,然后与数组a()中的ID进行比较,若处于可见状态且ID相同,则将该数组元素置为空。
三、循环检验数组a(),如ID不为空,则终止此进程。
假如进程名为12345678.exe,则可以分三步解决:
一、定义数组a(),然后枚举所有进程,找出进程名为12345678.exe的进程,并将其ID存入数组a()中
二、枚举所有窗口,取得对应的进程ID,然后与数组a()中的ID进行比较,若处于可见状态且ID相同,则将该数组元素置为空。
三、循环检验数组a(),如ID不为空,则终止此进程。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
lpClassName
指向一个以null结尾的、用来指定类名的字符串或一个可以确定类名字符串的原子。如果这个参数是一个原子,那么它必须是一个在调用此函数前已经通过GlobalAddAtom函数创建好的全局原子。这个原子(一个16bit的值),必须被放置在lpClassName的低位字节中,lpClassName的高位字节置零。
如果该参数为null时,将会寻找任何与lpWindowName参数匹配的窗口。
lpWindowName
指向一个以null结尾的、用来指定窗口名(即窗口标题)的字符串。如果此参数为NULL,则匹配所有窗口名。
如果函数执行成功,则返回值是拥有指定窗口类名或窗口名的窗口的句柄。
如果函数执行失败,则返回值为 NULL 。可以通过调用GetLastError函数获得更加详细的错误信息。
接着用得到的句柄,配合以下API遍历进程(相关用法请搜索)
获得进程:
GetWindowTreadProcessId
获得exe名或dll名,完整路径:
GetModuleFileName
or
GetModuleFileNameEx
lpClassName
指向一个以null结尾的、用来指定类名的字符串或一个可以确定类名字符串的原子。如果这个参数是一个原子,那么它必须是一个在调用此函数前已经通过GlobalAddAtom函数创建好的全局原子。这个原子(一个16bit的值),必须被放置在lpClassName的低位字节中,lpClassName的高位字节置零。
如果该参数为null时,将会寻找任何与lpWindowName参数匹配的窗口。
lpWindowName
指向一个以null结尾的、用来指定窗口名(即窗口标题)的字符串。如果此参数为NULL,则匹配所有窗口名。
如果函数执行成功,则返回值是拥有指定窗口类名或窗口名的窗口的句柄。
如果函数执行失败,则返回值为 NULL 。可以通过调用GetLastError函数获得更加详细的错误信息。
接着用得到的句柄,配合以下API遍历进程(相关用法请搜索)
获得进程:
GetWindowTreadProcessId
获得exe名或dll名,完整路径:
GetModuleFileName
or
GetModuleFileNameEx
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetModuleBaseName Lib "psapi.dll" Alias "GetModuleBaseNameA" (ByVal hProcess As Long, ByVal hModule As Long, ByVal lpBaseName As String, ByVal nSize As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Sub Command1_Click()
Dim hwnd&, Pid&, pHandle&, str As String * 20
hwnd = FindWindow(vbNullString, "123") '可用"计算器"测试
If (hwnd = 0) Then Exit Sub
GetWindowThreadProcessId hwnd, Pid
pHandle = OpenProcess(&H1F0FFF, 0, Pid)
If (pHandle = 0) Then Exit Sub
GetModuleBaseName pHandle, 0, str, Len(str)
MsgBox "进程名为:" & Trim(str),,"Loumou"
CloseHandle hProcess
End Sub
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetModuleBaseName Lib "psapi.dll" Alias "GetModuleBaseNameA" (ByVal hProcess As Long, ByVal hModule As Long, ByVal lpBaseName As String, ByVal nSize As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Sub Command1_Click()
Dim hwnd&, Pid&, pHandle&, str As String * 20
hwnd = FindWindow(vbNullString, "123") '可用"计算器"测试
If (hwnd = 0) Then Exit Sub
GetWindowThreadProcessId hwnd, Pid
pHandle = OpenProcess(&H1F0FFF, 0, Pid)
If (pHandle = 0) Then Exit Sub
GetModuleBaseName pHandle, 0, str, Len(str)
MsgBox "进程名为:" & Trim(str),,"Loumou"
CloseHandle hProcess
End Sub
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不用api啊,直接这样不就行了么。。。
Text1.Text = App.EXEName
Text1.Text = App.EXEName
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询