How to get the password text in a text with password property from another process using C++ - 用C++如何从不同进程获取密码框文本
CString str;
CString strTemp; char buf[1024];
char cClassName[1024]; LONG lWndID;
CString strText; ::GetClassName(hwnd,(LPSTR)&cClassName,1024);
strTemp.Format("%s",cClassName);
if("Edit" == strTemp) { LONG lngWndStype; lngWndStype = GetWindowLong(hwnd,GWL_STYLE);
if(lngWndStype & ES_PASSWORD) { //char cTemp;
int intPasswordChar; //发送:EM_GETPASSWORDCHAR 一定要用:SendMessage,用PostMessage返回值不正确
intPasswordChar = SendMessage(hwnd,EM_GETPASSWORDCHAR,0,0);
//不同进程发送:EM_SETPASSWORDCHAR消息,一定用PostMessage,不能用SendMessage,否则无效
PostMessage(hwnd,EM_SETPASSWORDCHAR,0,0);
UpdateWindow(hwnd); //MessageBox(NULL,"Send OK","EM_SETPASSWORDCHAR",MB_OK);
Sleep (100);//停止100毫秒,这点很重要
//::SendMessage(hwnd,WM_GETTEXT,(WPARAM)1024,(LPARAM)strText.GetBuffer(0));
::SendMessage(hwnd,WM_GETTEXT,(WPARAM)1024,(LPARAM)buf);
//不同进程发送:EM_SETPASSWORDCHAR消息,一定用PostMessage,不能用SendMessage,否则无效
PostMessage(hwnd,EM_SETPASSWORDCHAR,intPasswordChar,0);
} else { //::SendMessage(hwnd,WM_GETTEXT,(WPARAM)1024,(LPARAM)strText.GetBuffer(0));
::SendMessage(hwnd,WM_GETTEXT,(WPARAM)1024,(LPARAM)buf); } }