VC獲取其他程序ListCtrl內容

2021-06-28 02:43:46 字數 3719 閱讀 4865

vc讀寫其他程序listctrl資料到本程序的例項,下面用windows任務管理器來做測試:

1、捕獲視窗控制代碼:

用spy++可以看到如下父子視窗關係:

新增listctrl,設定style / report、關聯控制項變數m_listctrl,再新增乙個按鈕,如下圖:

2、相關**:

view plain

copy to clipboard

print?

bool ctestdlg::oninitdialog()  

view plain

copy to clipboard

print

?

void ctestdlg::onbtnread()   

int count = (int)::sendmessage(hlistview,lvm_getitemcount,0,0);  

int i,nitem;  

// 獲取listview行數

cstring strtemp;  

strtemp.format("總共%d行記錄",count);  

messagebox(strtemp);  

cstring str1="";  

cstring str2="";  

cstring str3="";  

cstring str4="";  

dword   pid;  

handle  process;  

lvitem  lvi, *_lvi;  

char    firstitem[512], secitem[512],thirditem[512],fourthitem[512];  

char    *_firstitem, *_secitem,*_thirditem,*_fourthitem;  

memset(firstitem,0,512);  

memset(secitem,0,512);  

memset(thirditem,0,512);  

memset(fourthitem,0,512);  

// 獲取視窗pid、開啟程序

getwindowthreadprocessid(hlistview, &pid);  

process=openprocess(process_vm_operation|process_vm_read|  

process_vm_write|process_query_information, false, pid);  

// 申請記憶體空間

_lvi=(lvitem*)virtualallocex(process, null, sizeof(lvitem),mem_commit, page_readwrite);  

_firstitem=(char*)virtualallocex(process, null, 512, mem_commit,page_readwrite);  

_secitem  =(char*)virtualallocex(process, null, 512, mem_commit,page_readwrite);  

_thirditem=(char*)virtualallocex(process, null, 512, mem_commit,page_readwrite);  

_fourthitem=(char*)virtualallocex(process,null, 512, mem_commit,page_readwrite);  

lvi.cchtextmax=512;  

// 這裡應該遞減、保持與任務管理器一樣順序

for(i=count; i>=0; i--)  

// 釋放記憶體空間

virtualfreeex(process, _lvi,        0, mem_release);  

virtualfreeex(process, _firstitem,  0, mem_release);  

virtualfreeex(process, _secitem,    0, mem_release);  

virtualfreeex(process, _thirditem,  0, mem_release);  

virtualfreeex(process, _fourthitem, 0, mem_release);  

}  

讀取檔案列表:

view plain

copy to clipboard

print

?

void ctestdlg::onbtnreadfile()   

// 新增上面的列表頭

m_listctrl.insertcolumn(0,"檔名稱",null,80, -1);  

m_listctrl.insertcolumn(1,"大小",null,60,-1);  

m_listctrl.insertcolumn(2,"型別",null,100,-1);  

m_listctrl.insertcolumn(3,"修改日期",null,120,-1);  

// 查詢視窗控制代碼

hwnd    hwnd,hlistview;  

hwnd=::findwindow(null,_t("c:\\documents and settings\\koma\\桌面\\test"));     

hwnd=::findwindowex(hwnd,0,_t("shelldll_defview"),0);  

hwnd=::findwindowex(hwnd,0,_t("duiviewwndclassname"),0);  

hwnd=::findwindowex(hwnd,0,_t("directuihwnd"),0);  

hwnd=::findwindowex(hwnd,0,_t("ctrlnotifysink"),0);  

hlistview=::findwindowex(hwnd,0,_t("syslistview32"),null);  

if(!hlistview)  

......  

}  

3、程式執行效果:

4、程式不足:

a、在獲取任務管理器「程序」標籤內容時,因為有些列表項沒有顯示、即它的isubitem項被設定隱藏(設定為0寬度即可),所以需要在「檢視」/ 「選擇列」開啟相關選項,不然你可能會覺得程式讀錯。(如果切換成「使用者」標籤則不會.)

(比如檔案列表試圖裡,檔名是可以編輯的,獲取這個又沒有問題,這個編輯區域有點像個指定大小的editbox,不知道這程式是如何重寫的clistctrl類,或是那個開源的專案,見過或用過的友友請說聲哈!)

這種可編輯的listctrl內容該怎麼獲取,哪位兄弟知道的,麻煩你有空請告訴我一聲吧!

VC獲取其他程序ListCtrl內容

vc讀寫其他程序listctrl資料到本程序的例項,下面用windows任務管理器來做測試 1 捕獲視窗控制代碼 用spy 可以看到如下父子視窗關係 新增listctrl,設定style report 關聯控制項變數m listctrl,再新增乙個按鈕,如下圖 4 程式不足 a 在獲取任務管理器 程...

獲取其他程式的資訊 VC實現

介紹 最近正試著從其他程式的listview控制項中獲取資訊,因為需要傳遞乙個指標以便存放取得的字串,但windows使用的是虛擬記憶體,指標是不允許跨程序訪問的。windows是這樣通過虛擬記憶體來管理分配給所有應用程式的記憶體的 它讓程式認為自己擁有2gb的記憶體空間可用,它也通過保護來避免程式...

獲取其他程序中StatusBar的文字

說明 window2000 delphi6除錯通過 設計 zswang 支援 wjhu111 21 日期 2005 02 22 uses mctrl function getstatusbartext mhandle thandle string var vbuffer array 0.1000 o...