向qq聊天窗口的文本框写入字符的方法解决方案

向qq聊天窗口的文本框写入字符的方法
由于以前qq消息尾巴病毒的流行,腾讯使用了一些技术,使得现在的qq聊天窗口屏蔽了wm_settext消息

这样的话,要利用程序自动向qq聊天窗口发送文本就比较难了。不过经过测试发现,wm_char消息没有被qq屏蔽。因此,可以使用这个消息把字符发送到聊天窗口。不过要注意的是,发送中文的话,要发送2次,也就是高低2个字节,不然会乱码的。

Declare   Function   SendMessage   Lib   "user32 "   Alias   "SendMessageA "   (ByVal   hwnd   As   Long,   ByVal   wMsg   As   Long,   ByVal   wParam   As   Long,   lParam   As   Any)   As   Long
Declare   Function   FindWindowEx   Lib   "user32 "   Alias   "FindWindowExA "   (ByVal   hWnd1   As   Long,   ByVal   hWnd2   As   Long,   ByVal   lpsz1   As   String,   ByVal   lpsz2   As   String)   As   Long
Declare   Function   GetWindowText   Lib   "user32 "   Alias   "GetWindowTextA "   (ByVal   hwnd   As   Long,   ByVal   lpString   As   String,   ByVal   cch   As   Long)   As   Long
Declare   Function   PostMessage   Lib   "user32 "   Alias   "PostMessageA "   (ByVal   hwnd   As   Long,   ByVal   wMsg   As   Long,   ByVal   wParam   As   Long,   lParam   As   Any)   As   Long
Declare   Function   SetWindowText   Lib   "user32 "   Alias   "SetWindowTextA "   (ByVal   hwnd   As   Long,   ByVal   lpString   As   String)   As   Long

Public   Const   WM_CHAR   =   &H102
Public   Const   WM_SETTEXT   =   &HC
Public   Const   WM_LBUTTONDOWN   =   &H201
Public   Const   WM_LBUTTONUP   =   &H202
Public   Const   BM_CLICK   =   &HF5
Public   Const   WM_GETTEXT   =   &HD


Sub   setQQText(ByVal   fhwnd   As   Long,   ByVal   mystr   As   String)

'   向聊天窗口的文本框写入消息。fhwnd   是那个文本框的句柄,mystr   是你要写入的消息
Dim   mydata()   As   Byte,   i   As   Long,   tmp_k   As   Long
i   =   0
mydata   =   StrConv(mystr,   vbFromUnicode)
tmp_k   =   UBound(mydata)
While   i   <=   tmp_k
            If   mydata(i)   <   128   Then
                    PostMessage   fhwnd,   WM_CHAR,   mydata(i),   0&
                    i   =   i   +   1
            Else
                    PostMessage   fhwnd,   WM_CHAR,   mydata(i),   0&
                    PostMessage   fhwnd,   WM_CHAR,   mydata(i   +   1),   0&
                    i   =   i   +   2
            End   If
Wend
End   Sub


顺便再附上几段代码,是关于如何找到qq那个文本框的句柄的。

Function   MyFindWindowEx(wname   As   String,   fhwnd   As   Long,   temphnd   As   Long)   As   Long
Dim   mystr   As   String   *   255