日期:2014-05-17  浏览次数:21518 次

webbrowsers中模拟鼠标键盘事件复制不成功
想在webbrowsers中通过自动点击鼠标或者模拟键盘输入复制选定的内容,然后通过系统剪切板读出所需要的文本数据。
鼠标点击跟键盘模拟组合键都测试过,执行了,可是系统剪切板就是没有内容。
尝试过直接手动按CTRL+C/右键+左键点击复制(代替模拟输入),则能够读到系统剪切板的数据。
求帮助,代码在下面。

        /// <summary>
        /// 鼠标选取指定区域后copy
        /// </summary>
        /// <param name="first">起始位置</param>
        /// <param name="second">结束位置</param>
        /// <returns>copy结果</returns>
        static internal string GetClipboardInfo(string first, string second)
        {
            string result = "";
            SetCursorPos(Convert.ToInt32(first.Split('|')[0]), Convert.ToInt32(first.Split('|')[1]));  //取需要的区域开始的坐标
            mouse_event(0x0002, 0, 0, 0, 0);//按下鼠标左键
            SetCursorPos(Convert.ToInt32(second.Split('|')[0]), Convert.ToInt32(second.Split('|')[1]));//取需要的区域结束的坐标
            mouse_event(0x0004, 0, 0, 0, 0);//放开鼠标左键
            System.Threading.Thread.Sleep(5000);  //为了调试方便
            //keybd_event(0x1d, 0, 0, 0);
            //keybd_event(0x2e, 0, 0, 0);
            //keybd_event(0x2e, 0, 2, 0);
            //keybd_event(0x1d, 0, 2, 0);
            SetCursorPos(172, 128);     //把鼠标移到选中文本上
            keybd_event(17, 0, 0, 0);  //按下ctrl
            keybd_event(67, 0, 0, 0);  //按下C
            keybd_event(67, 0, 2, 0);  //放开C
            keybd_event(17, 0, 2, 0);  //放开ctrl
            mouse_event(0x0008, 0, 0, 0, 0);//按下右键
            mouse_event(0x0010, 0, 0, 0, 0);//放开右键
            System.Threading.Thread.Sleep(5000);
            SetCursorPos(225, 259);//鼠标移动到复制选项上
            mouse_event(0x0002, 0, 0, 0, 0);//按下左键
            mouse_event(0x0004, 0, 0, 0, 0);//放开左键
            //SendKeys.SendWait("^c");