怎样查找QQ密码框的句柄并向其发送字符消息?请自己试过成功后再贴出这部分的源代码.我用的是QQ2008版.
解决方案 »
- 关于TAB控件的使用,非常着急
- 求 多媒体播放器准确播放的定时原理 !!!
- 如何实现ps上的浮动工具条
- 最好的视频教程网站,有很多学科的视频教程下载,千万别错过了。
- 一个转换问题,大虾帮忙一下,谢谢!
- 请那位朋友能用VC写一个能在ASP中调用的最简单的DLL?
- 如何监控WINDOWS服务器上的文件都有哪些用户的IP正在访问?
- 怎样在对话框中实现TOOL TIP的功能
- JavaScript如何响应ActiveX的事件Events?
- MFC的打印框架没有页面设置,自已做一页面设置对话窗,如何使自己的页面设置对话窗与MFC的打印设置合二为一个对话窗?
- Microsoft Jet 数据库引擎找不到对象
- 如何加资源描述文件
接人气,我同问,省得我自己开新帖了。
我已经找到了edit句柄。
sendmessage(QQhwnd,WM_SETTEXT,0,LPARAM(szBuffer));
不好使的。
用sendmessage(QQhwnd,WM_CHAR,'a',0);
发了数个消息把字符输入句柄
发了消息后确实有星号
然而一旦移动窗口*号全部消失?????
输入窗口什么都没有了,希望有志于此,或对这个感兴趣的讨论以下QQ登陆窗口实现机制
我的理解是QQ登陆框是对话框 套一个编辑窗口
但是为什么往里面发消息星号会消失
请高人指教如果 解释了我的疑惑小弟另开窗口加分
推荐楼主看看《windows核心编程》。
还有sendmessage(QQhwnd,WM_SETTEXT,0,LPARAM(szBuffer)); 这样是不可能拿到密码的,因为QQ中做过钩子了,劝你还是想别的方法把
我试过发消息WM_CLOSE,WM_CHAR,WM_SETTEXT给普通notepad文件
notepad文件可以收到消息并有相应的相应,
所以虽然我还没想过两个进程能不能共享数据空间
但是用发消息给其他进程来控制其它进程的方法是绝对可行的。
那是个edit
软键盘就可以输入,想想怎么模拟键盘操作吧
我一直没做钩子,我也一直没说钩子可以啊
(因为有人说QQ是通过钩子实现的那个对话框
所以我现在正在看钩子那部分win32api的知识看看到底,早就忘了;p)
我昨天是直接给密码框代表的子对话框的edit子子窗口发的消息
sendmessage(QQhwnd,WM_CHAR,'a',0);
可以显示一堆星号
但是一旦把窗口移动位置所有星号就突然消失。
我也不会输入回车,sendmessage(QQhwnd,WM_KEYDOWN,VK_RETURN,0)
在文本文件中好使,到了QQ输入框中就不行了;
把我的消息拦下了是吧:)
先用static CWnd* PASCAL FindWindow( LPCTSTR lpszClassName, LPCTSTR lpszWindowName );找到QQ密码框,lpszClassName设为NULL,lpszWindowName设为QQ密码框的标题然后将QQ密码框置为顶层BOOL SetWindowPos( HWND hWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags );再模拟键盘输入密码即可:
VOID keybd_event(
BYTE bVk, // virtual-key code
BYTE bScan, // hardware scan code
DWORD dwFlags, // function options
ULONG_PTR dwExtraInfo // additional keystroke data
);
那是个edit
软键盘就可以输入,想想怎么模拟键盘操作吧
-----------------------------------------------------------------------
你说的我觉得比较有道理比如发给登陆密码框子窗口edit 的WM_TEXT会被QQ设个钩子
截断那样的话,似乎自己程序这边再设钩子也没有用。
那么WM_CHAR呢似乎没被截断,我现在觉得模拟键盘操作还是一条思路。因为
不管输入的不管是什么总得有一种方法把键盘敲击的密码放进去
VOID keybd_event(
BYTE bVk, // virtual-key code
BYTE bScan, // hardware scan code
DWORD dwFlags, // function options
ULONG_PTR dwExtraInfo // additional keystroke data
);
-----------------------------------------------------------------------
试过不成功还没有 keybd_event连星号都属不进去,
如果你试过而且成功,请给源代码
。
http://topic.csdn.net/u/20080227/14/8bce0844-bd15-42f0-9cda-a343d5d6601b.html?seed=2111206245
{
//find the window
CWnd* pwnd = FindWindow(NULL, "QQ用户登录");
if(pwnd != NULL)
{
pwnd->SetWindowPos(&wndTop,50,50,335,240,SWP_SHOWWINDOW);
//enter password
EnterWord("weishide983823\n");
}
//CDialog::OnOK();
}void CTestInputDlg::EnterWord(CString szWord)
{
int nLen = szWord.GetLength();
//check if the Caps Lock key is down, if so , cancel it
unsigned char kbuf[256];
GetKeyboardState(kbuf);
if(kbuf[VK_CAPITAL]&1)
{
keybd_event(VK_CAPITAL,0,0,0);
keybd_event(VK_CAPITAL,0,KEYEVENTF_KEYUP,0);
}
//input the words
for(int i=0; i<nLen; i++)
{
char c = szWord.GetAt(i);
if(c>='a'&&c<='z')
{
keybd_event(c-'a'+65,0,0,0);
keybd_event(c-'a'+65,0,KEYEVENTF_KEYUP,0);
}
else if(c>='A'&&c<='Z')
{
keybd_event(VK_SHIFT,0,0,0);
keybd_event(c-'A'+65,0,0,0);
keybd_event(c-'A'+65,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0);
}
else if(c=='\n')
{
keybd_event(13,0,0,0);
keybd_event(13,0,KEYEVENTF_KEYUP,0);
}
else
{
keybd_event(c,0,0,0);
keybd_event(c,0,KEYEVENTF_KEYUP,0);
}
}
}
再来继续讨论:)
to lz 我是手工找的窗口句柄 暂时还没变成程序
密码编辑框就是用spy++套上密码框,然后查找找到之后发现是dialogue类型然后点击发现有子窗口是edit类型
我估计用findwindow 然后列举子窗口就可以找到edit
有点无奈有些人!
{
int nLen = szWord.GetLength();
//check if the Caps Lock key is down, if so , cancel it
unsigned char kbuf[256];
GetKeyboardState(kbuf);
if(kbuf[VK_CAPITAL]&1)
{
keybd_event(VK_CAPITAL,0,0,0);
keybd_event(VK_CAPITAL,0,KEYEVENTF_KEYUP,0);
}
//input the words
for(int i=0; i <nLen; i++)
{
char c = szWord.GetAt(i);
if(c>='a'&&c <='z')
{
keybd_event(c-'a'+65,0,0,0);
keybd_event(c-'a'+65,0,KEYEVENTF_KEYUP,0);
}
else if(c>='A'&&c <='Z')
{
keybd_event(VK_SHIFT,0,0,0);
keybd_event(c-'A'+65,0,0,0);
keybd_event(c-'A'+65,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0);
}
else if(c=='\n')
{
keybd_event(13,0,0,0);
keybd_event(13,0,KEYEVENTF_KEYUP,0);
}
else
{
keybd_event(c,0,0,0);
keybd_event(c,0,KEYEVENTF_KEYUP,0);
} }
} void CAboutDlg::OnOK()
{//enter password
EnterWord("a");
CDialog::OnOK();
}
---------------------------------------------------------------------
to magician 0303 谢谢你的代码这是我照你的代码改的实验的代码
通过keybd_event函数模拟键盘向QQ登陆输入edit窗口输入一个字母a
按理说正常结果应该和手工用键盘输入字母a相同由于setwindows的作用QQ父登陆对话框
移动到你指定的位置并且,
在登陆edit窗口产生一个代表输入过字母a的*号
现在我试验你这个程序就是除了移动窗口外没有任何代表已经输入过字母的输入出现
也就是相当于手工什么也没输入。能不能帮我看看是不是我还是什么地方没搞对,
我开始用得是win32试验后来改到mfc直接拷代码然后改还是没成功
你的成功了,请帮忙看看我的原因我也是QQ2007
----------------------------------------------------------------------
to 那些不试验也不说为什么不行就告诉人家这种方法不行的人,如果你们知道为什么不行
可以将原因如果原因大家都接受自然会给你分给你结帖的,如果只是简单告诉不行
那这种话谁都可以说,说一遍也就够了,我们知道有人说不行就够了,你们让我们还觉得有可能的人
试验以下好不好
然后等期中考完试再回来:)
QQ自动登录也不是用这招的
想截密码得通过其它方法,网上见过的有读内存的还有自己画个密码框
而是在本地已知密码帐号让QQ登陆不需要输入密码就可以登陆。基本上magician0303的代码已经可以实现了
就是不是很稳定,等期中考完试我再想一想是什么愿因。
KB_EVENT是可以,
我之前说不可以也是试过的,只是方法上有些问题,所以没有成功
刚才换了个方法试了下是可以.
不好意思
void CLchQQTestDlg::OnFindqqpwdedit()
{
// TODO: Add your control notification handler code here
CWnd* pWnd = FindWindow(_T("#32770"), _T("QQ用户登录"));
CEdit *pPwd = (CEdit *)pWnd->GetDlgItem(16038);
if(pPwd){
MessageBox("find pwdedit");
}
}
如果想找句柄,用findwindowex遍历试试
实际上,真正的QQ登录器并不需要启动登录框,不需要查找窗口句柄等一系列复杂的操作,而是调用ShellExecute函数,其中一个参数有号码和密码信息.
// TODO: Add extra initialization here
g_hMainHwnd = this->GetSafeHwnd();
#define UWM_FIND_A_CHILD_WND WM_USER+102 // 自定义消息:找到了一个子窗口BOOL CALLBACK EnumWndProc(HWND hWnd, LPARAM lParam)
{
//enum the child window,find passedit
if(hWnd)
{
::SendMessage(g_hMainHwnd, UWM_FIND_A_CHILD_WND, 0, (LPARAM)hWnd);
}
return TRUE;
}调用:
::EnumChildWindows(hCurrentWnd, EnumWndProc, wParam);遍历实现:
LRESULT CWatchIEDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
// 消息处理函数
if (message == UWM_FIND_A_CHILD_WND)
{
HWND hWnd = (HWND)lParam;
LONG style=::GetWindowLong(hWnd,GWL_STYLE); //得到STYLE char title[255];
::GetClassName(hWnd, title, 255); if(!strcmp(szPass, "Edit"))
{
::SendMessage(hWnd, WM_GETTEXT, 255, (LPARAM)title); //得到所有文本框内容
CString str(szPass);
//在下面加入操作得到的内容的语句
}
if(style&ES_PASSWORD) //是密码框
{
char szPass[255];
::SendMessage(hWnd, WM_GETTEXT, 255, (LPARAM)szPass); //得到PASS
CString str(szPass);
//::SendMessage(g_hMainHwnd, WM_SETTEXT, 0, (LPARAM)szPass); //显示
// 显示
//在下面加入操作得到的内容的语句
} } return CDialog::WindowProc(message, wParam, lParam);
} 以上代码可以遍历当前窗口所有的文本框, 但QQ2008的密码框经过处理, 用 WM_GETTEXT 得不到内容 希望有高手能给指点, 我想得到密码 纯属学习, 使用些代码非法盗QQ,与本人无关
QQ.com对此做了处理了