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

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

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

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

    偵測離開Form進入其他程式

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

    領測軟件測試網 雖然Form有Activate與DeActivate的Events,但是這兩個Events只對form的Focus是在  
    同一個Process不同Form之間的切換有效,如果我們在Form1,而Click其他的Process,  
    則Form1并不會產生DeActivate的Events,相同的,由其他的Process 回到Form1時,也  
    不會產生Activate的Events。唯一能得知的便是透過WM_ACTIVATE,其LowWord of wParam  
    有以下叁個值:  
      WA_ACTIVE       Activated by some method other than a mouse click  
      WA_CLICKACTIVE  Activated by a mouse click.  
      WA_INACTIVE     Deactivated  
    透過Subclassing的技巧便可來解決這個問題  

    '以下在.bas  
    Option Explicit  

    Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _  
      (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long  
    Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _  
      (ByVal hwnd As Long, ByVal nIndex As Long) As Long  
    Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _  
      (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, _  
       ByVal wParam As Long, ByVal lParam As Long) As Long  

    Public Const GWL_WNDPROC = (-4)  
    Public Const WM_ACTIVATE = &H6  
    Public Const WA_ACTIVE = 1  
    Public Const WA_CLICKACTIVE = 2  
    Public Const WA_INACTIVE = 0  


    Public preWinProc As Long  

    Public Function wndproc(ByVal hwnd As Long, ByVal Msg As Long, _  
                             ByVal wParam As Long, ByVal lParam As Long) As Long  
    Dim fActive As Integer  
    If Msg = WM_ACTIVATE Then  
        '取得wParam的LowWord  
        fActive = CInt(wParam And &HFFFF)  
        If fActive = WA_INACTIVE Then  
           Debug.Print "InActive "  
        Else  
           Debug.Print "Active"  
        End If  
    End If  
    '將之送往原來的Window Procedure  
    wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)  
    End Function  

    '以下在form  
    Option Explicit  
    Private Sub Form_Activate()  
    Debug.Print "Event Activate"  
    End Sub  

    Private Sub Form_Deactivate()  
    Debug.Print "Event DeActivate"  
    End Sub  

    Private Sub Form_Load()  
    Dim ret As Long  
    '記錄原本的Window Procedure的位址  
    preWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)  
    '設定Combo1的window Procedure到wndproc  
    ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf wndproc)  
    End Sub  

    Private Sub Form_Unload(Cancel As Integer)  
    Dim ret As Long  
    '取消Message的截取,而使之又只送往原來的Window Procedure  
    ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, preWinProc)  
    End Sub

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


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