2011-05-31 46 views
0

我正在努力使多個應用程序自動化。一個取決於另一個的輸出。 我遇到的問題是,當我嘗試訪問Treeview以獲取其他信息時,計數返回0.自動化第三方應用程序 - Systreeview32報告0項,但有節點

如果我以可視方式查看它,則會顯示相當多的項目。 如果我用Winspector查看它,它會報告0個可見項目。

我該如何收集這些信息?這是從幾個地方動態收集的信息。我無法訪問數據庫(這很好,但由於某些信息是動態的,所以不可能)。

這裏是輸出Winspector給我:

Properties for window: 0x00021806 

Class Name:   SysTreeView32 

Rectangle:   213, 180, 1038, 375 

Size:    825, 195 

Client Rectangle: 0, 0, 821, 191 

Client Size:  821, 191 

Styles:    WS_CHILD, 
        WS_VISIBLE, 
        WS_CLIPSIBLINGS, 
        WS_CLIPCHILDREN, 
        WS_TABSTOP, 

StylesEx:   WS_EX_NOPARENTNOTIFY, 
        WS_EX_CLIENTEDGE, 
        WS_EX_LEFT, 
        WS_EX_LTRREADING, 
        WS_EX_RIGHTSCROLLBAR 

ID:     0 

Properties:   Atom: #43288 0xFFFFFFFF (-1) 

Class specific:  Visible items:0, 
        Total items: 0 
        Window is Ansi 

Owner EXE   c:\csg\acsr\XBOI.EXE 

任何想法如何,我可以檢索的節點信息和項目? 我正在使用帶有sendmessage的API調用的VBA(訪問)。

這裏是我的代碼,我使用的測試項目數:

Sub testtree(mytv As Long) 

Dim z As Long 

Dim wClass As String, wText As String 

    Dim hWndTvw As Long 

    Dim hNode As Long 

    Dim varReturn As Long 

    Dim tvcount As Long 

    Dim hchild As Long 

    Dim j As Integer 

    hchild = mytv 

    wClass = Space(64) 

    j = GetClassName(hchild, wClass, 63) 

    wClass = Left(wClass, j) 

    wText = Space(256) 

    j = SendMessageS(hchild, WM_GETTEXT, 255, wText) 

    wText = Left(wText, j) 

    Debug.Print wText 

z = SendMessage(mytv, TVM_GETCOUNT, 0&, 0&) 

MsgBox z 

End Sub 

謝謝!

回答

1

您應該考慮使用TVM_GETNEXTITEM消息來枚舉樹的節點:首先使用TVGN_ROOT標誌調用它以獲取根節點,然後使用TVGN_CHILD和TVGN_NEXT標誌遍歷節點。此消息返回您的項目的句柄。

當您獲得該項目的句柄時,使用TVM_GETITEM消息來檢索您感興趣的關聯數據(例如項目的文本)。

您應該仔細閱讀2個鏈接,以獲取有關使用該消息的更多信息。

P.S.問題是,TVM_GETITEM消息使用帶指針的TVITEM結構,我不確定它會很容易從VBA中使用(不像C,C++,即使C#/ VB.NET更適合於IMO)。在最壞的情況下(例如,除非你知道關於VBA的一些事情,我不知道:上次我處理VBA的時間大約是2004年),你需要使用C++/ATL開發一個小的COM對象任務和重新分配&將其與您的軟件一起註冊。或者尋找第三方組件。

+0

Soonts,謝謝你的回覆!我會在今天進行測試。 – user778115 2011-06-05 17:02:00

+0

至於撰寫COM的問題,我不太熟悉。我已經在大部分時間成功地完成API函數的轉換,然後使用它與不同存儲空間中的程序進行通信。 – user778115 2011-06-05 17:03:49