C#实现QQ消息群发
上一篇已经介绍过微信群发,系统逻辑可以在上一篇中查看。本篇从两部分介绍。
QQ好友群发
1.首先使用获取本机登录的所有QQ号码:
public List<string> GetQQNumber(bool type = false)
{
IntPtr fw;
if (type)
{
fw = FindWindow(null, "QQ");
}
else
{
fw = FindWindow("CTXOPConntion_Class", null);
}
if (fw != IntPtr.Zero)
{
List<string> ret = new List<string>();
StringBuilder sb = new StringBuilder(512);
string qq; int len;
do
{
len = GetWindowText(fw, sb, 512);
if (len > 0)
{
qq = Convert.ToString(sb);
// Console.WriteLine(qq);
if (qq.Contains("OP_") || qq.Contains("_32856F50-AA9A-4388-A3C1-AE5C00A61C43"))
{
ret.Add(qq.Replace("_32856F50-AA9A-4388-A3C1-AE5C00A61C43", string.Empty));
}
}
fw = GetWindow(fw, 2);
sb.Clear();
} while (fw != IntPtr.Zero);
if (ret.Count > 0)
{
foreach (string qqStr in ret) {
int index = qqStr.ToString().IndexOf('_');
qqList.Add(qqStr.Substring(index + 1, qqStr.Length - index - 1));
}
return qqList;
}
else
{
return null;
}
}
else
{
return null;
}
}
2.打开QQ消息管理器获取联系人(或群聊)
var mainWindow = app.GetMainWindow(automation);
//窗口置顶显示 避免其它窗口遮挡影响后续操作
IntPtr handle = processes.First().MainWindowHandle;
SwitchToThisWindow(handle, true); // 激活,显示在最
Console.WriteLine("获取主界面");
//3.切换到通讯录
var childWind = mainWindow.FindChildAt(0);
//childWind.DrawHighlight(System.Drawing.Color.Red);
//导航窗口
var navWind = mainWindow.FindChildAt(0); //窗口第一部分
if (type == 1)
{
mainWindow.FindAllDescendants().Where(s => s.Name == "联系人")?.FirstOrDefault()?.Click(false);
var all1 = mainWindow.FindAllDescendants();
var addressBook = mainWindow.FindFirstDescendant(cf => cf.ByName("联系人"));
Console.WriteLine("联系人");
addressBook.Click();
var mainWindowNew = app.GetMainWindow(automation);
var allnew = mainWindowNew.FindAllDescendants();
foreach (var aa in allnew)
{
if (aa.Name.Contains("陌生人("))
{
break;
}
if (aa.ControlType.ToString() == "ListItem")
{
fsList.Add(aa.Name);
}
}
}
3.发送消息
foreach (var name in sendList)
{
try
{
addressBook1.Click();
Thread.Sleep(100);
addressBook1.Click();
var mainWindown = app.GetMainWindow(automation);
var addressBook2 = mainWindown.FindFirstDescendant(cf => cf.ByName(name));
addressBook2.DoubleClick();
SendQQMsg sendQQMsg = new SendQQMsg();
sendQQMsg.sendtext(message);
Thread.Sleep(1000);
try
{
new TimeSpan(1);
var mainWindow1 = app.GetMainWindow(automation);
var all33 = mainWindow1.FindAllDescendants();
var addressBook3 = mainWindow1.FindFirstDescendant(cf => cf.ByName("发送(&S)"));
var addressBook4 = mainWindow1.FindFirstDescendant(cf => cf.ByName("关闭(&C)"));
addressBook3.Click();
addressBook4.Click();
}
catch (Exception ex)
{
continue;
}
}
catch (Exception ex)
{
}
}
sendList.Clear();