想在webbrowsers中通过自动点击鼠标或者模拟键盘输入复制选定的内容,然后通过系统剪切板读出所需要的文本数据。
鼠标点击跟键盘模拟组合键都测试过,执行了,可是系统剪切板就是没有内容。
尝试过直接手动按CTRL+C/右键+左键点击复制(代替模拟输入),则能够读到系统剪切板的数据。
求帮助,代码在下面。
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也没看到类似的问题。
为什么要模拟键盘或是鼠标呢.直接取到控件,然后直接赋值上去不就行了.?
HTMLInputTextElement input = webForm.Document.GetElementById("页面元素的ID").DomElement as HTMLInputTextElement;
input.value = "需要复制的值";
是这样的,我需要的是邮箱里某个iframe的内容,这个iframe拒绝访问,所以我才尝试其他的方法的。webbrowsers取出来的document里面没有我需要的文本数据。
@silverWing: 那你是否能拿到iframe这个页面的URl呢.?如果能拿到,那么再用webborwser打开的话.是不是就可以直接操作了呢.?
其实我感觉.问题原本就没有你想象的那么麻烦的.
@发粪图墙: 嗯,能拿到的,打开之后就是进入收件箱之前的页面,跟普通取webborwser.document.body.innertext是一个效果,同样是没有我需要的数据,我也不想这么麻烦的,又是鼠标模拟,又是键盘模拟,还要记录坐标,其实也需要的功能也做到80%了,只是我想记录每次操作的结果,所以必须要里面的文本来进行判断。
@发粪图墙: 我自己解决吧,谢谢你们了,分平均分给你了。