日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

WINIO64位模拟键鼠操作

發布時間:2023/12/13 综合教程 30 生活家
生活随笔 收集整理的這篇文章主要介紹了 WINIO64位模拟键鼠操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近玩游戲有點入迷,心急升級經驗,于是某天開始"掛尸體",一系列手動操作之后決定寫一個外掛,模擬一系列鍵盤和鼠標操作,沒做過游戲winform也用得少,開始以為只要簡單調用winApi的鍵盤和鼠標就能夠實現...結果

后來才發現游戲一般都禁用了winAPI,最后找了一個驅動級的模擬PS2端口的三方庫(WinIO),因為是64位的電腦涉及到數字證書之類的比較麻煩,不過最后好歹都實現了需要的功能,里面寫了一些截取屏幕指定坐標圖片與采集的圖片做對比,

以實現什么時候該點什么時候不該點的判斷,一些關鍵的代碼當做隨筆記錄下來.

將游戲窗體保持最前

  [DllImport("user32.dll", CharSet = CharSet.Auto)]
        private static extern int SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int y, int Width, int Height, int flags);
        /// <summary> 
        /// 得到當前活動的窗口 
        /// </summary> 
        /// <returns></returns> 
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        private static extern System.IntPtr GetForegroundWindow();

        [DllImport("User32.dll", EntryPoint = "FindWindow")]
        private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

        private void button1_Click(object sender, EventArgs e)
        {
            IntPtr hwnd;
            hwnd = FindWindow(null, "XXXX");  //根據程序標題獲取句柄
            SetWindowPos(hwnd, -1, 0, 0, 0, 0, 1 | 2);  //設置在最前
        }

View Code

64位win7操作 winIO

 public class WinIO
    {
        public const int KBC_KEY_CMD = 0x64;//輸入鍵盤按下消息的端口

        public const int KBC_KEY_DATA = 0x60;//輸入鍵盤彈起消息的端口

        [DllImport("WinIo64.dll")]
        public static extern bool InitializeWinIo();

        [DllImport("WinIo64.dll")]
        public static extern bool GetPortVal(IntPtr wPortAddr, out int pdwPortVal,

                    byte bSize);

        [DllImport("WinIo64.dll")]
        public static extern bool SetPortVal(uint wPortAddr, IntPtr dwPortVal,

                    byte bSize);

        [DllImport("WinIo64.dll")]
        public static extern byte MapPhysToLin(byte pbPhysAddr, uint dwPhysSize,

                        IntPtr PhysicalMemoryHandle);

        [DllImport("WinIo64.dll")]
        public static extern bool UnmapPhysicalMemory(IntPtr PhysicalMemoryHandle,

                        byte pbLinAddr);

        [DllImport("WinIo64.dll")]
        public static extern bool GetPhysLong(IntPtr pbPhysAddr, byte pdwPhysVal);

        [DllImport("WinIo64.dll")]
        public static extern bool SetPhysLong(IntPtr pbPhysAddr, byte dwPhysVal);

        [DllImport("WinIo64.dll")]
        public static extern void ShutdownWinIo();

        [DllImport("user32.dll")]
        public static extern int MapVirtualKey(uint Ucode, uint uMapType);




        private WinIO()
        {
            IsInitialize = true;
        }
        public static void Initialize()
        {
            if (InitializeWinIo())
            {
                KBCWait4IBE();
                IsInitialize = true;
            }
        }
        public static void Shutdown()
        {
            if (IsInitialize)
                ShutdownWinIo();
            IsInitialize = false;
        }

        private static bool IsInitialize { get; set; }

        ///等待鍵盤緩沖區為空
        private static void KBCWait4IBE()
        {
            int dwVal = 0;
            do
            {
                bool flag = GetPortVal((IntPtr)0x64, out dwVal, 1);
            }
            while ((dwVal & 0x2) > 0);
        }
        /// 模擬鍵盤標按下
        public static void KeyDown(Keys vKeyCoad)
        {
            if (!IsInitialize) return;

            int btScancode = 0;
            btScancode = MapVirtualKey((uint)vKeyCoad, 0);
            KBCWait4IBE();
            SetPortVal(KBC_KEY_CMD, (IntPtr)0xD2, 1);
            KBCWait4IBE();
            SetPortVal(KBC_KEY_DATA, (IntPtr)0x60, 1);
            KBCWait4IBE();
            SetPortVal(KBC_KEY_CMD, (IntPtr)0xD2, 1);
            KBCWait4IBE();
            SetPortVal(KBC_KEY_DATA, (IntPtr)btScancode, 1);
        }
        /// 模擬鍵盤彈出
        public static void KeyUp(Keys vKeyCoad)
        {
            if (!IsInitialize) return;

            int btScancode = 0;
            btScancode = MapVirtualKey((uint)vKeyCoad, 0);
            KBCWait4IBE();
            SetPortVal(KBC_KEY_CMD, (IntPtr)0xD2, 1);
            KBCWait4IBE();
            SetPortVal(KBC_KEY_DATA, (IntPtr)0x60, 1);
            KBCWait4IBE();
            SetPortVal(KBC_KEY_CMD, (IntPtr)0xD2, 1);
            KBCWait4IBE();
            SetPortVal(KBC_KEY_DATA, (IntPtr)(btScancode | 0x80), 1);
        }
    }

View Code

調用:

1.初始實例:WinIO.Initialize();

