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
?
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
?
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...