typedef
struct tagwndinfo
wndinfo, *lpwndinfo;
bool callback myenumproc(hwnd hwnd,lparam lparam)//列舉所有程序
if (iswindowvisible(hwnd)) // 當前視窗是否可見
}return
true;
}hwnd getprocesshwnd(dword proccessid)
void getprocessinfo(cstring processname)
processname.makelower();
bool clearprocess = false;
//如果控制代碼有效 則一直獲取下乙個控制代碼迴圈下去
while (process32next(hsnapshot,&pe))
;if(!sctmp.compare(processname))
}
::closehandle(hsnapshot);
}
上面的這一段**可以完美獲取程式的主視窗控制代碼和子視窗控制代碼!再一次強調不是程序控制代碼哦!
//獲取簡單視窗的內容
getwindowtext(hwnd,strtext.getbuffer(256), 256);
比如獲取乙個treeview的內容,就比較麻煩。總體思路就是通過發訊息獲取。
//從快照程序中獲取該程序的pid(即任務管理器中的pid)
dword dwprocessid = pe.th32processid;
//獲取第乙個可視視窗的控制代碼
hwnd hwnd = getprocesshwnd(dwprocessid);
//獲取程序的控制代碼
handle hprocess = ::openprocess(process_vm_operation |process_vm_read | process_vm_write |process_query_information,false,dwprocessid);
//----------------
//給_lvi,_item分配程序級的虛擬記憶體空間
tvitem tvi, *_tvi;
char *_item;
char item[256];
ctreectrl* ptreectrl = ((ctreectrl*)cwnd::fromhandle((hwnd)hwnd));
int nitemnum = ptreectrl->getcount();
htreeitem testitem1;
testitem1=ptreectrl->getrootitem();
long ret = (long)testitem1;
_tvi=(tvitem*)virtualallocex(hprocess, null, sizeof(tvitem), mem_commit, page_readwrite);
_item=(char*)virtualallocex(hprocess, null, 256, mem_commit, page_readwrite);
tvi.cchtextmax=256;
tvi.hitem=(htreeitem)ret;
tvi.mask=tvif_text;
tvi.psztext=_item;
//把_lvi 寫入程序
writeprocessmemory(hprocess, _tvi, &tvi, sizeof(tvitem), null);
//發訊息得到資料
::sendmessage(hwnd, tvm_getitem, 0 , (lparam)_tvi);
//從程序中讀出資料
bool bread = readprocessmemory(hprocess, _item, item, 256, null);
char filestr[256];
//copy data
memcpy(filestr,item,256);
strtitle.format("%s",filestr);
//free memory
virtualfreeex(hprocess, _tvi, 0, mem_release);
virtualfreeex(hprocess, _item, 0, mem_release);
執行這段**的前提是已經獲取了該程式程序的id和對應視窗的控制代碼。網上也有很多這樣的內容,也可檢視其它文章,對照理解。 讀取其他程序Richedit控制項的內容
和edit控制項不同的是,richedit支援rtf格式,採用wm getwindowtext訊息只能得到文字資訊,因此如果需要獲取完整的rtf檔案,則需要處理em streamout訊息,將控制項中的內容寫出。有些控制項對em streamout進行了過濾,則需要進一步處理em streamin來...
虛擬記憶體獲取其他程序資料的問題
想在自己程序中獲取其他程序裡的樹形控制項 systreeview32 的內容。比如使用tvm getitem訊息獲取某一節點資料。思路很簡單,由於是將訊息發給另乙個程序來處理,傳遞的指標的值應該是相對於目標程序位址空間中的,所以需要把在目標程序中申請空間。virtualallocex m hproc...
VC獲取其他程序ListCtrl內容
vc讀寫其他程序listctrl資料到本程序的例項,下面用windows任務管理器來做測試 1 捕獲視窗控制代碼 用spy 可以看到如下父子視窗關係 新增listctrl,設定style report 關聯控制項變數m listctrl,再新增乙個按鈕,如下圖 4 程式不足 a 在獲取任務管理器 程...