【文件属性】:
文件名称:C#写的QQ自动发消息.rar
文件大小:121KB
文件格式:RAR
更新时间:2015-10-19 11:59:47
C# QQ 自动 发消息
作者: 三角猫
出处: http://www.zu14.cn/
版权归 三角猫 和 真有意思网 所有,转载请注明出处
using System;
using System.Collections.Generic;
using System.Text;
namespace QQAutoMsg
{
///
/// 消息发送
///
internal static class QQMsgSender
{
///
/// 发送消息
///
/// 所以已打开的QQ窗体的列表
/// 消息内容
internal static void Go(List qqChatWindows, string msg)
{
foreach (EnumQQChatWindows.QQChatWindow win in qqChatWindows)
{
SendMsg(win.WindowHwnd, msg);
}
}
///
/// 根据窗体句柄,找到输入框和发送按钮,发送消息出去
///
/// 聊天窗口句柄
/// 消息内容
private static void SendMsg(IntPtr hWnd, string msg)
{
if (NativeMethods.IsWindow(hWnd)) //确认该聊天窗口仍然有效
{
////找到 发送 按钮
IntPtr hwndButton = NativeMethods.FindWindowEx(hWnd, IntPtr.Zero, "Button", "发送(S)");
if (IntPtr.Zero != hwndButton)
{
////找到窗体顺序上的第一个RichEdit20A控件,其实就是消息显示框
IntPtr hwndRichEdit = NativeMethods.FindWindowEx(hWnd, IntPtr.Zero, "RichEdit20A", null);
////利用spy++,可以看到消息输入框的父窗体是类名为 AfxWnd42 的控件
////在顺序上是显示框的下一个窗体
if (IntPtr.Zero != hwndRichEdit)
{
////找到 AfxWnd42 这个窗体
hwndRichEdit = NativeMethods.GetWindow(hwndRichEdit, NativeMethods.GW_HWNDNEXT);
if (IntPtr.Zero != hwndRichEdit)
{
////这才是真正的消息输入框
hwndRichEdit = NativeMethods.FindWindowEx(hwndRichEdit, IntPtr.Zero, "RichEdit20A", null);
if (hwndRichEdit != IntPtr.Zero)
{
////发送消息,因为QQ屏蔽了 WM_SETTEXT, WM_PASTE 命令,所有采用 EM_REPLACESEL 来实现
NativeMethods.SendMessage(hwndRichEdit, NativeMethods.EM_REPLACESEL, IntPtr.Zero, msg);
////给发送按钮发 鼠标单击消息
NativeMethods.SendMessage(hwndButton, NativeMethods.BM_CLICK, IntPtr.Zero, IntPtr.Zero);
}
}
}
}
}
}
}
}