• [转载]C# 封装winio.dll 驱动级按键鼠标操作模拟


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

    namespace lizheAionWG
    {
    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
    }
    }
    }
    转载,原文http://hi.baidu.com/jonesvale/blog/item/c3aedc014817591a738b6551.html
  • 相关阅读:
    Tomcat架构解析(五)-----Tomcat的类加载机制
    session与cookie
    freemarker常用标签解释遍历
    freemarker常用标签解释三
    freemarker常用标签解释二
    freemarker常用标签解释
    禁止浏览器自动填充
    使用cookie实现自动登录
    长连接和短连接
    filter防止xxs攻击
  • 原文地址:https://www.cnblogs.com/x2048/p/winiocsharp.html
Copyright © 2020-2023  润新知