Sending Keyboard Macro Commands to Game Windows

后端 未结 5 1030
离开以前
离开以前 2021-02-06 18:25

I wanna do a macro program for a game. But there is a problem with sending keys to only game application (game window). I am using keybd_event API for sending keys

5条回答
  •  孤街浪徒
    2021-02-06 19:18

    class SendKeySample
    {
        private static Int32 WM_KEYDOWN = 0x100;
        private static Int32 WM_KEYUP = 0x101;
    
        [return: MarshalAs(UnmanagedType.Bool)]
        [DllImport("user32.dll", SetLastError = true)]
        static extern bool PostMessage(IntPtr hWnd, int Msg, System.Windows.Forms.Keys wParam, int lParam);
    
        [DllImport("user32.dll", SetLastError = true)]
        private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
    
        public static IntPtr FindWindow(string windowName)
        {
            foreach (System.Diagnostics.Process p in System.Diagnostics.Process.GetProcesses())
            {
                if (p.MainWindowHandle != IntPtr.Zero && p.MainWindowTitle.ToLower() == windowName.ToLower())
                    return p.MainWindowHandle;
            }
    
            return IntPtr.Zero;
        }
    
        public static IntPtr FindWindow(IntPtr parent, string childClassName)
        {
            return FindWindowEx(parent, IntPtr.Zero, childClassName, string.Empty);
        }
    
        public static void SendKey(IntPtr hWnd, System.Windows.Forms.Keys key)
        {
            PostMessage(hWnd, WM_KEYDOWN, key, 0);
    
        }
    }
    

    Calling Code

            var hWnd = SendKeySample.FindWindow("Untitled - Notepad");
            var editBox = SendKeySample.FindWindow(hWnd, "edit");
    
            SendKeySample.SendKey(editBox, Keys.A);
    

提交回复
热议问题