• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    用VB5.0獲取正在系統中運行的窗口標題

    發布: 2007-7-14 20:28 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 36次 | 進入軟件測試論壇討論

    領測軟件測試網 作者:山東(德州 胥智強)

    熟悉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上調試通過。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>