如何做一个类似QQ尾巴的程序?寻找思路。

look4sword 2005-06-06 12:29:31
当然,我不是做QQ尾巴。
我想做个消息加密程序,在QQ点击发送的时候先将文本加密再发送出去。
难的是如何能在点击发送的时候不发送而是先做加密文本的动作?
请高手帮忙!谢谢!
...全文
250 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
DragonCity1 2005-08-20
  • 打赏
  • 举报
回复
mark
yujin19821230 2005-06-19
  • 打赏
  • 举报
回复
http://www.qqday.com/Article/qqmiji/fangfanjiqiao/200505/134.html
里面说的很详细
自己研究吧
province_ 2005-06-17
  • 打赏
  • 举报
回复
你是通过定时检测的,但我认为你为自建的BUTTON写个WNDPROC来判断状态效率更高。
当然为了能处理接收的数据,我想你是否可以为文本框也写个消息处理过程,不过我对RICHEDIT没试过,不知道与RTF格式是否有涉及。
你的想法很好啊,很有启发。学习!
DawnPine 2005-06-10
  • 打赏
  • 举报
回复
帮顶
zdcwin 2005-06-10
  • 打赏
  • 举报
回复
gz,up
look4sword 2005-06-10
  • 打赏
  • 举报
回复
不是QQ的句柄,是聊天对话框的句柄。而且我这不是QQ,是腾讯通RTX。

'取得当前活动窗口的句柄
QQHwnd = GetForegroundWindow
'得到窗体caption
Dim S As String
S = String(80, 0)
Call GetWindowText(QQHwnd, S, 80)
S = Left(S, InStr(S, Chr(0)) - 1)
'RTX聊天窗口的格式是“与 XXX(1001) 对话中”,所以以后三个字判断是不是RTX聊天窗口
If Right(S, 3) = "对话中" Then
…………
x1234521 2005-06-10
  • 打赏
  • 举报
回复
问你下,楼主
你是如何得到QQ的句柄的??没看明白
GetForegroundWindow是得到程序自身的句柄,你这里用他取QQ的句柄?不明白,
请上来说说
imur05 2005-06-09
  • 打赏
  • 举报
回复
感觉楼主是一个高人!
look4sword(觅剑) 大侠:方不方便留个QQ,请教一下?
我的QQ:75230034
谢谢先!
look4sword 2005-06-09
  • 打赏
  • 举报
回复
把我的关键代码拿出来,高手看到就指点一下,没弄过的可以借鉴一下:
相关API请自行写上:

'-------------------------------
'腾讯通RTX消息加密外挂 关键代码|
'-------------------------------
Private Sub Timer1_Timer()
On Error GoTo A:
Dim QQHwnd As Long, PHwnd As Long, RHwnd As Long, SHwnd As Long
'取得当前活动窗口的句柄
QQHwnd = GetForegroundWindow
'得到窗体caption
Dim S As String
S = String(80, 0)
Call GetWindowText(QQHwnd, S, 80)
S = Left(S, InStr(S, Chr(0)) - 1)
'RTX聊天窗口的格式是“与 XXX(1001) 对话中”,所以以后三个字判断是不是RTX聊天窗口
If Right(S, 3) = "对话中" Then
RHwnd = FindWindowEx(QQHwnd, 0, "Button", "密送")
'如果按钮已存在,则不需创建
If RHwnd = 0 Then
Dim gButtonHwnd As Long
Dim ret As RECT, FrmWidth As Long, Frmheight As Long
'取窗体的长宽,以定位创建的按钮
GetWindowRect QQHwnd, ret
FrmWidth = ret.Right - ret.Left
Frmheight = ret.Bottom - ret.Top
'创建一个“密送”按钮
gButtonHwnd& = CreateWindowEx(0&, "Button", "密送", WS_CHILD, FrmWidth - 388, Frmheight - 66, 70, 25, QQHwnd, 0&, App.hInstance, 0&)
Call ShowWindow(gButtonHwnd&, SW_SHOWNORMAL)
End If

'判断是否点击,如果点击,返回8
Dim A As Long
A = SendMessage(RHwnd, BM_GETSTATE, 0, 0)
If A = 8 Then
'如果点击了,则取发言框和发送按钮的句柄
PHwnd = FindWindowEx(QQHwnd, 0, "RichEdit20A", vbNullString)
SHwnd = FindWindowEx(QQHwnd, 0, "Button", "发送(&S)")
'获取文本长度
hLength = SendMessage(PHwnd, WM_GETTEXTLENGTH, 0, 0)
If hLength = 0 Then
MsgBox "对不起,不能发送空消息!", vbExclamation + vbSystemModal
Exit Sub
End If
'设置缓冲区
ReDim bArr(hLength + 1) As Byte, bArr2(hLength - 1) As Byte
Call RtlMoveMemory(bArr(0), hLength, 2)
'发送 WM_GETTEXT 消息
Call SendMessage(PHwnd, WM_GETTEXT, hLength + 1, bArr(0))
Call RtlMoveMemory(bArr2(0), bArr(0), hLength)
'得到发言框的文本
Dim GetText As String
GetText = StrConv(bArr2, vbUnicode)
'将得到的文本处理后再加入文本框,这里的Encode()是我自定义的加密函数
SendMessage PHwnd, WM_SETTEXT, 0, ByVal "M383E1eQT2l2yVNZ" & Encode(GetText) & "D0tQxR7ZxRgSV2A2" '前后两串字符串为了解密时分割用
SendMessage SHwnd, BM_CLICK, 0, 0 '点击发送按钮
End If
End If

