我现在有一个功能,要求程序自动模拟敲击键盘输入信息。我的意思是当我运行这个功能时,它会自动按我的编码打字,就跟我敲击键盘一样。请各位老大提供一些思路。我以前听说过钩子,不过大都听说用来做信息拦截,不知道能不能主动发送信息

解决方案 »

  1.   

    如果你知道你要输入的内容,那么可以对照KeyCode进行模拟操作的,钩子程序是取得已经点击过了的按钮内容
      

  2.   

     const int WM_COPYDATA = 0x004A;        [DllImport("User32.dll", EntryPoint = "SendMessage")]
            private static extern int SendMessage(
            IntPtr hWnd,   //   handle   to   destination   window   
            int Msg,   //   message   
            int wParam,   //   first   message   parameter   
            ref   COPYDATASTRUCT lParam   //   second   message   parameter   
            );        [DllImport("user32.dll")]
            private static extern int SendMessage(IntPtr hWnd, uint msg, int wParam, int lParam);        //const int WM_CHAR = 0x0102;
                //IntPtr hwnd_win;
                //IntPtr hwnd_textbox;            //hwnd_win = FindWindow(null, "Form4");
                //string pa = AppDomain.CurrentDomain.BaseDirectory;
                //hwnd_textbox = FindWindowEx(hwnd_win, new IntPtr(0), null, "button2");
                //const int BM_CLICK = 0x00F5;
                //COPYDATASTRUCT cds;
                //cds.dwData = (IntPtr)100;
                //cds.lpData = "Test Message";
                //cds.cbData = 14;            //Message msg = Message.Create(hwnd_textbox, BM_CLICK, new IntPtr(0), new IntPtr(0));
                //// PostMessage(msg.HWnd, msg.Msg, msg.WParam, msg.LParam);
                ////SendMessage(hwnd_textbox, BM_CLICK, 0, ref cds);
                //SendMessage(hwnd_win, WM_COPYDATA, 0, ref cds);        [DllImport("user32")]
            public static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo); //const byte VK_LWIN = 0x5B;
                //const byte VK_D = 0x44;
                //const int KEYEVENTF_KEYUP = 0x02;
                //const byte VK_L = 0x4C;
                //keybd_event(VK_LWIN, 0, 0, 0);
                //keybd_event(VK_L, 0, 0, 0);
                //keybd_event(VK_L, 0, KEYEVENTF_KEYUP, 0);
                //keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0);  
      

  3.   

    先谢谢各位。记得以前试过SendMessage和Sendkey,但是不是所有的都可以,在记事本是没问题的,但是在其他程序中有时候就不行
      

  4.   

    但是在其他程序中有时候就不行
    -----》
    你的句柄没拿对吧
    先用Spy++看看