hur.cn - 华软网

 热门搜索

qq2009自动登陆失败. why? 急!急!急!

  作者:未知    来源:网络    更新时间:2011/1/10
qq2009自动登陆必需用模拟键盘的方式.


void SetPassWard(CString strPass)
{//模拟键盘消息,输入密码
for (int row = 0; row < strPass.GetLength(); row ++)
{
   char pChar = strPass.GetAt(row);
   SHORT ks = VkKeyScan(pChar);
   BYTE key = ks & 0xFF;
   keybd_event(key,0,0,0);
   keybd_event(key,0,KEYEVENTF_KEYUP,0);
}
}

void CTest_kbDlg::OnButton2() 
{
// TODO: Add your control notification handler code here
CWnd * h = FindWindow(NULL, "aaa" ); //mmm为对话框题目

if (h == NULL)
MessageBox("null");
else
MessageBox("not null");

CWnd *pwnd=h->GetWindow(GW_CHILD);//枚举对话框的所有子控件
char *buf=new char[512];
while(pwnd!=NULL)
    {
memset(buf,0, 512);
::GetClassName(pwnd->GetSafeHwnd(),buf,512);//获得枚举的控件是什么类型的,  
if(strcmp(buf, "Edit") == 0)
{
::SendMessage(pwnd->m_hWnd,WM_SETFOCUS,0,0);
Sleep(3000);
CString strPassward ="aaaaa";
SetPassWard(strPassward);
break;
}
pwnd = pwnd->GetNextWindow();
    }
}

然则模拟键盘没有成功.
SetPassWard()自身没问题, 如果setfocus()本窗口控件,然后SetPassWard()成功.
但现在是对其余窗口中的控件模拟键盘输入.
::SendMessage(pwnd->m_hWnd,WM_SETFOCUS,0,0); 好象是成功了.
但模拟键盘没有成功. 另一个程序aaa.exe中没有所有显示.
why?


---华软 网友回答---
你将::SendMessage(pwnd->m_hWnd,WM_SETFOCUS,0,0);
改成
SetCursorPos(pt.x,pt.y);
mouse_event(MOUSEEVENTF_LEFTDOWN,pt.x,pt.y,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,pt.x,pt.y,0,0);

或试试PostMessage,之前模拟飞信发消息,SendMessage前往都是0,换PostMessage成功
---华软网友回复---
引用 1 楼 gudufuyun 的回复:
你将::SendMessage(pwnd->m_hWnd,WM_SETFOCUS,0,0);
改成
SetCursorPos(pt.x,pt.y);
mouse_event(MOUSEEVENTF_LEFTDOWN,pt.x,pt.y,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,pt.x,pt.y,0,0);

或试试PostMessage,之前模拟飞……

---华软网友回复---
if(strcmp(buf, "Edit") == 0)
{
RECT rect1;
::GetWindowRect(pwnd->m_hWnd, &rect1);
CPoint pt;
pt.x = rect1.left;
pt.y = rect1.top;
SetCursorPos(pt.x,pt.y);
        mouse_event(MOUSEEVENTF_LEFTDOWN,pt.x,pt.y,0,0);
        mouse_event(MOUSEEVENTF_LEFTUP,pt.x,pt.y,0,0);
Sleep(3000);
CString strPassward ="aaaaa";
SetPassWard(strPassward);
break;
}

照旧不行, 位置不对,写在了vc编辑器中. 谁帮我试试,我帖出的能够直接试的.
尝试对象是一个对话框程序aaa.exe, 其中只有一个edit框.不需要尝试qq2009


---华软网友回复---
那位帮我尝试一下.
---华软网友回复---
增补一下,我是用vc6做的. 真是急呀.
---华软网友回复---
引用 3 楼 yyyyy_3 的回复:
if(strcmp(buf, "Edit") == 0)
{
RECT rect1;
::GetWindowRect(pwnd->m_hWnd, &amp;rect1);
CPoint pt;
pt.x = rect1.left;
pt.y = rect1.top;
SetCursorPos(pt.x,pt.y);
        mouse_event(MOUSEEVENTF……


pt.x = rect1.left+5;
pt.y = rect1.top+5;
密码框坐标稍微偏移一点      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。