架构师_程序员

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 10224|回复: 70
打印 上一主题 下一主题

[资料] .net/c# 驱动级模拟键盘输入

  [复制链接]
跳转到指定楼层
楼主
发表于 2017-5-27 09:37:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
简介:
最多用户选择,最简单易用,最稳定可靠 永久免费 系统底层集成,真正的驱动级硬件模拟 一键安装,即为电脑添加一对可完全编程控制的键盘鼠标,轻松自动化操作电脑 适用VB6,DELPHI,VC,BC,VB.NET,C#,JAVA,易语言等各种编程语言 支持WINXP 及以上 32位和64位操作系统 个人桌面应用和游戏工作室装机必备 另提供完全不需真实键盘鼠标版的驱动以及过NP等保护版的驱动

推荐其他的一款:
.net/c# WinRing0驱动级模拟键盘输入[源码]
http://www.itsvse.com/thread-3924-1-1.html
(出处: 架构师)


DD 使用方法:
32位编译的程序调用DD32.dll (VB6,易语言),64位编译的程序调用DD64.dll(此dll也可任意命名)。 然后调用接口函数即可。

案例效果截图:



函数说明:
所有函数(除特别说明外)的参数和返回值都为传值int32类型

1. DD_btn(参数)
功能: 模拟鼠标点击
参数: 1 =左键按下 ,2 =左键放开
4 =右键按下 ,8 =右键放开
16 =中键按下 ,32 =中键放开
64 =4键按下 ,128 =4键放开
256 =5键按下 ,512 =5键放开
例子:模拟鼠标右键 只需要连写(中间可添加延迟) dd_btn(4); dd_btn(8);

2. DD_mov(参数x,参数y)
功能: 模拟鼠标结对移动
参数: 参数x , 参数y 以屏幕左上角为原点。
例子: 把鼠标移动到分辨率1920*1080 的屏幕正中间,
int x = 1920/2 ; int y = 1080/2;
DD_mov(x,y) ;

3. DD_movR(参数dx,参数dy)
功能: 模拟鼠标相对移动
参数: 参数dx , 参数dy 以当前坐标为原点。
例子: 把鼠标向左移动10像素
DD_movR(-10,0) ;

4. DD_whl(参数)
功能: 模拟鼠标滚轮
参数: 1=前 , 2 = 后
例子: 向前滚一格, DD_whl(1)

5. DD_key(参数1,参数2)
功能: 模拟键盘按键
参数: 参数1 ,请查看[DD虚拟键盘码表]。
参数2,1=按下,2=放开
例子: 模拟TAB按键,只需连写(中间可添加延迟)
DD_key(300, 1);
DD_key(300, 2);

6. DD_todc(参数)
功能: 转换Windows虚拟键码到 DD 专用键码.
参数: Windows虚拟键码
例子: int ddcode = DD_todc(VK_ESCAPE);
Dim ddcode As int32 = DD_todc(27);

7. DD_str(参数)
功能: 直接输入键盘上可见字符和空格
参数: 字符串, (注意,这个参数不是int32 类型)
例子: DD_str("MyEmail@aa.bb.cc !@#$")


编后语:
普通游戏和桌面操作自动化,所有鼠标键盘模拟操作都只需 DD_btn , DD_mov , DD_whl,DD_movR 四个操控鼠标的函数和 DD_key 一个操控键盘的函数即可完成。 (在一些有保护措施游戏中需要DD增强版才能实现模拟)
为方便本机调用,DD32.dll 或者 DD64.dll 路径文件名保存在注册表如下位置:
HKEY_LOCAL_MACHINE\SOFTWARE\DD XOFT\path


