zoukankan      html  css  js  c++  java
  • C# 封装winio.dll 驱动级按键鼠标操作模拟

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Runtime.InteropServices;

    namespace AutoRun.Common
    {
    public class WinIo
    {
    public const int KBC_KEY_CMD = 0x64;
    public const int KBC_KEY_DATA = 0x60;
    [DllImport("winio.dll")]
    public static extern bool InitializeWinIo();
    [DllImport("winio.dll")]
    public static extern bool GetPortVal(IntPtr wPortAddr, out int pdwPortVal, byte bSize);
    [DllImport("winio.dll")]
    public static extern bool SetPortVal(uint wPortAddr, IntPtr dwPortVal, byte bSize);
    [DllImport("winio.dll")]
    public static extern byte MapPhysToLin(byte pbPhysAddr, uint dwPhysSize, IntPtr PhysicalMemoryHandle);
    [DllImport("winio.dll")]
    public static extern bool UnmapPhysicalMemory(IntPtr PhysicalMemoryHandle, byte pbLinAddr);
    [DllImport("winio.dll")]
    public static extern bool GetPhysLong(IntPtr pbPhysAddr, byte pdwPhysVal);
    [DllImport("winio.dll")]
    public static extern bool SetPhysLong(IntPtr pbPhysAddr, byte dwPhysVal);
    [DllImport("winio.dll")]
    public static extern void ShutdownWinIo();
    [DllImport("user32.dll")]
    public static extern int MapVirtualKey(uint Ucode, uint uMapType);

    public void sendwinio()
    {
    if (InitializeWinIo())
    {
    KBCWait4IBE();
    }

    }
    ///Wait for Buffer gets empty
    private void KBCWait4IBE()
    {
    int dwVal = 0;
    do
    {
    bool flag = GetPortVal((IntPtr)0x64, out dwVal, 1);
    }
    while ((dwVal & 0x2) > 0);
    }
    /// key down
    public void MykeyDown(int vKeyCoad)
    {
    int btScancode = 0;
    btScancode = MapVirtualKey((byte)vKeyCoad, 0);
    KBCWait4IBE();
    SetPortVal(KBC_KEY_CMD, (IntPtr)0xD2, 1);
    KBCWait4IBE();
    SetPortVal(KBC_KEY_DATA, (IntPtr)0xe2, 1);
    KBCWait4IBE();
    SetPortVal(KBC_KEY_CMD, (IntPtr)0xD2, 1);
    KBCWait4IBE();
    SetPortVal(KBC_KEY_DATA, (IntPtr)btScancode, 1);
    }
    /// Key up
    public void MykeyUp(int vKeyCoad)
    {
    int btScancode = 0;
    btScancode = MapVirtualKey((byte)vKeyCoad, 0);
    KBCWait4IBE();
    SetPortVal(KBC_KEY_CMD, (IntPtr)0xD2, 1);
    KBCWait4IBE();
    SetPortVal(KBC_KEY_DATA, (IntPtr)0xe0, 1);
    KBCWait4IBE();
    SetPortVal(KBC_KEY_CMD, (IntPtr)0xD2, 1);
    KBCWait4IBE();
    SetPortVal(KBC_KEY_DATA, (IntPtr)btScancode, 1);
    }
    /// Simulate mouse down
    public void MyMouseDown(int vKeyCoad)
    {
    int btScancode = 0;
    btScancode = MapVirtualKey((byte)vKeyCoad, 0);
    KBCWait4IBE(); // 'wait for buffer gets empty
    SetPortVal(KBC_KEY_CMD, (IntPtr)0xD3, 1);// 'send write command
    KBCWait4IBE();
    SetPortVal(KBC_KEY_DATA, (IntPtr)(btScancode | 0x80), 1);// 'write in io
    }
    /// Simulate mouse up
    public void MyMouseUp(int vKeyCoad)
    {
    int btScancode = 0;
    btScancode = MapVirtualKey((byte)vKeyCoad, 0);
    KBCWait4IBE(); // 'wait for buffer gets empty
    SetPortVal(KBC_KEY_CMD, (IntPtr)0xD3, 1); //'send write command
    KBCWait4IBE();
    SetPortVal(KBC_KEY_DATA, (IntPtr)(btScancode | 0x80), 1);// 'write in io
    }


    //----------------------------------------------------------------------------------
    //VK codes
    //----------------------------------------------------------------------------------
    public enum Key
    {
    // mouse movements
    move = 0x0001,
    leftdown = 0x0002,
    leftup = 0x0004,
    rightdown = 0x0008,
    rightup = 0x0010,
    middledown = 0x0020,
    //keyboard stuff
    VK_LBUTTON = 1,
    VK_RBUTTON = 2,
    VK_CANCEL = 3,
    VK_MBUTTON = 4,
    VK_BACK = 8,
    VK_TAB = 9,
    VK_CLEAR = 12,
    VK_RETURN = 13,
    VK_SHIFT = 16,
    VK_CONTROL = 17,
    VK_MENU = 18,
    VK_PAUSE = 19,
    VK_CAPITAL = 20,
    VK_ESCAPE = 27,
    VK_SPACE = 32,
    VK_PRIOR = 33,
    VK_NEXT = 34,
    VK_END = 35,
    VK_HOME = 36,
    VK_LEFT = 37,
    VK_UP = 38,
    VK_RIGHT = 39,
    VK_DOWN = 40,
    VK_SELECT = 41,
    VK_PRINT = 42,
    VK_EXECUTE = 43,
    VK_SNAPSHOT = 44,
    VK_INSERT = 45,
    VK_DELETE = 46,
    VK_HELP = 47,
    VK_NUM0 = 48, //0
    VK_NUM1 = 49, //1
    VK_NUM2 = 50, //2
    VK_NUM3 = 51, //3
    VK_NUM4 = 52, //4
    VK_NUM5 = 53, //5
    VK_NUM6 = 54, //6
    VK_NUM7 = 55, //7
    VK_NUM8 = 56, //8
    VK_NUM9 = 57, //9
    VK_A = 65, //A
    VK_B = 66, //B
    VK_C = 67, //C
    VK_D = 68, //D
    VK_E = 69, //E
    VK_F = 70, //F
    VK_G = 71, //G
    VK_H = 72, //H
    VK_I = 73, //I
    VK_J = 74, //J
    VK_K = 75, //K
    VK_L = 76, //L
    VK_M = 77, //M
    VK_N = 78, //N
    VK_O = 79, //O
    VK_P = 80, //P
    VK_Q = 81, //Q
    VK_R = 82, //R
    VK_S = 83, //S
    VK_T = 84, //T
    VK_U = 85, //U
    VK_V = 86, //V
    VK_W = 87, //W
    VK_X = 88, //X
    VK_Y = 89, //Y
    VK_Z = 90, //Z
    VK_NUMPAD0 = 96, //0
    VK_NUMPAD1 = 97, //1
    VK_NUMPAD2 = 98, //2
    VK_NUMPAD3 = 99, //3
    VK_NUMPAD4 = 100, //4
    VK_NUMPAD5 = 101, //5
    VK_NUMPAD6 = 102, //6
    VK_NUMPAD7 = 103, //7
    VK_NUMPAD8 = 104, //8
    VK_NUMPAD9 = 105, //9
    VK_NULTIPLY = 106,
    VK_ADD = 107,
    VK_SEPARATOR = 108,
    VK_SUBTRACT = 109,
    VK_DECIMAL = 110,
    VK_DIVIDE = 111,
    VK_F1 = 112,
    VK_F2 = 113,
    VK_F3 = 114,
    VK_F4 = 115,
    VK_F5 = 116,
    VK_F6 = 117,
    VK_F7 = 118,
    VK_F8 = 119,
    VK_F9 = 120,
    VK_F10 = 121,
    VK_F11 = 122,
    VK_F12 = 123,
    VK_NUMLOCK = 144,
    VK_SCROLL = 145,
    middleup = 0x0040,
    xdown = 0x0080,
    xup = 0x0100,
    wheel = 0x0800,
    virtualdesk = 0x4000,
    absolute = 0x8000
    }
    }
    }

  • 相关阅读:
    三大主流负载均衡软件对比(LVS+Nginx+HAproxy)
    nginx 提示the "ssl" directive is deprecated, use the "listen ... ssl" directive instead
    centos安装nginx并配置SSL证书
    hadoop创建目录文件失败
    The server time zone value 'EDT' is unrecognized or represents more than one time zone.
    脚本启动SpringBoot(jar)
    centos做免密登录
    数据库远程连接配置
    Bash 快捷键
    TCP三次握手四次断开
  • 原文地址:https://www.cnblogs.com/lee2011/p/7562937.html
Copyright © 2011-2022 走看看