2.模擬按鍵

WinIO.KeyDown(Keys.A); // 按下A
Thread.Sleep(100);
WinIO.KeyUp(Keys.A); // 松開A

3.窗體關閉之后注銷:WinIO.Shutdown(); // 用完后注銷

當然WINIO在64位下沒有正式的數字證書,用得時候需要手動在測試模式下為sys文件導入證書. 命令 (bcdedit /set testsigning on)

鼠標模擬

 1   [DllImport("user32.dll")]
 2         private static extern int SetCursorPos(int x, int y);
 3 
 4         public enum MouseEventFlags
 5         {
 6             Move = 0x0001,
 7             LeftDown = 0x0002,
 8             LeftUp = 0x0004,
 9             RightDown = 0x0008,
10             RightUp = 0x0010,
11             MiddleDown = 0x0020,
12             MiddleUp = 0x0040,
13             Wheel = 0x0800,
14             Absolute = 0x8000
15         }
16         [DllImport("User32")]
17         public extern static void mouse_event(int dwFlags, int dx, int dy, int dwData, IntPtr dwExtraInfo);
18 
19         /// <summary>        
20         /// 移動鼠標到指定的坐標點        
21         /// </summary>        
22         public void MoveMouseToPoint()
23         {
24             string settingValue = ConfigurationManager.AppSettings.Get("Point");
25             string[] pList = settingValue.Split(',');
26             Point centerP = new Point(int.Parse(pList[0]), int.Parse(pList[1]));
27             if (checkBox1.Checked)
28             {
29                 SetCursorPos(centerP.X, centerP.Y);
30                 mouse_event((int)(MouseEventFlags.LeftDown | MouseEventFlags.Absolute), 0, 0, 0, IntPtr.Zero);
31                 mouse_event((int)(MouseEventFlags.LeftUp | MouseEventFlags.Absolute), 0, 0, 0, IntPtr.Zero);
32             }
33         }
34         /// <summary>       
35         /// /// 設置鼠標的移動范圍        
36         /// </summary>        
37         public void SetMouseRectangle(Rectangle rectangle)
38         {
39             System.Windows.Forms.Cursor.Clip = rectangle;
40         }

View Code

最后還有一點采集游戲中固定位置的圖片到內存中與事先采集好的圖片做對比的代碼下次再上傳

  

總結

以上是生活随笔為你收集整理的WINIO64位模拟键鼠操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 黄色免费视频 | 在线免费看av片 | 国产精品传媒视频 | 国产成人无码久久久精品天美传媒 | 国产欧美在线 | 日本激情电影 | av中文字幕亚洲 | 亚洲中文一区二区 | av视屏| 亚洲午夜精品福利 | 中文字幕观看 | 日本一区二区黄色 | 亚洲小说春色综合另类 | 91黄色小视频| 亚洲激情中文字幕 | 日韩视频二区 | 青青草华人在线视频 | 少妇媚药按摩中文字幕 | 日韩1级片 | 羞羞的网站在线观看 | 深夜免费视频 | 日本黄色美女网站 | 西西人体高清44rt·net | 国产最新视频 | 99久久国产热无码精品免费 | 91在线无精精品白丝 | 欧亚av | 欧美天天搞 | 爱爱爱爱网 | 国产欧美精品一区二区色综合朱莉 | 亚洲av无码一区二区三区在线播放 | 三级黄色免费 | 无码国产精品一区二区色情男同 | 日本xxxx人| 超碰在线影院 | av网址观看 | 精品一区二区三区蜜臀 | 国产伦精品一区二区三区免费迷 | 入禽太深免费视频 | 黄视频免费看在线 | 色网视频 | 亚洲干 | 国产又黄又硬又粗 | 免费看片色 | 国产精品视频999 | 欧美一区二区免费视频 | 性欧美jzjz2| 自拍偷拍亚洲欧美 | 秋霞二区| 人妻体体内射精一区二区 | 欧美第七页 | 国产一卡在线 | 偷拍一区二区三区四区 | 超碰97最新 | 99免费| 伊人久久影视 | 亚色中文字幕 | 国产精品视频a | 欧美一级少妇 | 亚洲777| 欧美日韩中文字幕一区 | 国偷自产视频一区二区久 | wwwww在线观看 | 北条麻妃久久精品 | 先锋影音资源av | 亚洲va国产天堂va久久 en | 国产精品一区在线 | av毛片在线看| 日本免费无人高清 | 亚洲欧美国产日韩精品 | 国产精品中文字幕在线观看 | 乳罩脱了喂男人吃奶视频 | 日韩av片在线免费观看 | 97超碰人人在线 | 久久综合伊人77777麻豆 | 国产二区精品视频 | porn麻豆 | 一级特黄色大片 | 影音先锋久久 | 欧美日韩午夜爽爽 | 大伊人网| 激情吧 | 久久99一区 | 国产欧美日韩专区发布 | 最新中文字幕在线 | 99精品一区二区 | 天堂网男人 | av网站网址 | 欧美福利网站 | 女同动漫免费观看高清完整版在线观看 | 色综合天天网 | av超碰在线观看 | 国产又粗又猛又爽又黄视频 | 中文字幕一区二区三区免费视频 | 欧美视频四区 | 婷婷开心激情网 | 美女久久久久久久久 | 日韩欧美一区在线 | 免费看黄视频的网站 |