首页 新闻 会员 周边 捐助

webbrowsers中模拟鼠标键盘事件复制不成功

0
悬赏园豆:100 [已解决问题] 解决于 2012-12-10 09:50

想在webbrowsers中通过自动点击鼠标或者模拟键盘输入复制选定的内容,然后通过系统剪切板读出所需要的文本数据。

鼠标点击跟键盘模拟组合键都测试过,执行了,可是系统剪切板就是没有内容。

尝试过直接手动按CTRL+C/右键+左键点击复制(代替模拟输入),则能够读到系统剪切板的数据。

求帮助,代码在下面。

View Code
 1         /// <summary>
 2         /// 鼠标选取指定区域后copy
 3         /// </summary>
 4         /// <param name="first">起始位置</param>
 5         /// <param name="second">结束位置</param>
 6         /// <returns>copy结果</returns>
 7         static internal string GetClipboardInfo(string first, string second)
 8         {
 9             string result = "";
10             SetCursorPos(Convert.ToInt32(first.Split('|')[0]), Convert.ToInt32(first.Split('|')[1]));  //取需要的区域开始的坐标
11             mouse_event(0x0002, 0, 0, 0, 0);//按下鼠标左键
12             SetCursorPos(Convert.ToInt32(second.Split('|')[0]), Convert.ToInt32(second.Split('|')[1]));//取需要的区域结束的坐标
13             mouse_event(0x0004, 0, 0, 0, 0);//放开鼠标左键
14             System.Threading.Thread.Sleep(5000);  //为了调试方便
15             //keybd_event(0x1d, 0, 0, 0);
16             //keybd_event(0x2e, 0, 0, 0);
17             //keybd_event(0x2e, 0, 2, 0);
18             //keybd_event(0x1d, 0, 2, 0);
19             SetCursorPos(172, 128);     //把鼠标移到选中文本上
20             keybd_event(17, 0, 0, 0);  //按下ctrl
21             keybd_event(67, 0, 0, 0);  //按下C
22             keybd_event(67, 0, 2, 0);  //放开C
23             keybd_event(17, 0, 2, 0);  //放开ctrl
24             mouse_event(0x0008, 0, 0, 0, 0);//按下右键
25             mouse_event(0x0010, 0, 0, 0, 0);//放开右键
26             System.Threading.Thread.Sleep(5000);
27             SetCursorPos(225, 259);//鼠标移动到复制选项上
28             mouse_event(0x0002, 0, 0, 0, 0);//按下左键
29             mouse_event(0x0004, 0, 0, 0, 0);//放开左键
30             //SendKeys.SendWait("^c");
31             System.Threading.Thread.Sleep(5000);
32             result = Clipboard.GetData(DataFormats.Text).ToString();  //读剪切板
33             return result;
34         }
问题补充:

我用键盘模拟CTRL+A,webbrowsers里面的文本确实全选了,证明模拟点击的方法执行了,可是到了CTRL+C之后,就是死活没有在系统剪切板里找到东西。是我哪里设置没正确么?
webbrowsers.WebBrowserShortcutsEnabled我也设置了true,实在想不到其他的原因了,google也没看到类似的问题。

silverWing的主页 silverWing | 初学一级 | 园豆:112
提问于:2012-12-07 10:58
< >
分享
最佳答案
0

为什么要模拟键盘或是鼠标呢.直接取到控件,然后直接赋值上去不就行了.?

HTMLInputTextElement input = webForm.Document.GetElementById("页面元素的ID").DomElement as HTMLInputTextElement;

input.value = "需要复制的值";

收获园豆:50
只会造轮子 | 老鸟四级 |园豆:2274 | 2012-12-07 16:40

是这样的,我需要的是邮箱里某个iframe的内容,这个iframe拒绝访问,所以我才尝试其他的方法的。webbrowsers取出来的document里面没有我需要的文本数据。

silverWing | 园豆:112 (初学一级) | 2012-12-07 17:33

@silverWing: 那你是否能拿到iframe这个页面的URl呢.?如果能拿到,那么再用webborwser打开的话.是不是就可以直接操作了呢.?

其实我感觉.问题原本就没有你想象的那么麻烦的.

只会造轮子 | 园豆:2274 (老鸟四级) | 2012-12-07 18:18

@发粪图墙: 嗯,能拿到的,打开之后就是进入收件箱之前的页面,跟普通取webborwser.document.body.innertext是一个效果,同样是没有我需要的数据,我也不想这么麻烦的,又是鼠标模拟,又是键盘模拟,还要记录坐标,其实也需要的功能也做到80%了,只是我想记录每次操作的结果,所以必须要里面的文本来进行判断。

silverWing | 园豆:112 (初学一级) | 2012-12-10 09:45

@发粪图墙: 我自己解决吧,谢谢你们了,分平均分给你了。

silverWing | 园豆:112 (初学一级) | 2012-12-10 09:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册