c# demo代码:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using System.Runtime.InteropServices;

  9. namespace App_csharp
  10. {
  11.     public partial class Form1 : Form
  12.     {
  13.         private CDD dd;

  14.         public Form1()
  15.         {
  16.             InitializeComponent();
  17.         }

  18.         private void Form1_Load(object sender, EventArgs e)
  19.         {
  20.             this.button_start.Enabled = false;

  21.             reg_hotkey();                            // 注册热键

  22.             dd = new CDD();
  23.         }

  24.         private void Form1_FormClosing(object sender, FormClosingEventArgs e)
  25.         {
  26.             unreg_hotkey();
  27.         }
  28.         
  29.         private void timer1_Tick(object sender, EventArgs e)
  30.         {
  31.             if (radioButton1.Checked == true)      // 测试键盘按键
  32.             {
  33.                 int ddcode =  300;                         //tab键位在DD键码表的3区第1个位置
  34.                 dd.key(ddcode, 1);                              
  35.                 dd.key(ddcode, 2);                        // 1=按下 2=放开                    
  36.                 return;
  37.             }

  38.             if (radioButton2.Checked == true)     //测试鼠标点击
  39.             {
  40.                 dd.btn(1);                                    // 1=左键按下
  41.                 dd.btn(2);                                    // 2=左键放开
  42.                 return;
  43.             }
  44.                         
  45.             if (radioButton3.Checked == true)    //测试鼠标移动
  46.             {
  47.                 dd.movR(100,100);
  48.                 return;
  49.             }
  50.                   
  51.             if (radioButton4.Checked == true)   //测试鼠标滚轮
  52.             {
  53.                 dd.whl(1);                                  //前
  54.                 System.Threading.Thread.Sleep(1000);
  55.                 dd.whl(2);                                  //后
  56.             }

  57.         }

  58.         private void button1_Click(object sender, EventArgs e)
  59.         {
  60.             //可从注册表中直接获取
  61.             string dllfile = ReadDataFromReg();

  62.             //LoadDllFile(dllfile);
  63.             //return;

  64.             //或手动定位
  65.             OpenFileDialog ofd = new OpenFileDialog();
  66.             ofd.Filter = "DD入口文件|*.DLL";

  67.             if (ofd.ShowDialog() != DialogResult.OK)
  68.             {
  69.                 return;
  70.             }

  71.             LoadDllFile(ofd.FileName);   
  72.         }

  73.         private void button2_Click(object sender, EventArgs e)
  74.         {
  75.             if (button_start.Text == "开始")
  76.             {
  77.                 button_start.Text = "停止";
  78.                 timer1.Enabled = true;
  79.             }
  80.             else
  81.             {
  82.                 button_start.Text = "开始";
  83.                 timer1.Enabled = false;
  84.             }
  85.         }
  86.       
  87.         private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
  88.         {
  89.             string url = "http://" + linkLabel1.Text;
  90.             System.Diagnostics.Process.Start(url);
  91.         }

  92.         private void LoadDllFile(string dllfile)
  93.         {
  94.             label1.Visible = false;
  95.             label2.Visible = false;
  96.             button_start.Enabled = false;

  97.             System.IO.FileInfo fi = new System.IO.FileInfo(dllfile);
  98.             if (!fi.Exists)
  99.             {
  100.                 MessageBox.Show("文件不存在");
  101.                 return;
  102.             }

  103.             int ret = dd.Load(dllfile);
  104.             if (ret == -2) { MessageBox.Show("装载库时发生错误"); return; }
  105.             if (ret == -1) { MessageBox.Show("取函数地址时发生错误"); return; }
  106.             if (ret == 0) { MessageBox.Show("非增强模块"); }


  107.             button_start.Enabled = true;
  108.             label1.Visible = true;
  109.             label2.Visible = true;

  110.             textBox1.Text = dllfile;

  111.             return;
  112.         }

  113.         private string ReadDataFromReg()
  114.         {
  115.             Microsoft.Win32.RegistryKey key;
  116.             key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\\DD XOFT\", false);
  117.             if (key != null)
  118.             {
  119.                 foreach (string vname in key.GetValueNames())
  120.                 {
  121.                     if ("path" == vname.ToLower())
  122.                     {
  123.                         return key.GetValue(vname, "").ToString();
  124.                     }
  125.                 }
  126.             }
  127.             return "";
  128.         }

  129. #region "热键设置相关代码"
  130.         [DllImport("user32.dll")]
  131.         public static extern bool RegisterHotKey(
  132.          IntPtr hWnd,
  133.          int id,                            // 热键标识
  134.          KeyModifiers modkey,  //  修改键
  135.          Keys vk                         //  虚键码
  136.         );
  137.         [DllImport("user32.dll")]
  138.         public static extern bool UnregisterHotKey(
  139.          IntPtr hWnd,              // 窗口句柄
  140.          int id                          // 热键标识
  141.         );

  142.         void reg_hotkey()
  143.         {
  144.             RegisterHotKey(this.Handle, 80, 0, Keys.F8);
  145.             RegisterHotKey(this.Handle, 90, 0, Keys.F9);
  146.             RegisterHotKey(this.Handle, 100, KeyModifiers.Shift | KeyModifiers.Control, Keys.B); //热键为SHIFT+CTRL+B
  147.             RegisterHotKey(this.Handle, 200, KeyModifiers.Alt, Keys.D0);                                     //热键为Alt+0
  148.         }

  149.         void unreg_hotkey()
  150.         {
  151.             UnregisterHotKey(this.Handle, 80);
  152.             UnregisterHotKey(this.Handle, 90);
  153.             UnregisterHotKey(this.Handle, 100);
  154.             UnregisterHotKey(this.Handle, 200);                     //缷载3个快捷键
  155.         }

  156.         protected override void WndProc(ref Message m)
  157.         {
  158.             const int WM_HOTKEY = 0x0312;                        //0x0312表示用户热键
  159.             switch (m.Msg)
  160.             {
  161.                 case WM_HOTKEY:
  162.                     ProcessHotkey(m);                                      //调用ProcessHotkey()函数
  163.                     break;
  164.             }
  165.             base.WndProc(ref m);
  166.         }

  167.         private void ProcessHotkey(Message msg)              //按下设定的键时调用该函数
  168.         {
  169.             switch (msg.WParam.ToInt32())
  170.             {
  171.                 case 80:
  172.                     Fun80();
  173.                     break;
  174.                 case 90:
  175.                     Fun90();                                                         //调用相关函数
  176.                     break;
  177.                 case 100:
  178.                     Fun100();
  179.                     break;
  180.                 case 200:
  181.                     Fun200();
  182.                     break;
  183.             }
  184.         }

  185.         private void Fun80()
  186.         {
  187.             dd.str("www.itsvse.com");
  188.         }

  189.         private void Fun90()
  190.         {
  191.             if (dd.key != null)
  192.             {
  193.                 //模拟 系统热键 CTRL+ALT+DEL
  194.                 dd.key(600, 1);                                      // CTRL 键位在 6区1
  195.                 dd.key(602, 1);                                      // ALT   键位在 6区3
  196.                 dd.key(706, 1);                                      // DEL   键位在 7区7
  197.                 System.Threading.Thread.Sleep(5);
  198.                 dd.key(706, 2);
  199.                 dd.key(602, 2);
  200.                 dd.key(600, 2);
  201.             }
  202.         }

  203.         private void Fun100()
  204.         {
  205.             MessageBox.Show("热键ID=100");
  206.         }

  207.         //增强功能测试
  208.         private void Fun200()
  209.         {
  210.             //窗口句柄。如果为0表示全屏
  211.             IntPtr hwnd = (IntPtr)0;

  212.             hwnd = dd.GetActiveWindow();

  213.             //移动鼠标到指定窗口相对坐标位置,当 hwnd==0时,等同于dd.mov
  214.             dd.MouseMove(hwnd, 100, 100);

  215.             //抓图。保存在 C:\DD Snap 目录
  216.             dd.SnapPic(hwnd, 200, 200, 200, 200);

  217.             //取色
  218.             Int32 clr32 = dd.PickColor(hwnd, 50, 50, 1);
  219.             Color clr = Color.FromArgb(clr32);
  220.             this.BackColor = clr;

  221.         }

  222.         #endregion

  223.     }
  224. }
