簡易視窗檢視器 @ Excel VBA Comics :: Xuite日誌
  • 這是 Google 提供的廣告
  • 關鍵字
  • Re:Web查詢現在股票行情,by(crdotlin)於2009-07-04
    Re:Web查詢現在股票行情,by(阿達)於2009-07-04
    Re:Web查詢現在股票行情,by(crdotlin)於2009-07-03
    Re:Web查詢現在股票行情,by(阿達)於2009-07-02
    Re:Web查詢現在股票行情,by(crdotlin)於2009-07-02
  • 累積 | 今日
    loading......






  • 如何使用RSS
    Powered by Xuite
  • 2006-08-17 11:34 簡易視窗檢視器
    平均分數:0 顆星    投票人數:0
    我要評分:
    標籤 : 

    我們很少去了解系統的物件,比如說Excel好了:Excel有多少層視窗?每一個視窗的ClassName是什麼?[XLMAIN] [XLDESK] [EXCEL7] [EXCEL2] [EXCEL<] [EXCELE] [EXCEL4] [EXCEL;]…它們的關係為何?

    微軟給User這方面的資訊很少。透過這個程序可以讓我們瀏覽一下桌面上具有視窗句柄(Window handle)的物件之Class Name及Window Name 或Caption,也許可以增加一點對Excel之架構甚或作業系統的了解。

    'Coded by crdotlin@2006.1.5
    'Purpose: 探測桌面物件的Window Handle, Window Name, Class name
    'Module: 一般模組--Module1
     
    Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
    End Type
     
    Public Type POINTAPI
        x As Long
        y As Long
    End Type
     
    Public Declare Function WindowFromPoint _
        Lib "user32" ( _
        ByVal xPoint As Long, _
        ByVal yPoint As Long) _
    As Long
     
    Public Declare Function GetWindowTextLength _
        Lib "user32" _
        Alias "GetWindowTextLengthA" ( _
        ByVal Hwnd As Long) _
    As Long
     
    Public Declare Function GetCursorPos _
        Lib "user32" ( _
        lpPoint As POINTAPI) _
    As Long
     
    Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" _
                (ByVal Hwnd As LongByVal lpString As StringByVal cch As LongAs Long
     
    Public Declare Function GetClassName Lib "user32" Alias "GetClassNameA" _
                (ByVal Hwnd As LongByVal lpClassName As StringByVal nMaxCount As LongAs Long
     
    Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
                                (ByVal lpClassName As StringByVal lpWindowName As StringAs Long
     
     
    Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
                                  ( _
                                   ByVal hwndParent As Long, _
                                   ByVal hwndChildAfter As Long, _
                                   ByVal lpszClass As String, _
                                   ByVal lpszWindow As String _
                                   ) As Long
     
    Declare Function GetWindowRect Lib "user32" (ByVal Hwnd As Long, lpRect As RECT) As Long
     
    Public Declare Function SetWindowPos Lib "user32" _
                (ByVal Hwnd As LongByVal hWndInsertAfter As LongByVal x As Long, _
                ByVal y As LongByVal cx As LongByVal cy As LongByVal wFlags As LongAs Long

    Public Declare Function MoveWindow Lib "user32"  _
                (ByVal Hwnd As LongByVal x As LongByVal y As LongByVal nWidth As Long,  _
                ByVal nHeight As LongByVal bRepaint As LongAs Long
     
    Sub LookAtObject()
     
    Dim Hwnd As Long
    Dim myPoint As POINTAPI
    Dim lastHwnd As Long
    Dim WText As String
    Dim WClass As String
    Dim RetValue As Long
    '將Userform放到[G14]儲存格, 請參考[黏在作用儲存格的UserForm]一文
    MoveForm
    Do
        '獲取游標位置
        GetCursorPos myPoint
        '取得游標位置視窗的句柄
        Hwnd = WindowFromPoint(myPoint.x, myPoint.y)
     
        If Hwnd <> lastHwnd Then
            lastHwnd = Hwnd
            WClass = String(256, " ")
            '取得該視窗的ClassName
            RetValue = GetClassName(Hwnd, WClass, 255)
            WClass = Left(WClass, InStr(WClass, vbNullChar) - 1)
            '取得視窗名稱的長度
            WText = String(GetWindowTextLength(Hwnd) + 1, Chr(0))
            '取得視窗名稱
            GetWindowText Hwnd, WText, Len(WText)
            '將資料依序寫到Sheet1工作表
            With Sheet1
                .Range("a1") = "Window Handle: " & Hwnd
                .Range("a2") = "Window Name: " & WText
                .Range("a3") = "Class Name: " & WClass
            End With
        End If
        '暫停一下,以便讓作業系統可以處理其它的事件。
        DoEvents
    '檢查[A4]儲存格是否為1, 是的話停止偵測
    Loop Until Sheet1.Range("a4") = 1
    '清空[a4]儲存格
    Sheet1.Range("a4") = ""
    '卸載Userform1
    Unload UserForm1
    End Sub

    下載範例檔案

    第二下載區

    下載範例檔案

    crdot.lin / Xuite日誌 / 回應(2) / 引用(0) / 好文轉寄
  • 回應