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

2021-04-20 03:41:36 字數 2815 閱讀 9188

介紹

最近正試著從其他程式的listview控制項中獲取資訊,因為需要傳遞乙個指標以便存放取得的字串,但windows使用的是虛擬記憶體,指標是不允許跨程序訪問的。

windows是這樣通過虛擬記憶體來管理分配給所有應用程式的記憶體的:它讓程式認為自己擁有2gb的記憶體空間可用,它也通過保護來避免程式互相占用記憶體.這樣當乙個程式有問題時,不會影響到其他程式。

寫了一些**之後,我認識到我的指標是不允許的,所以無法工作。通過幾個小時在msdn上的發掘,我找到了這幾個函式virtualallocex(),virtualfreeex(),writeprocessmemory()andreadprocessmemory().

有了這些函式的武裝,我修改了我的**:

#define win32_lean_and_mean

#include

<

stdio.h

>

#include

<

windows.h

>

#include

<

commctrl.h

>

int main(void)

return0;}

就象我之前所說的,這無法工作,指向lvi,item和subitem的指標在跨程序訪問時都出現了問題,如何解決呢?通過

writeprocessmemory()和readprocessmemory()來使用其他程式的記憶體,在其他程序內實現lvm_getitemtext

並返回。從另外的程式內的listview控制項讀取items真象乙個黑客。

首先,我們得到listview的程序,象下面這樣:

unsigned

long pid;

handle process;

getwindowthreadprocessid(listview, &pid);

process=openprocess(process_vm_operation|process_vm_read|

process_vm_write|process_query_information, false, pid);

然後我們建立三個指標lvitem *_lvi,char *_item, andchar *_subitem 用virtualallocex()把它們分配到

另外程式的虛擬記憶體空間裡。

lvitem *_lvi=(lvitem*)virtualallocex(process, null, sizeof(lvitem),

mem_commit, page_readwrite);

char *_item=(char*)virtualallocex(process, null, 512, mem_commit,

page_readwrite);

char *_subitem=(char*)virtualallocex(process, null, 512, mem_commit,

page_readwrite);

現在,我們用lvi.psztext指向_item並且用writememoryprocess()

把它的記憶體拷貝到_lvi

lvi.psztext=_item;

writeprocessmemory(process, _lvi, &lvi, sizeof(lvitem), null);

現在我們有了乙個lvitem

指標它在另外乙個程式的虛擬記憶體空間是可以使用的,我們可以傳送lvm_getitemtext訊息給

listvie並且拷貝_item的文字到item中,這樣我們就能在自己的程式裡讀取它。

sendmessage(hwnd, lvm_getitemtext, (wparam)i, (lparam)_lvi);

readprocessmemory(process, _item, item, max, null);

在subitem中重複,然後釋放我在其他程式裡分配的記憶體:

virtualfreeex(process, _lvi, 0, mem_release);

virtualfreeex(process, _item, 0, mem_release);

virtualfreeex(process, _subitem, 0, mem_release);

哈!一切ok,

#define win32_lean_and_mean

#include

<

stdio.h

>

#include

<

windows.h

>

#include

<

commctrl.h

>

int main(void)

virtualfreeex(process, _lvi, 0, mem_release);

virtualfreeex(process, _item, 0, mem_release);

virtualfreeex(process, _subitem, 0, mem_release);

return

0;}

android獲取其他應用資訊

adb shell dumpsys activity activities 先啟動需要的查詢的apk,再敲入以上命令,在stack 1下查詢cmp 其後的內容為包名 mainactivity 注 dumpsys activity可以檢視系統的所有的活動,包括服務 廣播等,加上activities則只...

MFC實現 獲取其他應用程式視窗資訊

最近上網時看到有獲取qq號的方法,自己實現了下,沒能獲取qq密碼 聽說從qq2009後就很難獲取了 但能獲取一般應用程式的視窗資訊。下面給出實現的具體細節。要使用到幾個api函式findwindow,findwindowex,windowfrompoint,sendmessage,getwindow...

VC獲取其他程序ListCtrl內容

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