引言: 早在很久以前,当我还是一个菜菜鸟的时候(当然现在也是一个菜鸟,相比以前还是有了一点提高),就想过要开发一个QQ自动回复工具。意思就是能把别人发过来的消息通过自己开发的程序进行处理并回复。我当时翻阅了很多资料,不能通过协议,也没有用过winAPI之类的东西,所以无从下手。这个问题一直遗留至今,当然已经找到了一个相对合适的解决方案。在公司不能用QQ,只能用内部的即时通讯工具RTX(也是腾讯的一款即时通讯工具)。通过它我利用业余时间开发了一款可以自动回复的辅助工具了。同时也将这种方式移植到了别的通讯工具上,屡试不爽!作为一个宅男,淘宝是必不可少的了。所以这个阿里旺旺又勾起了我的兴趣!
因为这篇文章是打算做一个开发记录的方式,所以工具是否能开发成功也还是未知数!嘿嘿.... 首先讲一下大体实现思路,因为阿里旺旺不提供获取消息和发送消息的接口,所以我们只能通过winAPI进行获取消息和发送消息。下面是程序方面的处理流程图:(图做的比较烂,请包涵)
可能需要用到的Win32API:
//用于获取窗口名和类名
[DllImport("user32.dll")]
public static extern int GetWindowText(IntPtr hWnd, StringBuilder SbText, int size);
[DllImport("user32.dll")]
public static extern uint RealGetWindowClass(IntPtr hWnd, StringBuilder pszType, uint cchType);
//获取指定窗口类名
[DllImport("user32.dll")]
public static extern int GetClassName(IntPtr hWnd, StringBuilder buf, int nMaxCount);
//找窗体控件
[DllImport("user32.dll")]
public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
//这个用处大,通过发送不同的消息来做不同的事
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, StringBuilder lParam);
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
[DllImport("user32.dll")]
public static extern bool PostMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
既然需要用到的WinAPI已经准备好了现在就可以开始实操了!首先打开SPY++,再打开一个旺旺的聊天窗口。用spy++搜索旺旺的窗口同步定位。可以看到 消息窗体的类名为:StandardFrame 消息接收框的类名为:Internet Explorer_Server 发送消息的类名为:RichEditComponent 发送按钮由于是自绘按钮,以后再进行处理。这里还得费功夫的是这个消息接收框,它这里是一个浏览器控件,我们必需得通过其它方法来获取里面的内容。至于怎么获取请听下回分解。
查看原文:http://www.likefeng.com/post/1031.html