阿杰 发表于 2015-10-9 07:44:59

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

sing System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace QunSign
{
    public partial class Form1 : Form
    {
      public Form1()
      {
            InitializeComponent();
      }
      static string path = System.AppDomain.CurrentDomain.BaseDirectory + "/List.txt";
      
      public static extern void keybd_event(byte bVk, //虚拟键值   
            byte bScan,
            int dwFlags, //0 为按下,2为释放      
            int dwExtraInfo
            );

      
      public static extern int SendMessage(IntPtr hWnd, int message, IntPtr wParam, IntPtr lParam);

      
      public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

      
      public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);

      private const int WM_MOUSEMOVE = 512;
      private const int WM_LBUTTONDOWN = 513;
      private const int WM_LBUTTONUP = 514;
      private const int WM_LBUTTONDBLCLK = 515;
      private const int WM_SETCURSOR = 32;
      private const int WM_MOUSEACTIVATE = 33;


      private void button1_Click(object sender, EventArgs e)
      {
            if (listBox1.SelectedItems.Count == 0)
            {
                MessageBox.Show("选择目标必须大于0");
                return;
            }
            IntPtr handle = this.Handle;
            this.WindowState = FormWindowState.Minimized;
            List<string> list = new List<string>();
            for (int i = 0; i < listBox1.SelectedItems.Count; i++)
            {
                list.Add(listBox1.SelectedItems.ToString());
            }
            System.Threading.ThreadPool.QueueUserWorkItem((o) =>
            {
                for (int i = 0; i < list.Count; i++)
                {
                  this.Invoke(new MethodInvoker(() =>
                  {
                        string qq = list.ToString();

                        IntPtr QQhWnd = FindWindow("TXGuiFoundation", "QQ");//获取QQ主窗口句柄
                        if (QQhWnd.ToInt32() > 0)
                        {
                            //恢复显示窗体
                            ShowWindow(QQhWnd, 1);//1,正常2,最小化 3,最大化
                            Thread.Sleep(1000);
                            //发送单击消息,搜索栏点叉叉。
                            SendMessage(QQhWnd, WM_LBUTTONDOWN, (IntPtr)1, (IntPtr)(134 * 65536 + 269));//(y * 65536 + x)
                            SendMessage(QQhWnd, WM_LBUTTONUP, (IntPtr)0, (IntPtr)(134 * 65536 + 269));
                            Thread.Sleep(500);
                            //发送单击消息,选中搜索框。
                            SendMessage(QQhWnd, WM_LBUTTONDOWN, (IntPtr)1, (IntPtr)(134 * 65536 + 130));
                            SendMessage(QQhWnd, WM_LBUTTONUP, (IntPtr)0, (IntPtr)(134 * 65536 + 130));
                            //发送粘贴消息,将qq群号码复制到搜索框。
                            Clipboard.SetText(qq);
                            Thread.Sleep(200);
                            keybd_event((byte)Keys.ControlKey, 0, 0, 0);//按下
                            keybd_event((byte)Keys.V, 0, 0, 0);
                            keybd_event((byte)Keys.V, 0, 2, 0);//松开
                            keybd_event((byte)Keys.ControlKey, 0, 2, 0);
                            //等待1秒,发送双击消息
                            Thread.Sleep(1000);
                            //发送双击消息,打开被搜索的QQ群。
                            SendMessage(QQhWnd, WM_MOUSEACTIVATE, (IntPtr)QQhWnd, (IntPtr)(33619969)); //2010001
                            SendMessage(QQhWnd, WM_SETCURSOR, (IntPtr)QQhWnd, (IntPtr)(33619969));
                            SendMessage(QQhWnd, WM_LBUTTONDOWN, (IntPtr)1, (IntPtr)(185 * 65536 + 130));
                            SendMessage(QQhWnd, WM_MOUSEMOVE, (IntPtr)1, (IntPtr)(185 * 65536 + 130));
                            SendMessage(QQhWnd, WM_LBUTTONUP, (IntPtr)0, (IntPtr)(185 * 65536 + 130));
                            SendMessage(QQhWnd, WM_SETCURSOR, (IntPtr)QQhWnd, (IntPtr)(33554433));//2000001
                            SendMessage(QQhWnd, WM_MOUSEMOVE, (IntPtr)0, (IntPtr)(185 * 65536 + 130));
                            SendMessage(QQhWnd, WM_SETCURSOR, (IntPtr)QQhWnd, (IntPtr)(33619969));
                            SendMessage(QQhWnd, WM_LBUTTONDBLCLK, (IntPtr)1, (IntPtr)(185 * 65536 + 130));
                            SendMessage(QQhWnd, WM_LBUTTONUP, (IntPtr)0, (IntPtr)(185 * 65536 + 130));
                            Thread.Sleep(1000);
                            IntPtr hWnd = GetProcessMainFormHandle("QQ");//获取聊天窗口句柄
                            if (hWnd.ToInt32() > 0)
                            {
                              Clipboard.SetText(textBox1.Text); //将消息内容复制到剪贴板
                              Thread.Sleep(20);
                              //ctrl+v 粘贴消息
                              keybd_event((byte)Keys.ControlKey, 0, 0, 0);//按下
                              keybd_event((byte)Keys.V, 0, 0, 0);
                              keybd_event((byte)Keys.V, 0, 2, 0);//松开
                              keybd_event((byte)Keys.ControlKey, 0, 2, 0);
                              Thread.Sleep(500);
                              //alt+s 发送消息
                              keybd_event((byte)Keys.Menu, 0, 0, 0);//按下
                              keybd_event((byte)Keys.S, 0, 0, 0);
                              keybd_event((byte)Keys.S, 0, 2, 0);//松开
                              keybd_event((byte)Keys.Menu, 0, 2, 0);
                              Thread.Sleep(500);
                              //alt+c 关闭对话框
                              keybd_event((byte)Keys.Menu, 0, 0, 0);//按下
                              keybd_event((byte)Keys.C, 0, 0, 0);
                              keybd_event((byte)Keys.C, 0, 2, 0);//松开
                              keybd_event((byte)Keys.Menu, 0, 2, 0);
                              Clipboard.Clear(); //清空剪贴板
                              textBox2.AppendText(string.Format("目标:{0} 消息已发出..{1}", qq, Environment.NewLine));
                            }
                            else
                            {
                              textBox2.AppendText(string.Format("目标:{0} 发送失败!{1}", qq, Environment.NewLine));
                            }
                        }
                  }));
                }
                Thread.Sleep(1000);
                ShowWindow(handle, 1);
            });
      }

      private void Form1_Load(object sender, EventArgs e)
      {
            if (!File.Exists(path))
            {
                using (StreamWriter sw = File.CreateText("./List.txt"))
                {
                  sw.Close();
                }
            }
            var files = File.ReadAllLines(path, Encoding.UTF8);
            listBox1.Items.AddRange(files);
      }

      private void button2_Click(object sender, EventArgs e)
      {
            for (int i = 0; i < listBox1.Items.Count; i++)
            {
                listBox1.SetSelected(i, true);
            }
      }

      private void button3_Click(object sender, EventArgs e)
      {
            for (int i = 0; i < listBox1.Items.Count; i++)
            {
                listBox1.SetSelected(i, !listBox1.GetSelected(i));
            }
      }

      /// <summary>
      /// 通过进程名获得主窗口句柄
      /// </summary>
      /// <param name="processName">进程名</param>
      /// <returns>窗口句柄对象</returns>
      public IntPtr GetProcessMainFormHandle(string processName)
      {
            IntPtr m_WindowHandle = IntPtr.Zero;
            System.Diagnostics.Process pro = null;
            System.Diagnostics.Process[] pros = System.Diagnostics.Process.GetProcessesByName(processName);
            if (pros.Length > 0)
            {
                pro = pros;
                m_WindowHandle = pro.MainWindowHandle;
            }
            return m_WindowHandle;
      }
    }
}

源码打包下载:
**** Hidden Message *****

upring 发表于 2015-10-9 10:12:49

阿杰也转战C#了吗
页: [1]
查看完整版本: 【C#代码】QQ群快速签到工具源代码