找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 5561|回复: 1

[开源] 【C#代码】QQ群快速签到工具源代码

[复制链接]

1214

主题

352

回帖

11

精华

管理员

菜鸟

积分
93755

贡献奖关注奖人气王精英奖乐于助人勋章

发表于 2015-10-9 07:44:59 | 显示全部楼层 |阅读模式
  1. sing System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.IO;
  7. using System.Linq;
  8. using System.Runtime.InteropServices;
  9. using System.Text;
  10. using System.Threading;
  11. using System.Threading.Tasks;
  12. using System.Windows.Forms;

  13. namespace QunSign
  14. {
  15.     public partial class Form1 : Form
  16.     {
  17.         public Form1()
  18.         {
  19.             InitializeComponent();
  20.         }
  21.         static string path = System.AppDomain.CurrentDomain.BaseDirectory + "/List.txt";
  22.         [DllImport("user32.dll", EntryPoint = "keybd_event")]
  23.         public static extern void keybd_event(byte bVk, //虚拟键值     
  24.             byte bScan,
  25.             int dwFlags, //0 为按下,2为释放      
  26.             int dwExtraInfo
  27.             );

  28.         [DllImport("user32.dll")]
  29.         public static extern int SendMessage(IntPtr hWnd, int message, IntPtr wParam, IntPtr lParam);

  30.         [DllImport("User32.dll", EntryPoint = "FindWindow")]
  31.         public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

  32.         [DllImport("user32.dll", EntryPoint = "ShowWindow", CharSet = CharSet.Auto)]
  33.         public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);

  34.         private const int WM_MOUSEMOVE = 512;
  35.         private const int WM_LBUTTONDOWN = 513;
  36.         private const int WM_LBUTTONUP = 514;
  37.         private const int WM_LBUTTONDBLCLK = 515;
  38.         private const int WM_SETCURSOR = 32;
  39.         private const int WM_MOUSEACTIVATE = 33;


  40.         private void button1_Click(object sender, EventArgs e)
  41.         {
  42.             if (listBox1.SelectedItems.Count == 0)
  43.             {
  44.                 MessageBox.Show("选择目标必须大于0");
  45.                 return;
  46.             }
  47.             IntPtr handle = this.Handle;
  48.             this.WindowState = FormWindowState.Minimized;
  49.             List<string> list = new List<string>();
  50.             for (int i = 0; i < listBox1.SelectedItems.Count; i++)
  51.             {
  52.                 list.Add(listBox1.SelectedItems[i].ToString());
  53.             }
  54.             System.Threading.ThreadPool.QueueUserWorkItem((o) =>
  55.             {
  56.                 for (int i = 0; i < list.Count; i++)
  57.                 {
  58.                     this.Invoke(new MethodInvoker(() =>
  59.                     {
  60.                         string qq = list[i].ToString();

  61.                         IntPtr QQhWnd = FindWindow("TXGuiFoundation", "QQ");  //获取QQ主窗口句柄
  62.                         if (QQhWnd.ToInt32() > 0)
  63.                         {
  64.                             //恢复显示窗体
  65.                             ShowWindow(QQhWnd, 1);  //1,正常  2,最小化 3,最大化
  66.                             Thread.Sleep(1000);
  67.                             //发送单击消息,搜索栏点叉叉。
  68.                             SendMessage(QQhWnd, WM_LBUTTONDOWN, (IntPtr)1, (IntPtr)(134 * 65536 + 269));  //(y * 65536 + x)
  69.                             SendMessage(QQhWnd, WM_LBUTTONUP, (IntPtr)0, (IntPtr)(134 * 65536 + 269));
  70.                             Thread.Sleep(500);
  71.                             //发送单击消息,选中搜索框。
  72.                             SendMessage(QQhWnd, WM_LBUTTONDOWN, (IntPtr)1, (IntPtr)(134 * 65536 + 130));
  73.                             SendMessage(QQhWnd, WM_LBUTTONUP, (IntPtr)0, (IntPtr)(134 * 65536 + 130));
  74.                             //发送粘贴消息,将qq群号码复制到搜索框。
  75.                             Clipboard.SetText(qq);
  76.                             Thread.Sleep(200);
  77.                             keybd_event((byte)Keys.ControlKey, 0, 0, 0);//按下
  78.                             keybd_event((byte)Keys.V, 0, 0, 0);
  79.                             keybd_event((byte)Keys.V, 0, 2, 0);//松开
  80.                             keybd_event((byte)Keys.ControlKey, 0, 2, 0);
  81.                             //等待1秒,发送双击消息
  82.                             Thread.Sleep(1000);
  83.                             //发送双击消息,打开被搜索的QQ群。
  84.                             SendMessage(QQhWnd, WM_MOUSEACTIVATE, (IntPtr)QQhWnd, (IntPtr)(33619969)); //2010001
  85.                             SendMessage(QQhWnd, WM_SETCURSOR, (IntPtr)QQhWnd, (IntPtr)(33619969));
  86.                             SendMessage(QQhWnd, WM_LBUTTONDOWN, (IntPtr)1, (IntPtr)(185 * 65536 + 130));
  87.                             SendMessage(QQhWnd, WM_MOUSEMOVE, (IntPtr)1, (IntPtr)(185 * 65536 + 130));
  88.                             SendMessage(QQhWnd, WM_LBUTTONUP, (IntPtr)0, (IntPtr)(185 * 65536 + 130));
  89.                             SendMessage(QQhWnd, WM_SETCURSOR, (IntPtr)QQhWnd, (IntPtr)(33554433));  //2000001
  90.                             SendMessage(QQhWnd, WM_MOUSEMOVE, (IntPtr)0, (IntPtr)(185 * 65536 + 130));
  91.                             SendMessage(QQhWnd, WM_SETCURSOR, (IntPtr)QQhWnd, (IntPtr)(33619969));
  92.                             SendMessage(QQhWnd, WM_LBUTTONDBLCLK, (IntPtr)1, (IntPtr)(185 * 65536 + 130));
  93.                             SendMessage(QQhWnd, WM_LBUTTONUP, (IntPtr)0, (IntPtr)(185 * 65536 + 130));
  94.                             Thread.Sleep(1000);
  95.                             IntPtr hWnd = GetProcessMainFormHandle("QQ");  //获取聊天窗口句柄
  96.                             if (hWnd.ToInt32() > 0)
  97.                             {
  98.                                 Clipboard.SetText(textBox1.Text); //将消息内容复制到剪贴板
  99.                                 Thread.Sleep(20);
  100.                                 //ctrl+v 粘贴消息
  101.                                 keybd_event((byte)Keys.ControlKey, 0, 0, 0);//按下
  102.                                 keybd_event((byte)Keys.V, 0, 0, 0);
  103.                                 keybd_event((byte)Keys.V, 0, 2, 0);//松开
  104.                                 keybd_event((byte)Keys.ControlKey, 0, 2, 0);
  105.                                 Thread.Sleep(500);
  106.                                 //alt+s 发送消息
  107.                                 keybd_event((byte)Keys.Menu, 0, 0, 0);//按下
  108.                                 keybd_event((byte)Keys.S, 0, 0, 0);
  109.                                 keybd_event((byte)Keys.S, 0, 2, 0);//松开
  110.                                 keybd_event((byte)Keys.Menu, 0, 2, 0);
  111.                                 Thread.Sleep(500);
  112.                                 //alt+c 关闭对话框
  113.                                 keybd_event((byte)Keys.Menu, 0, 0, 0);//按下
  114.                                 keybd_event((byte)Keys.C, 0, 0, 0);
  115.                                 keybd_event((byte)Keys.C, 0, 2, 0);//松开
  116.                                 keybd_event((byte)Keys.Menu, 0, 2, 0);
  117.                                 Clipboard.Clear(); //清空剪贴板
  118.                                 textBox2.AppendText(string.Format("目标:{0} 消息已发出..{1}", qq, Environment.NewLine));
  119.                             }
  120.                             else
  121.                             {
  122.                                 textBox2.AppendText(string.Format("目标:{0} 发送失败!{1}", qq, Environment.NewLine));
  123.                             }
  124.                         }
  125.                     }));
  126.                 }
  127.                 Thread.Sleep(1000);
  128.                 ShowWindow(handle, 1);
  129.             });
  130.         }

  131.         private void Form1_Load(object sender, EventArgs e)
  132.         {
  133.             if (!File.Exists(path))
  134.             {
  135.                 using (StreamWriter sw = File.CreateText("./List.txt"))
  136.                 {
  137.                     sw.Close();
  138.                 }
  139.             }
  140.             var files = File.ReadAllLines(path, Encoding.UTF8);
  141.             listBox1.Items.AddRange(files);
  142.         }

  143.         private void button2_Click(object sender, EventArgs e)
  144.         {
  145.             for (int i = 0; i < listBox1.Items.Count; i++)
  146.             {
  147.                 listBox1.SetSelected(i, true);
  148.             }
  149.         }

  150.         private void button3_Click(object sender, EventArgs e)
  151.         {
  152.             for (int i = 0; i < listBox1.Items.Count; i++)
  153.             {
  154.                 listBox1.SetSelected(i, !listBox1.GetSelected(i));
  155.             }
  156.         }

  157.         /// <summary>  
  158.         /// 通过进程名获得主窗口句柄
  159.         /// </summary>  
  160.         /// <param name="processName">进程名</param>  
  161.         /// <returns>窗口句柄对象</returns>  
  162.         public IntPtr GetProcessMainFormHandle(string processName)
  163.         {
  164.             IntPtr m_WindowHandle = IntPtr.Zero;
  165.             System.Diagnostics.Process pro = null;
  166.             System.Diagnostics.Process[] pros = System.Diagnostics.Process.GetProcessesByName(processName);
  167.             if (pros.Length > 0)
  168.             {
  169.                 pro = pros[0];
  170.                 m_WindowHandle = pro.MainWindowHandle;
  171.             }
  172.             return m_WindowHandle;
  173.         }
  174.     }
  175. }
复制代码

源码打包下载:
游客,如果您要查看本帖隐藏内容请回复
【VB】QQ群:1422505加的请打上VB好友
【易语言】QQ群:9531809  或 177048
【FOXPRO】QQ群:6580324  或 33659603
【C/C++/VC】QQ群:3777552
【NiceBasic】QQ群:3703755

30

主题

693

回帖

0

精华

钻石会员

积分
2815
发表于 2015-10-9 10:12:49 | 显示全部楼层
阿杰也转战C#了吗
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表