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个隐藏窗口

这是一种特殊的编技术, 即把文本文件转换为可执行文件,也可以叫做TXT2EXE 功能。此编程方法不仅具有极高的实用价值,而且熟练掌握这种编程技术将使编程水平有所提高。把文本文件转换为COM 和EXE 文件都可以达到单独直接运行的目的,但COM 文件的特殊结构限制了它的长度必须小于长规内容的容量, 即65536 个字节, 所以把TXT 转换为 COM文件只能处理一些小型文本文件。EXE 文件则没有这种限制,本文仅以用 TURBO C为例, 阐述如何把一般文本文件转换为EXE 文件编程原理, 并给出一个完善的TXT2EXE 通用程序源代码。 一、基本原理: 完成此 *** 作的基本原理, 就是在文本文件头部加上一段具有文本显示能力的程序段, 当运行合并后的程序时,打开此文件本身, 并移动文件指针到文本数据段,依次读出内容显示即可。所以一个完整的TXT2COM程序内部, 应该同时具有显示文本功能及合并文件的功能,其中的合并文件功能负责把其中的显示文本程序段与文本文件进行合并处理, 而显示文本功能只有在合并后的 EXE文件运行时才能得到执行。 二、需要解决的问题: 首先是文件显示程序的编制,为了达到良好的显示效果,此段显示程序中需要具有如下功能: 1彩色显示能力, 可根据汉字、西文字符、数字等采用不同的颜色, 以达到一目了然的效果; 2颜色修改能力, 每个人都会偏爱某一种颜色, 显示过程中应该允许随意调整屏幕底色及其它字符颜色; 3页号显示能力, 以便随时了解阅读进度; 4进度调整能力, 可随时上翻或下翻内容; 5标题填加能力, 针对不同的文本内容, 应该在标题栏显示指定的标题内容; 另外就是文件指针的调整问题,当进行文件显示时,必须把文件指针移到正确位置, 即跳过显示程序段部分,但由于程序调试时显示程序段长度是不定的, 无法确定具体的数值,此时可以采取一种动态记录显示程序段的方法,即合并显示程序与文本文件时, 把显示程序长度记录在程序未尾, 当运行合并后的程序时, 首先从文件尾部读出显示程序长度, 即可移到正确位置。另外显示标题也可以采取类似的处理方法,把标题信息存放在文本文件之后。 三、程序使用方法: 此程序运行时需要携带两个或三个参数, 段如程序名为TXT2EXEEXE,则命令格式: TXT2EXE Source Target Title 如:txt2exeexe atxt aexe hello 其中Source为原文本文件文件名, Target为转换后的目标文件名, 后缀必须为EXE,Title为标题内容,标题可省略,省略时将显示缺省的标题“hello”,运行之后所产生的EXE 文件即可以单独运行, 运行之后屏幕上为标题条,显示指定的标题, 屏幕下面为 *** 作提示条, 之后可按提示信息进行 *** 作, F1改变屏幕背景颜色, F2改变汉字颜色,F3改变西文字符显示, F4改变数字颜色, PGUP键上翻内容,其它键下翻内容, 当显示到文首或文尾时将给出提示, 显示同时在提示行显示页号, 按ESC 键退出程序。

一个简单的例子:1定义一个常量2代码如下: 版本 2程序集 窗口程序集1子程序 __启动窗口_创建完毕标题 = #IpAddress ' #IpAddress为常量,值为:“19216811”子程序 _按钮1_被单击

局部变量 进程路径, 文本型

局部变量 字节集数据, 字节集

局部变量 字节集位置, 整数型进程路径 = 取运行目录 () + “\” + 取执行文件名 ()

字节集数据 = 读入文件 (进程路径)

字节集位置 = 寻找字节集 (字节集数据, 到字节集 (#IpAddress), 1)

字节集数据 = 字节集替换 (字节集数据, 字节集位置, 取字节集长度 (到字节集 (#IpAddress)), 到字节集 (“19216822”))

写到文件 (取运行目录 () + “\mmexe”, 字节集数据) 效果:当点击按钮1时,会生成一个新的文件,其中的的常量IpAddress将变成19216822[注意]调试状态下,可能不能对自身程序文件进行读取,必须生成可执行文件;当有一个程序中有相同的字节集数据时,这种寻找字节集的方法可能行不通;修改字节集数据时,必须保持字节集数据的长度不变,否则生成的程序可能无法运行。 本例程只是为了给你提供一个思路

标题可以改的啊,

AfxGetMainWnd()->SetWindowText("你要的标题");

这样就可以了

如果想程序运行的时候就是这个标题,那么在App的InitInstance里改就好了

以上就是关于VB获得指定xxx.exe进程的窗口标题(包括子窗体)全部的内容,包括:VB获得指定xxx.exe进程的窗口标题(包括子窗体)、文本文件是怎样转换为EXE文件的、易语言怎么让编译出的exe文件能写出有内容的exe文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/zz/10111698.html

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

发表评论

登录后才能评论

评论列表(0条)

保存