2011-01-06 131 views
4

我想從另一個應用程序捕獲SysListView32類(根據Spy ++)的數據。發送一個LVM_GETITEMCOUNT消息到這個句柄總是返回正確數量的項目。有一個子窗口是SysHeader32,它可能包含標題標題。無法使用LVM_GETITEMTEXT沒有目標應用程序崩潰在C + +

當我嘗試將LVM_GETITEMTEXT消息發送到目標應用程序時,它崩潰。此消息相關的代碼如下:

LPTSTR lpText; 
LVITEM* lvItem; 
lvItem = new LVITEM; 
lvItem->iSubItem = 0; 
lvItem->cchTextMax = 255; 
lvItem->pszText = lpText; 
//SysListViewHandle is the HWND to the SysListView32 'content' window 
SendMessage(SysListViewHandle, LVM_GETITEMTEXT, 1, (long)lvItem); 

列表中的每個「細胞」包含文字不超過50個字符,所以最大的文字大小應該罰款。

我希望從中獲取數據的列表結構有16列和可變數目的條目,超過5個,所以wParam應該沒問題。此列表使用WS_CHILDWINDOW,WS_VISIBLE,WS_TABSTOP,WS_HSCROLL,LVS_REPORT以及WS_EX_LEFT,WS_EX_LTRREADING,WS_EX_RIGHTSCROLLBAR,WS_EX_NOPARENTNOTIFY,WS_EX_CLIENTEDGE,LVS_GRIDLINES和LVS_FULLROWSELECT的擴展樣式。

UISpy能夠探測這個列表並找到其中的實際數據,所以我推測這將是在公園散步以獲取使用消息,但事實證明並非如此= /任何援助將不勝感激。

編輯:值得一提的崩潰錯誤日誌是: applicationname.exe 0x77582b87未處理的異常:0xC0000005:訪問衝突寫入位置0x01bc48b0。 調用堆棧位置COMCTL32.DLL 拆卸: 77582B87 MOV DWORD PTR [ESI],1

回答

3

你的問題是,由於列表視圖中的另一個進程存在,建議您分配的內存是不是在其他進程有效。我向你推薦一個article over at The Code Project,它提供了一個解決方案。

更重要的是,你似乎沒有爲lpText分配任何內存,所以它會在你自己的進程中失敗。

+0

謝謝,我會放棄這一點。 – Dororo 2011-01-06 15:08:43