VB获得指定xxx.exe进程的窗口标题(包括子窗体)

VB获得指定xxx.exe进程的窗口标题(包括子窗体),第1张

我在这里告诉楼上的几位朋友,这是完全可能的,因为此前我研究过这个问题,经过几番周折已经找出了方法,今天又经过几番周折我把核心部分摘出来了。

注:不要怪楼上几位朋友,因为这的确是个很复杂的过程,网上也找不到实例(我之前找了很久,没找到才自己动手),几乎是用API堆出来的。

'一模块,一窗体,一文本框(用于输入进程名),一列表框(用于显示所有标题),一命令按钮(开始)

'模块部分

Public Declare Function EnumWindows Lib "user32" _

(ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long

'枚举窗口

Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" _

(ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

'获取窗口标题

Public Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" _

(ByVal hWnd As Long) As Long

'获取窗口标题长度

Public Declare Function Process32First Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long

Public Declare Function Process32Next Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long

Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long

Public Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long

Public Declare Function IsWindowEnabled Lib "user32" (ByVal hWnd As Long) As Long

Public Declare Function IsWindowVisible Lib "user32" (ByVal hWnd As Long) As Long

Public Declare Function IsWindow Lib "user32" (ByVal hWnd As Long) As Long

Public Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long

Public Type PROCESSENTRY32

dwSize As Long

cntUsage As Long

th32ProcessID As Long

th32DefaultHeapID As Long

th32ModuleID As Long

cntThreads As Long

th32ParentProcessID As Long

pcPriClassBase As Long

dwFlags As Long

szExeFile As String 1024

End Type

Public hwn As Long, SSS As String

Public Function EnumWindowsProc(ByVal hWnd As Long, ByVal lParam As Long) As Long '回调函数

Dim sSave As String, Ret As Long, windowProcessId As Long

Ret = GetWindowTextLength(hWnd)

sSave = Space(Ret)

GetWindowText hWnd, sSave, Ret + 1

GetWindowThreadProcessId hWnd, windowProcessId

If windowProcessId = Form1pid Then

If IsWindowEnabled(hWnd) = 1 Then

hwn = hWnd

SSS = SSS & hWnd & "|" '存储所有相关句柄进字符串sss

End If

End If

EnumWindowsProc = 2

End Function

Public Sub draw()

EnumWindows AddressOf EnumWindowsProc, ByVal 0&

End Sub

'窗体部分

Const TH32CS_SNAPHEAPLIST = &H1

Const TH32CS_SNAPPROCESS = &H2

Const TH32CS_SNAPTHREAD = &H4

Const TH32CS_SNAPMODULE = &H8

Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST Or TH32CS_SNAPPROCESS Or TH32CS_SNAPTHREAD Or TH32CS_SNAPMODULE)

Const TH32CS_INHERIT = &H80000000

Public pid As Long

Dim pname As String

Dim a As String, hw As Long

'原创函数,返回字符串中字串个数

Function lon(st As String, sr As String) As Long

Dim f As Long, g As Long

For f = 1 To Len(st)

If Mid(st, f, Len(sr)) = sr Then g = g + 1

lon = g

Next f

End Function

'原创函数:返回字符串中第几段字符。例:quduan("23,43,5,23",",",2)=43

Function quduan(pli As String, pl As String, n As Long) As String '取字符串指定段

Dim j As Integer

For i = 1 To Len(pli)

If Mid(pli, i, Len(pl)) = pl Then j = j + 1

Next i

Dim a() As String

a() = Split(pli, pl)

If n > j + 1 Then quduan = "": Exit Function

quduan = a(n - 1)

End Function

Private Sub Command1_Click()

a = LCase(Text1) 'text1为程序名,如notepadexe

Dim my As PROCESSENTRY32

Dim l As Long, l1 As Long, flag As Boolean, mName As String, i As Integer

Dim st As Long, mt As Long, it As Long, jt As Long, nt As String '筛选窗口变量列表

l = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)

If l Then mydwSize = 1060

If (Process32First(l, my)) Then '遍历第一个进程

Do

i = InStr(1, myszExeFile, Chr(0)) '返回chr(0)在各个进程中出现的位置

mName = LCase(Left(myszExeFile, i - 1)) '返回小写的(返回i-1的前n个字符,即正确的名称)

If mName = a Then pid = myth32ProcessID '得到启动程序PID

Loop Until (Process32Next(l, my) < 1)

End If

draw '模块过程用于枚举窗口句柄与PID对比

'筛选主程序有效窗口

If SSS <> "" Then 'sss为所得主程序句柄集合

Do While it <= lon(SSS, "|")

it = it + 1

st = Val(quduan(SSS, "|", it))

jt = GetWindowTextLength(st)

nt = Space(jt)

GetWindowText st, nt, jt + 1

List1AddItem nt '加载此程序下所有窗体的标题

If nt <> "" And IsWindowVisible(st) = 1 And IsWindow(st) = 1 And IsWindowEnabled(st) = 1 Then

ShowWindow st, 1 '显示可显示的窗口

End If

Loop

End If

End Sub

可获得所有标题,可调出主窗口,通常进程都有好多隐藏的各种各样的窗口,我拿QQ测试发现有17个隐藏窗口

情况也是一样的,方法差不多,按下面的方法试试,另外如果是运行某程序出的这个提示,卸载程序重装试试,在不行,还原一下系统或重装。

加载C:\Windows\system32\dll时出错找不到指定的模块(你的提示最后应该有一个dll,你没有写)。

出现这种提示:一般是卸载软件或杀毒后;没有卸载或删除干净的软件和文件残余。建议你下载Windows清理助手,让它帮助你清理这些软件和文件残余(搜索下载)。

一般用Windows清理助手这款绿色软件,就能轻松解决你的问题,因为手工删除有时找不到残余文件,而Windows清理助手却能够轻松找到并删除。

下面是手工删除方法:

(1)运行输入msconfig回车,打开系统配置实用程序,在启动项目中查找一个名为“dll”,如果有将它前面的钩去掉,然后按应用确定(如果没有跳过)。

(2)运行输入regedit回车打开注册表,选编辑查找一个名为“dll”的键值项,找到后删除,多查找几次删除干净,然后重新启动电脑即可。

前天我遇到一个小坑,就是,我百度了一下后,使用sys模块的方法syspath[0]去获取执行路径打包成exe和py文件执行那是两种结果,打包exe后会出现奇怪的路径,所以解决方法是这样子的:

获取本exe执行路径名字应该使用os模块和sys模块去获取

ospathdirname(sysexecutable)

像这样子,就能获取执行的路径了。

如果觉得我的文章对您有帮助,记得帮我点赞加收藏哦,谢谢各位哥哥姐姐们

病毒感染、损坏的系统文件、配置错误。

1、病毒感染:病毒会攻击lsassexe进程,导致其无法正常加载安全模块。此时需要进行杀毒处理,清除病毒并修复受损的系统文件。

2、损坏的系统文件:lsassexe进程需要依赖一些系统文件才能正常工作,如果这些文件受到损坏或破坏,会导致lsassexe无法正常加载安全模块。此时需要对受损的系统文件进行修复或替换。

3、配置错误:系统配置错误会导致lsassexe无法正常加载安全模块。此时可以尝试还原系统配置或重新安装系统。

以上就是关于VB获得指定xxx.exe进程的窗口标题(包括子窗体)全部的内容,包括:VB获得指定xxx.exe进程的窗口标题(包括子窗体)、电脑老是出现未找到指定的模块C:\WINDOWS\system32.exe 跪求高手知道。、python打包exe后如何获取自身的执行路径等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9316022.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存