我这样拿QQ发言栏的句柄为什么不成功
我做了一个QQ小秘的机器人程序,开启QQ后,QQ小秘能够根据对方的发言自动作出回复,比QQ自带的自动回复功能要强大一些。
测试的时候,把我现在的QQ昵称改成机器小秘,到另一台电脑上去和我的QQ聊天。
2007-06-27 22:11:24 黑夜里的玫瑰
你好
2007-06-27 22:11:28 机器小秘
我挺好
2007-06-27 22:11:30 黑夜里的玫瑰
你好
2007-06-27 22:11:32 机器小秘
见到你很高兴
2007-06-27 22:11:36 黑夜里的玫瑰
你是谁啊
2007-06-27 22:11:40 机器小秘
我是主人的机器人小秘啊
2007-06-27 22:11:44 黑夜里的玫瑰
到底是谁
2007-06-27 22:11:46 机器小秘
我是机器人小秘,不过我就不告诉你我是谁
2007-06-27 22:11:49 黑夜里的玫瑰
呵呵
2007-06-27 22:11:51 机器小秘
这孩子是不是傻了?一副痴呆的傻笑样子
2007-06-27 22:11:53 黑夜里的玫瑰
呵呵
2007-06-27 22:11:57 机器小秘
呵呵
2007-06-27 22:12:03 黑夜里的玫瑰
你叫什么阿
2007-06-27 22:12:07 机器小秘
怎么能冒失地问一个淑女的名字呢
2007-06-27 22:12:14 黑夜里的玫瑰
你叫什么名字
2007-06-27 22:12:16 机器小秘
就不告诉你我的名字
2007-06-27 22:12:19 黑夜里的玫瑰
你多大啦
2007-06-27 22:12:27 机器小秘
讨厌,你怎么随便问女孩子的年龄呢
2007-06-27 22:12:32 黑夜里的玫瑰
你多大啦
2007-06-27 22:12:35 机器小秘
我也记不清了,好像从盘古开天辟地,或者上帝说要有光的时候,我就在一边看了
2007-06-27 22:12:44 黑夜里的玫瑰
靠
2007-06-27 22:12:47 机器小秘
哎呀,讨厌,居然说脏话!
2007-06-27 22:12:54 黑夜里的玫瑰
我靠,这都行
2007-06-27 22:12:56 机器小秘
您刚才的发言我不懂,如果您愿意,可以教给我说话,发送“怎样教你说话”就知道怎样做。
2007-06-27 22:13:03 黑夜里的玫瑰
我靠
2007-06-27 22:13:05 机器小秘
别 kao 来 kao 去的。
2007-06-27 22:13:09 黑夜里的玫瑰
考
2007-06-27 22:13:10 机器小秘
别 kao 来 kao 去的。
2007-06-27 22:13:16 黑夜里的玫瑰
妈的
2007-06-27 22:13:17 机器小秘
说你自己呢?
2007-06-27 22:13:25 黑夜里的玫瑰
猫扑
2007-06-27 22:13:27 机器小秘
一个很有名的论坛呢
2007-06-27 22:13:35 黑夜里的玫瑰
屎
2007-06-27 22:13:38 机器小秘
好臭
2007-06-27 22:13:43 黑夜里的玫瑰
狗屎
2007-06-27 22:13:45 机器小秘
好臭
2007-06-27 22:13:49 黑夜里的玫瑰
大便
2007-06-27 22:13:52 机器小秘
你吃
2007-06-27 22:14:01 黑夜里的玫瑰
我晕
2007-06-27 22:14:05 机器小秘
倒了~倒了
2007-06-27 22:14:21 黑夜里的玫瑰
你丫的找抽
2007-06-27 22:14:23 机器小秘
就你,小样,放马过来
2007-06-27 22:14:29 黑夜里的玫瑰
滚
2007-06-27 22:14:31 机器小秘
你滚
2007-06-27 22:14:39 黑夜里的玫瑰
你是难得还是女的?
2007-06-27 22:14:41 机器小秘
您刚才的发言我不懂,如果您愿意,可以教给我说话,发送“怎样教你说话”就知道怎样做。
2007-06-27 22:14:46 黑夜里的玫瑰
你是男的还是女的?
2007-06-27 22:14:47 机器小秘
我是大美女呢
2007-06-27 22:14:56 黑夜里的玫瑰
你是MM吗?
2007-06-27 22:14:57 机器小秘
难道你见过男小秘?
2007-06-27 22:15:05 黑夜里的玫瑰
该不会是人妖吧
2007-06-27 22:15:08 机器小秘
啊,你是人妖?
2007-06-27 22:15:12 黑夜里的玫瑰
靠
2007-06-27 22:15:15 机器小秘
小朋友,你妈妈没有教过你吗?对淑女说话要讲文明。
2007-06-27 22:15:21 黑夜里的玫瑰
你好可爱啊
2007-06-27 22:15:23 机器小秘
你也好
2007-06-27 22:15:32 黑夜里的玫瑰
好可爱?
2007-06-27 22:15:34 机器小秘
我是可爱的小宝宝
2007-06-27 22:15:39 黑夜里的玫瑰
你大爷的
2007-06-27 22:15:41 机器小秘
一边去
2007-06-27 22:15:50 黑夜里的玫瑰
你有rpwt
2007-06-27 22:15:51 机器小秘
你的rp有wt吧
2007-06-27 22:16:00 黑夜里的玫瑰
你是猪吗?
2007-06-27 22:16:06 机器小秘
你才是呢
************************************************************
我用下面的代码得到了QQ聊天窗口的句柄赋值给变量Pro_hwnd。
Dim strName As String * 255
Dim className As String * 255
'寻找第一个同级窗口
Pro_hwnd = GetWindow(hwnd, GW_HWNDFIRST)
'当Pro_hwnd不等于零
Do While Pro_hwnd <> 0
'获得窗口标题
GetWindowText Pro_hwnd, strName, 255
GetClassName Pro_hwnd, className, 255
'如果标题包含 "发送消息 "且类名为 #32770
If (InStr(strName, name) > 0) And (InStr(className, "#32770 ") > 0) Then
'使主窗口在任务栏闪烁
FlashWindow Pro_hwnd, -1
Exit Function
End If
Pro_hwnd = GetWindow(Pro_hwnd, GW_HWNDNEXT)
Loop
QQ的聊天窗体内套着一个类名是#32770的窗体,#32770内套着AfxWnd42这个窗体,AfxWnd42内套着信息和发送信息这两个窗体。我依次找它们。
在Pro_hwnd中找到发送消息窗体的第一个子窗体,类名为 #32770
Child_Hwnd = FindWindowEx(Pro_hwnd, 0, "#32770 ", " ")
再找类名为 AfxWnd42的窗口句柄
Afx_Hwnd = FindWindowEx(Child_Hwnd, 0, "AfxWnd42 ", " ")
到这里还正确,但再找输入框的窗口句柄就返回0了。
Edit_Hwnd = FindWindowEx(Afx_Hwnd, 0, "RichEdit20A ", " ")
我用spy看发言栏的类名明明就是RichEdit20A啊!用spy可以看到句柄。但用上面那条语句却拿不到。怎样才能拿到呢?
临时在程序上加了spy代码,可以用程序上的spy光标拖拽到QQ发言栏得到句柄。也可以凑合着用,算是测试版吧,可以到这里下载看看。
http://219.148.115.72:1006/qqxm.rar
[解决办法]
因为有QQ聊天对话框里很多AfxWnd42类,你只找到第一个,而第一个AfxWnd42类下层没有RichEdit20A,你这样查找试试:
Afx_Hwnd = FindWindowEx(Child_Hwnd, 0, "AfxWnd42 ", " ")
' ' '到这里还正确,但再找输入框的窗口句柄就返回0了。
Edit_Hwnd = FindWindowEx(Afx_Hwnd, 0, "RichEdit20A ", " ")
dim i as integer
do while edit_hwnd=0 and i <100
Afx_Hwnd = FindWindowEx(Child_Hwnd, Afx_Hwnd, "AfxWnd42 ", " ")
Edit_Hwnd = FindWindowEx(Afx_Hwnd, 0, "RichEdit20A ", " ")
i=i+1
loop
debug.print hex(edit_hwnd)