讀取其他程序的資料

2021-07-16 21:31:13 字數 2305 閱讀 1318

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 在獲取任務管理器 程...