复制代码
下载地址:

游客,如果您要查看本帖隐藏内容请回复






上一篇:c#模拟键盘输入,键盘对应的数字符号键
下一篇:.net/c# 切换英文中文输入
帖子永久地址: 

架构师_程序员 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与架构师_程序员享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和架构师_程序员的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、架构师_程序员管理员和版主有权不事先通知发贴者而删除本文

码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
推荐
发表于 2018-7-23 20:59:44 | 只看该作者
不错  可以模拟键盘输入了  辅助必备
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
推荐
发表于 2017-12-20 10:53:01 | 只看该作者

不错  可以模拟键盘输入了  辅助必备
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
推荐
发表于 2017-10-23 10:30:36 | 只看该作者

不错  可以模拟键盘输入了  辅助必备
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
5#
发表于 2017-6-29 16:57:43 | 只看该作者
正在找这方面的东东,谢谢分享!
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
6#
发表于 2017-6-29 19:49:48 | 只看该作者
1111111111111111111111

评分

参与人数 1MB -1 贡献 -1 收起 理由
QWERTYU -1 -1 请勿灌水,提高回帖质量是每位会员应尽的义.

查看全部评分

码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
7#
发表于 2017-6-30 09:26:10 | 只看该作者
不错  可以模拟键盘输入了  辅助必备
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
8#
发表于 2017-8-16 13:57:08 来自手机 | 只看该作者
正需要,看看,感谢楼主
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
9#
发表于 2017-9-9 22:46:33 | 只看该作者
感谢楼主,
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
回复

使用道具 举报

10#
发表于 2017-9-20 12:01:28 | 只看该作者
谢谢楼主分享了!
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
11#
发表于 2017-9-20 18:46:34 | 只看该作者
kankan~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
回复

使用道具 举报

12#
发表于 2017-9-22 14:30:49 | 只看该作者
每次加载都会网络验证。。经常报错
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
13#
发表于 2017-9-22 17:25:11 | 只看该作者
谢谢分享
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。

Mail To:help@itsvse.com

QQ|Archiver|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2018-8-22 07:38

Powered by Discuz! X3.4

© 2001-2014 Comsenz Inc.

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