赞
踩

- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.IO;
- using System.Runtime.InteropServices;
- using System.Text;
- using System.Threading;
- using System.Windows.Forms;
-
- namespace QQGG
- {
- public partial class Form1 : Form
- {
-
- //import win32api
- //import win32con
- //win32api.keybd_event(17,0,0,0) #ctrl键位码是17
- //win32api.keybd_event(86,0,0,0) #v键位码是86
- //win32api.keybd_event(86,0,win32con.KEYEVENTF_KEYUP,0) #释放按键
- //win32api.keybd_event(17,0,win32con.KEYEVENTF_KEYUP,0)
-
- //附个键位码表:
- //字母和数字键 数字小键盘的键 功能键 其它键
- // 键 键码 键 键码 键 键码 键 键码
- // A 65 0 96 F1 112 Backspace 8
- // B 66 1 97 F2 113 Tab 9
- // C 67 2 98 F3 114 Clear 12
- // D 68 3 99 F4 115 Enter 13
- // E 69 4 100 F5 116 Shift 16
- // F 70 5 101 F6 117 Control 17
- // G 71 6 102 F7 118 Alt 18
- // H 72 7 103 F8 119 Caps Lock 20
- // I 73 8 104 F9 120 Esc 27
- // J 74 9 105 F10 121 Spacebar 32
- // K 75 * 106 F11 122 Page Up 33
- // L 76 + 107 F12 123 Page Down 34
- // M 77 Enter 108 -- -- End 35
- // N 78 - 109 -- -- Home 36
- // O 79 . 110 -- -- Left Arrow 37
- // P 80 / 111 -- -- Up Arrow 38
- // Q 81 -- -- -- -- Right Arrow 39
- // R 82 -- -- -- -- Down Arrow 40
- // S 83 -- -- -- -- Insert 45
- // T 84 -- -- -- -- Delete 46
- // U 85 -- -- -- -- Help 47
- // V 86 -- -- -- -- Num Lock 144
- // W 87
- // X 88
- // Y 89
- // Z 90
- // 0 48
- // 1 49
- // 2 50
- // 3 51
- // 4 52
- // 5 53
- // 6 54
- // 7 55
- // 8 56
- // 9 57
-
- //这个函数在user32.dll这个库文件里面。我们可以在C:\WINDOWS\system32(XP系统)这个目录下找到这个文件,他是系统自带的。 我们以C#直接调用这个文件中的API为例子来说下怎么进行鼠标操作,首先在我们C#中声明引用,如果是一个基于From的程序,这个声明的位置写在你的From class就可以了
- //[System.Runtime.InteropServices.DllImport("user32")]
- //private static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
-
- //参数 意义
- //dwFlags Long,下表中标志之一或它们的组合
- //dx,dy Long,根据MOUSEEVENTF_ABSOLUTE标志,指定x,y方向的绝对位置或相对位置
- //cButtons Long,没有使用
- //dwExtraInfo Long,没有使用
-
- //dwFlags常数 意义
-
- //const int MOUSEEVENTF_MOVE = 0x0001; 移动鼠标
- //const int MOUSEEVENTF_LEFTDOWN = 0x0002; 模拟鼠标左键按下
- //const int MOUSEEVENTF_LEFTUP = 0x0004; 模拟鼠标左键抬起
- //const int MOUSEEVENTF_RIGHTDOWN = 0x0008; 模拟鼠标右键按下
- //const int MOUSEEVENTF_RIGHTUP = 0x0010; 模拟鼠标右键抬起
- //const int MOUSEEVENTF_MIDDLEDOWN = 0x0020; 模拟鼠标中键按下
- //const int MOUSEEVENTF_MIDDLEUP = 0x0040; 模拟鼠标中键抬起
- //const int MOUSEEVENTF_ABSOLUTE = 0x8000; 标示是否采用绝对坐标
-
-
- //程序中我们直接调用mouse_event函数就可以了
- //mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 500, 500, 0, 0);
-
- //1、这里是鼠标左键按下和松开两个事件的组合即一次单击:
- //mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )
-
- //2、模拟鼠标右键单击事件:
- //mouse_event (MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0 )
-
- //3、两次连续的鼠标左键单击事件 构成一次鼠标双击事件:
- //mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )
- //mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )
-
- //4、使用绝对坐标
- //MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 500, 500, 0, 0
-
- //需要说明的是,如果没有使用MOUSEEVENTF_ABSOLUTE,函数默认的是相对于鼠标当前位置的点,如果dx,和dy,用0,0表示,这函数认为是当前鼠标所在的点。5、直接设定绝对坐标并单击
- //mouse_event(MOUSEEVENTF_LEFTDOWN, X * 65536 / 1024, Y * 65536 / 768, 0, 0);
- //mouse_event(MOUSEEVENTF_LEFTUP, X * 65536 / 1024, Y * 65536 / 768, 0, 0);
- //其中X,Y分别是你要点击的点的横坐标和纵坐标
-
- //而键盘模拟用 Keybd_event()
-
- //Keybd_event能触发一个按键事 件,也就是说回产生一个WM_KEYDOWN或WM_KEYUP消息。当然也可以用产生这两个消息来模拟按键,但是没有直接用这个函数方便。 Keybd_event共有四个参数,第一个为按键的虚拟键值,如回车键为vk_return, tab键为vk_tab。第二个参数为扫描码,一般不用 设置,用0代替就行。第三个参数为选项标志,如果为keydown则置0即可,如果为keyup则设成“KEYEVENTF_KEYUP”,第四个参数一 般也是置0即可。
-
-
- [DllImport("user32.dll", EntryPoint = "FindWindow")]
- private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);
-
- [DllImport("user32.dll")]
- private static extern int GetWindowText(IntPtr hwnd, StringBuilder lpString, int cch);
-
- [DllImport("user32.dll", EntryPoint = "SetWindowPos", SetLastError = true)]
- private static extern bool SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int y, int cx, int cy, uint uFlags);
-
-
-
- private string className, windowText;
- private IntPtr qqWindowHwnd;
-
-
- public Form1()
- {
- InitializeComponent();
- }
-
- private void Form1_Load(object sender, EventArgs e)
- {
-
- }
-
- public bool IsTargetShow
- {
- get
- {
- qqWindowHwnd = FindWindow(className, windowText);
- if (qqWindowHwnd != IntPtr.Zero) //找到目标窗口
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- }
- /// <summary>
- /// 设置鼠标位置
- /// </summary>
- /// <param name="x"></param>
- /// <param name="y"></param>
- /// <returns></returns>
- [DllImport("user32.dll")]
- static extern bool SetCursorPos(int x, int y);
-
- [DllImport("user32.dll")]
- static extern bool mouse_event(int dwFlags, int dx, int dy, int dwData, UInt64 dwExtraInfo);
-
- [DllImport("user32.dll", EntryPoint = "keybd_event")]
- public static extern void keybd_event(byte bVk, //虚拟键值
- byte bScan,// 一般为0
- int dwFlags, //这里是整数类型 0 为按下,2为释放
- int dwExtraInfo //这里是整数类型 一般情况下设成为0
- );
-
- public void SendDoubleClick(int x, int y)
- {
- SetCursorPos(x, y);
- mouse_event(0x2, 0, 0, 0, 0);
- mouse_event(0x4, 0, 0, 0, 0);
- YanShi.Delay(10);
- mouse_event(0x2, 0, 0, 0, 0);
- mouse_event(0x4, 0, 0, 0, 0);
- }
-
- public void SendClick(int x, int y)
- {
- SetCursorPos(x, y);
- mouse_event(0x2, 0, 0, 0, 0);
- mouse_event(0x4, 0, 0, 0, 0);
- }
-
- public void SendPaste()
- {
- keybd_event(17, 0, 0, 0);
- keybd_event(86, 0, 0, 0);
- keybd_event(86, 0, 2, 0);
- keybd_event(17, 0, 2, 0);
- }
-
- public void SendEnter()
- {
- keybd_event(13, 0, 0, 0);
-
- keybd_event(13, 0, 2, 0);
- }
-
- public void SendDown()
- {
- keybd_event(40, 0, 0, 0);
- keybd_event(40, 0, 2, 0);
- YanShi.Delay(10);
- }
-
- public void SendCtrlEnter()
- {
- keybd_event(17, 0, 0, 0);
- keybd_event(13, 0, 0, 0);
- keybd_event(13, 0, 2, 0);
- keybd_event(17, 0, 2, 0);
- }
- public void SendCtrlA()
- {
- keybd_event(17, 0, 0, 0);
- keybd_event(65, 0, 0, 0);
-
- keybd_event(17, 0, 2, 0);
- keybd_event(65, 0, 2, 0);
- }
- public void SendCtrlC()
- {
- keybd_event(17, 0, 0, 0);
- keybd_event(67, 0, 0, 0);
- keybd_event(17, 0, 2, 0);
- keybd_event(67, 0, 2, 0);
- }
- public void SendAltF4()
- {
- keybd_event(18, 0, 0, 0);
- keybd_event(115, 0, 0, 0);
- keybd_event(115, 0, 2, 0);
- keybd_event(18, 0, 2, 0);
- }
- public bool panduan_start_sotp = true;
- public bool panduan_fasong = true;
- private void BtnBeginSend_Click(object sender, EventArgs e)
- {
- if (checkBox1.Checked)
- {
- timer1.Start();
-
- className = TxtClassName.Text;
- windowText = TxtWindowText.Text;
-
- if (!IsTargetShow)
- {
- //MessageBox.Show("没有找到指定的QQ群窗口。");
- label1.Text = "没有找到【" + TxtWindowText.Text + "】群";
- return;
- }
- SetWindowPos(qqWindowHwnd, 0, 0, 0, 640, 614, 0);
-
- //SendClick(450, 131 + 10); //点选群成员,使其获得输入焦点
-
- //SendEnter();
-
- //SendClick(140, 440); //点选输入框,使其获得输入焦点
- //SendPaste();
-
- SendClick(360, 260); // 点击聊天记录窗口准备获取内容
- YanShi.Delay(100);
- SendCtrlA();
- YanShi.Delay(100);
- SendCtrlC();
- YanShi.Delay(100);
- SendCtrlC();
- //YanShi.Delay(100);
- //SendClick(200, 200); // 点击聊天记录窗口准备获取内容
-
-
- IDataObject iData = Clipboard.GetDataObject();
- if (iData.GetDataPresent(DataFormats.Text))
- {
- try
- {
- richTextBox1.Text = (String)iData.GetData(DataFormats.Text);
-
- richTextBox1.Text = richTextBox1.Lines[richTextBox1.Lines.Length - 2];
-
- if (richTextBox1.Text.IndexOf("#开启") > -1)
- {
- panduan_start_sotp = true;
- }
- if (richTextBox1.Text.IndexOf("#关闭") > -1)
- {
- panduan_start_sotp = false;
- }
-
- this.listView2.Items.Clear();
- foreach (ListViewItem lt in listView1.Items)
- {
- //MessageBox.Show(Convert.ToString(lt.SubItems[0].Text));//记问第行记录的第一个字段值
- if (richTextBox1.Text.IndexOf(lt.SubItems[0].Text) > -1)
- {
- //MessageBox.Show(Convert.ToString(lt.SubItems[1].Text));//记问第行记录的第一个字段值
- this.listView2.Items.Add(lt.SubItems[0].Text).SubItems.Add(lt.SubItems[1].Text);
- }
-
- }
-
-
- Random ran = new Random();
- int RandKey = ran.Next(1, listView2.Items.Count);
- int xuanze = 0;
- foreach (ListViewItem lt in listView2.Items)
- {
-
- xuanze++;
- if (xuanze == RandKey)
- {
- if (panduan_fasong)
- {
- Clipboard.SetText(lt.SubItems[1].Text + "\r\n\r\n");
- SendClick(300, 530); // 点击聊天记录窗口准备获取内容
- YanShi.Delay(100);
- SendPaste();
- SendCtrlEnter();
- break;
- }
- if (panduan_start_sotp)
- {
- panduan_fasong = true;
- }
- else
- {
- panduan_fasong = false;
- }
- }
- }
- }
-
-
- catch (Exception ex)
- { }
- }
- }
- }
-
-
- private void button1_Click(object sender, EventArgs e)
- {
- Read("word.txt");
- // Read_data();
- }
-
- public void Read_data()
- {
- int jiazai_num = 0;
- DataTable dt = Mysql.SelectAccsql("select a1,a2 from word_table");
- for (int i = 0; i < dt.Rows.Count; i++)
- {
- jiazai_num++;
- try
- {
- string a_left = dt.Rows[i]["a1"].ToString();
- string a_right = dt.Rows[i]["a2"].ToString();
- this.listView1.Items.Add(a_left).SubItems.Add(a_right);
- //YanShi.Delay(1);
- label3.Text = "共加载 语句:" + jiazai_num.ToString() + "条";
- }
- catch (Exception ex)
- { }
-
- }
- }
-
-
-
- public void Read(string path)
- {
- StreamReader sr = new StreamReader(path, Encoding.Default);
- String line;
- this.listView1.Items.Clear();
- YanShi.Delay(10);
- this.listView1.Items.Add("正在加载,请稍等...");
- //YanShi.Delay(500);
- this.listView1.Items.Clear();
-
- int i_ok = 0;
- int i_num = 0;
- while ((line = sr.ReadLine()) != null)
- {
- i_num++;
- //Console.WriteLine(line.ToString());
-
- //line = "aaa/bbb";
- //ListViewItem item=new ListViewItem();
- //item.add("第一列的内容").subItems.add("第二列的内容");
- //item.SubItems.Add("第2列,");
- //this.listView1.Items.Add(item);
- //this.listView1.Clear();
- try
- {
- string line_l = line.Substring(0, line.LastIndexOf("/"));
- string line_r = line.Substring(line.LastIndexOf("/") + 1);
-
- if (line_l.Length >= 1 && line_r.Length >= 1)
- {
- try
- {
- //Mysql.SaveAccsql("insert into word_table (a1,a2)values('" + line_l + "','" + line_r + "')");
- i_ok++;
-
- this.listView1.Items.Add(line_l).SubItems.Add(line_r);
- }
- catch (Exception ex)
- {
-
- }
- }
-
-
-
-
- }
- catch(Exception ex)
- {}
-
- //YanShi.Delay(1);
- // this.Text = "共操作数据【" + i_num + "】,成功数据【" + i_ok + "】";
- }
- label3.Text = "共加载 语句:" + i_ok.ToString() + "条";
- }
-
- private void timer1_Tick(object sender, EventArgs e)
- {
-
- RegisterHotKey(Handle, 81, KeyModifiers.None, Keys.F8);
- BtnBeginSend_Click(sender, e);
-
- }
-
-
- #region 定义快捷键
- //===========================================================================================================================
- //如果函数执行成功,返回值不为0。
- //如果函数执行失败,返回值为0。要得到扩展错误信息,调用GetLastError。
- [DllImport("user32.dll", SetLastError = true)]
- public static extern bool RegisterHotKey(
- IntPtr hWnd, //要定义热键的窗口的句柄
- int id, //定义热键ID(不能与其它ID重复)
- KeyModifiers fsModifiers, //标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效
- Keys vk //定义热键的内容
- );
- [DllImport("user32.dll", SetLastError = true)]
- public static extern bool UnregisterHotKey(
- IntPtr hWnd, //要取消热键的窗口的句柄
- int id //要取消热键的ID
- );
- //定义了辅助键的名称(将数字转变为字符以便于记忆,也可去除此枚举而直接使用数值)
- [Flags()]
- public enum KeyModifiers
- {
- None = 0,
- Alt = 1,
- Ctrl = 2,
- Shift = 4,
- WindowsKey = 8
- }
- #endregion
- protected override void WndProc(ref Message m)
- {
- const int WM_HOTKEY = 0x0312;
- //按快捷键
- switch (m.Msg)
- {
- case WM_HOTKEY:
- switch (m.WParam.ToInt32())
- {
- case 81:
- //Application.Exit();
- checkBox1.Checked = false;
- break;
- }
- break;
- }
- base.WndProc(ref m);
- }
-
- }
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。