'监视收到的消息
Dim ReHwnd
ReHwnd = FindWindowEx(QQHwnd, 0, "RichEdit20A", vbNullString)
Do While ReHwnd > 0
ReHwnd = FindWindowEx(QQHwnd, ReHwnd, "RichEdit20A", vbNullString)
'获取文本长度
ReLength = SendMessage(ReHwnd, WM_GETTEXTLENGTH, 0, 0)
'RLength是上次解密时消息的长度,和现在取得的消息对比,如果大于上次的,则说明有消息来
'如果小于,则说明切换到另一个窗口或关掉窗口重新打开,则将RLength置0再判断
If ReLength < RLength Then RLength = 0
If ReLength > RLength Then
'设置缓冲区
ReDim bArr(ReLength + 1) As Byte, bArr2(ReLength - 1) As Byte
Call RtlMoveMemory(bArr(0), ReLength, 2)
'发送 WM_GETTEXT 消息
Call SendMessage(ReHwnd, WM_GETTEXT, ReLength + 1, bArr(0))
Call RtlMoveMemory(bArr2(0), bArr(0), ReLength)
'得到对话文本框的文本,即收到的消息
'Dim GetText As String
GetText = StrConv(bArr2, vbUnicode)
'Dim GetTextArry()
gettextarry = Split(GetText, "M383E1eQT2l2yVNZ") 'M383E1eQT2l2yVNZ前面加上的,以此为分隔
i = UBound(gettextarry)
'如果不止一条消息,刚全部翻译
If i > 1 Then
Dim GetTextL As String
GetTextL = gettextarry(0)
For ii = 1 To i
GTA = Split(gettextarry(ii), "D0tQxR7ZxRgSV2A2")
GetTextL = GetTextL & " " & Decode(GTA(0))'Decode()是自定义的解密函数,和Encode对应
GetTextL = GetTextL & GTA(1)
Next ii
SendMessage ReHwnd, WM_SETTEXT, 0, ByVal GetTextL & vbCrLf
'如果是一条,则只译最后一条
ElseIf i = 1 Then
Dim ReText As String
ReText = Decode(Left(gettextarry(i), Len(gettextarry(i)) - 18))
'把新加的取掉,新加的解密后再加入
GetText = Replace(GetText, "M383E1eQT2l2yVNZ" & Left(gettextarry(i), Len(gettextarry(i))), "")
'GetText = Replace(GetText, vbCrLf, vbCrLf & " ")
'将得到的文本处理后再加入文本框
SendMessage ReHwnd, WM_SETTEXT, 0, ByVal GetText & " " & ReText & vbCrLf
End If
ReLength = SendMessage(ReHwnd, WM_GETTEXTLENGTH, 0, 0)
RLength = ReLength
Exit Do
End If
Loop

Exit Sub

A:
MsgBox "Sorry!有错误发生!", vbExclamation + vbSystemModal
SendMessage ReHwnd, WM_SETTEXT, 0, ByVal "" '将内容清空,免得错误持续.
End Sub
hspcyeling 2005-06-09
  • 打赏
  • 举报
回复
我想看看你的捕捉窗口,追加按扭,到自动发送消息的原码,想研究一下,算是学习学习.能否方便,发到
邮箱.
hspcyeling@tom.com
谢谢!
look4sword 2005-06-09
  • 打赏
  • 举报
回复
呵呵,MY,说的一点也没错,但是我还得用。
我这个东东不是做给QQ的,是公司用的RTX,内部QQ。
我其实很菜嘀。QQ:112506861
look4sword 2005-06-09
  • 打赏
  • 举报
回复
需要交流的请加QQ:112506861
daisy8675 2005-06-09
  • 打赏
  • 举报
回复
真的很烦QQ这个词了
look4sword 2005-06-08
  • 打赏
  • 举报
回复
等等再结贴了,给大家看看吧。散分就多散一些人。
look4sword 2005-06-08
  • 打赏
  • 举报
回复
唉,郁闷啊,每次发了贴子后都是自己搞定问题。
其实我的思路也很简单,但不一定是最好,这里说一下:
1.在QQ窗口上创建一个按钮,详见http://community.csdn.net/Expert/topic/4064/4064373.xml?temp=.5738642
2.捕捉按钮的状态,当单击时返回8.
3.返回8时,取发言文本框的内容,然后处理,再写入发言文本框。
4.向发送按钮发一个单击的消息。
5.搞定。
yorkness 2005-06-08
  • 打赏
  • 举报
回复
自娱自乐,好啊!
hspcyeling 2005-06-08
  • 打赏
  • 举报
回复
就是,说出来大家共享,一起学习一下啊
嘘嘘兔 2005-06-08
  • 打赏
  • 举报
回复
这么厉害,说说思路学习学习嘛,呵呵!
DawnPine 2005-06-08
  • 打赏
  • 举报
回复
恭喜楼主
你就权当这个帖子是散分吧
look4sword 2005-06-07
  • 打赏
  • 举报
回复
这个问题差不多搞定了,白发了一个贴子。
加载更多回复(2)

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