分享
 
 
 

用VB5.0获取正在系统中运行的窗口标题

王朝厨房·作者佚名  2007-01-04
窄屏简体版  字體: |||超大  

作者:山东(德州 胥智强)

熟悉Visual Basic的读者都知道,AppActivate语句是激活一个应用程序窗口其后所带的参数是指要被子激活的应用程序窗口标题条的字符串。如果要激活的是一个常见的应用程序,我们在编写程序时就可以直接写上此程序的窗口标题。例如,我们想激活Windows95的计算器,可先运行程序x=SHELL("Calc.exe",1),然后再激活计算器窗口AppActivate“计算器”,则程序焦点自动转到计算器窗口上。然而单纯使用该方法局限性非常大,比如上述例子,如果我们放在英文Windows95上运行,计算器的窗口标题就不是“计算器”,而是“Calculator”。再一个局限性就是在很多情况下我们并不知道要激活的程序窗口标题名称,如何编制一个能自动查找程序窗口标题名称的程序是本文要解决的问题。

我们可以采取如下办法,来获取正在系统运行的窗口标题。

在WindowsAPI中有一个函数:

Get Windows (ByVal hWnd As Long ,ByVal wCmd As Long) As Long

其中,hWnd是当前窗口句柄,wCmd是与hWnd有联系的常量,其含义如下:

wCmd值

含义

GW-GHILD

第一个子窗口

GW-HWNDFIRST

子窗口的第一兄弟窗口,其第一个顶层窗口

GW-HWNDLAST

子窗口的最后一个兄弟窗口,或最后一个顶层窗口

GW-HWNDNEXT

后继窗口

GW-HWNDPRCV

先前窗口

GW-OWNER

窗口拥有者

此函数返回值是wCmd所指的窗口的句柄。

我们利用此句柄 ,再用函数Get WindowsText (ByVal hWnd As Long ,ByVal Ipstring As String, ByVal cch As Long) As Long,将句柄hWnd指定的窗口标题放入一个字符串变量Ipstring中,cch是指放入Ipstring中的最大字符数。此函数成功时返回字符串长度,如果窗口无标题则返回零。

在使用Get WindowsText函数前,还要先用函数Get WindowsTextLength (ByVal hWnd As Long )As Long得到hWnd指定窗口标题的长度,放入cch中。

自编一个过程FindTitle()查找系统中正在运行的所有标题,首先获得第一个顶层窗口句柄currwnd,而后采用While…Wend循环结构,当currwnd不为零而且标题文本长度不为零时,将获得的标题存入列表框Combo1,再找后继窗口的句柄,当句柄currwnd=0时表示已没有了后继窗口,退出循环。这样就将系统中所有的窗口句柄及标题找出来了。

然而调试中发现用此方法找到的窗口标题非常多,这说明Windows系统运行时有许多隐含的窗口,而这些窗口是我们所不需要的,而且用AppActivate激活时也出现错误。

因此我们再自编一个过程Sift ()查找可激活的窗口。其方法是用AppActivate逐个激活所有窗口,出现错误的丢掉,保留可激活的窗口标题,放入列表框Combo2。

首先新建窗体Form1,Caption=“获取窗口标题”,在窗体Form1上建立两个标签,Label1,Caption=“所有窗口标题”,Label2.Caption=“可激活的窗口标题”;建立两个下拉列表框,Combo1存放系统中的所有标题名称,Combo2存放可激活的标题名称;再建立两个命令按钮,Command1.Caption=“激活窗体”,可对所列窗体进行测试,命令按钮Command2.Caption=“刷新”,点击它可重新查找所有在系统中的窗体名称,当本程序运行以后又运行了新程序时使用此按钮。

从VB系统菜单上选取Project中的Add Module,将下述API函数及一些常量录入。

’Module 模块

Declare Function GetWindow Lib "user32"(ByVal hwnd As Long, ByVal wCmd As Long)As Long

Declare Function GetWindowText Lib "user32" Aias"GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String,ByVal cch As Long)As Long

Declare Function GetWindowText Length Lib "user32" Aias"GetWindowTextLengthA" (ByVal hwnd As Long)As Long

Public Const GW-HWNDFIRST=0

Public Const GW-HWNDLAST=1

Public Const GW-HWNDNEXT=2

Public Const GW-HWNDPREV=3

Public Const GW-OWNER=4

建立两个子程序:

Sub FindTitle ()

’查找桌面上的所有窗口标题

Dim currwnd As Integer

Combo1.Clear

Currwnd=GetWindow (hwnd, GW-HWNDFIRST)

While currwnd<>0

Length= GetWindow TextLength (currwnd)

listitem$=Space $(length +1)

length= GetWindow Text (currwnd,listitem$,length+1)

if length>0 Then

Combo1.Addltem listitem $

End if

currwnd= GetWindow (currwnd, GW-HWNDNEXT)

if Combl1.ListCount>0 Then

Combo1.Text=Combol.List (0)

Combo1.Listindex =0

Else

MsgBox“没有发现可活动的窗口”,16,“活动”

End if

Wend

End Sub

Sub Sift ()

’测试窗口能否活动

i=0

Combo2.Clear

Do

On Local Error Resume Next

AppActivate Combo1.List (i)

If Err =0 Then

Combo2.Additem Combo1.List(i)

End if

i=i+1

Loop Unti 1 i=Combo1.ListCount-1

AppActivate Form1.Caption

If Combo2.ListCount>0 then

Combo2.Text =Combo2.List (0)

Combo2.Listindex =0

Else

MsgBox “没有发现可活动窗口”,16,“活动”

End if

End Sub

Private Sub Form-Load ()

Form1.Show’首先将本窗体显示出来,否则查找出的窗体标题没有本身

MsgBox "开始查找窗口标题"

Call FindTitle

Call Sift

End Sub

Private Sub Command1-Click ()

F $=Combo2.Text

On Local Error Resume Next

AppActivate F $

End Sub

Private Sub Command2-Click ()

Call FindTitle

Call Sift

End Sub

本程序在Visual Basic5.0上调试通过。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有