永发信息网

vb如何获取程序的标题

答案:6  悬赏:20  手机版
解决时间 2021-01-24 22:54
如题
最佳答案
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

Private Sub Form_Load()
Dim a As String
a = Space(255)
GetWindowText hwnd, a, 255
msgbox a
End Sub
全部回答
200分,个个都想要。 不过这个题目说得不清楚。。。猜吧。 估计有可能是 取鼠标下窗口的标题、或者是激活窗口的标题,也有可能是当前窗口的标题??? 很想提供帮助,不过这个也有点不明不白。先在这抢个座。
CAPTION
把下面的代码放在标准模块里,建议你做个小记录,以后用的时候就不用再写了,直接复制粘贴 Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long Public Function GetWndText(hwnd) As String GetWndText = String(260, 0) GetWindowText clng(hwnd), GetWndText, 260 GetWndText = Left(GetWndText, InStr(GetWndText, vbNullChar) - 1) End Function 用法: 窗口标题=GetWndText(<指定窗口句柄>)
原来又是你!我敢发誓,要么这些分只转给同一个人,要么,这个问题会被管理员关闭。
熟悉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
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
晨光幼儿园(信阳平桥区)怎么去啊,我要去那办
盐塘村地址在什么地方,我要处理点事
什么声叫什么成语
伊顿国际幼儿园(信阳平桥区)地址在哪,我要去
下坝村地址有知道的么?有点事想过去
蕲春县黄冈中国电信(京九大道营业厅)地址是什
成语玩命猜里面一个奏一春字是什么成语
维尼宝贝幼儿园(信阳平桥区)地址有知道的么?
多彩艺术幼儿园(信阳平桥区)地址在哪,我要去
马额村地址在什么地方,我要处理点事
江苏无锡兴安邦是做什么的?请问有这个公司吗
将一张正方形纸片依次沿图中①,②所示的虚线
枇杷语代表什么意思
男女结婚,女方给生辰八字男方要给什么礼数吗?
精度1um的滤芯能承受多大压力
推荐资讯
delphi中运行程序未响应是什么情况
WOW焦点目标怎么做?
蜻蜓fm在vivo闹钟被强制
爱情废柴高品质版本下载链接谁有
大埔县地税局城区税务分局地址有知道的么?有
秀媛堂美容养生会馆地址有知道的么?有点事想
作为旅游资源,平遥古城有多方面的价值,其中
340的五倍是多少多少是304的五倍
【ride过去式】ride的过去式
国家是怎样规定学生补课的
新起点书法教室地址有知道的么?有点事想过去
下图示消化系统的组成,据图回答:(6分)(1)
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?