绝对是可行的,网上有成功的案例,说要用驱动及的模拟键盘按键,只是没透露代码。
我的思路是用WebBrowser获得账户框 账户框可以赋值,然后用Sendkeys.Send("{tab}");模拟按tab键让密码框获得焦点,因为密码框是安全控件,继续使用WebBrowser和SendKeys是行不通了,在网上一查发现有WinIo.dll这个驱动级的动态链接库可以绕过各种安全机制,但发现这个东东到我这不好使,在网上发现别人自己封装WinIo.dll是可以给安全控件赋值的(无源代码),所以我猜测是下面这个封装的类有问题,希望有使用过
WinIo.dll的大神能帮帮我

解决方案 »

  1.   

    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
            }
        }
    }
      

  2.   

    搞出来了没有,我最近也想实现这个功能,用C#的 webbrowser 控件,不过很难搞定,如果你搞出来了,能不能和给我大概讲一下思路,先谢谢你了哦!我的QQ:2107754029
      

  3.   

    最近也在做这个,但是dll没有加载出来,是什么原因