使用WebBrowser到剪切板保存图片始终失败,大伙来看看

jvhmr 2018-02-07 06:20:36
总共6台机器,4台正常,2台始终失败,Clipboard.ContainsImage()始终未false,很怪,大伙有遇到过吗?

 HtmlDocument doc = this.CurrentMyBroswer.Document;
mshtml.HTMLDocument html = (HTMLDocument)this.CurrentMyBroswer.Document.DomDocument;

HtmlElement im = MyWebBrowser.GetElementByOuthtml(doc, "img", "logo.png");
IHTMLControlElement img_2 = im.DomElement as IHTMLControlElement;

IHTMLControlRange range = (IHTMLControlRange)((HTMLBody)html.body).createControlRange();
range.add(img_2);
range.execCommand("Copy", false, null);

range = null;
html = null;


if (Clipboard.ContainsImage())
{
using (Image img1 = Clipboard.GetImage())
{

string imgfile = string.Format(@"{0}\{1}.png", Application.StartupPath, DateTime.Now.ToString("yyyyMMddHHmmssfff"));
img1.Save(imgfile);//保存图片到磁盘
ShowMessage("img ok");
}
}
else
{
// 获取失败,
ShowMessage("img err");
return;
}
...全文
990 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
c02645 2018-02-12
  • 打赏
  • 举报
回复
获取img的src,使用WebClient下载,这样不是更简单,不用考虑浏览器支持js的copy问题。 webClient.DownloadFile(url, newName);
desperaso 2018-02-11
  • 打赏
  • 举报
回复
是要把webbrows转图像么?

class NativeMethods
 {
 [ComImport]
 [Guid("0000010D-0000-0000-C000-000000000046")]
 [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
 interface IViewObject
 {
 void Draw([MarshalAs(UnmanagedType.U4)] uint dwAspect, int lindex, IntPtr pvAspect, [In] IntPtr ptd, IntPtr hdcTargetDev, IntPtr hdcDraw, [MarshalAs(UnmanagedType.Struct)] ref RECT lprcBounds, [In] IntPtr lprcWBounds, IntPtr pfnContinue, [MarshalAs(UnmanagedType.U4)] uint dwContinue);
 }

[StructLayout(LayoutKind.Sequential, Pack = 4)]
 struct RECT
 {
 public int Left;
 public int Top;
 public int Right;
 public int Bottom;
 }

public static void GetImage(object obj, Image destination, Color backgroundColor)
 {
 using (Graphics graphics = Graphics.FromImage(destination))
 {
 IntPtr deviceContextHandle = IntPtr.Zero;
 RECT rectangle = new RECT();

rectangle.Right = destination.Width;
 rectangle.Bottom = destination.Height;

graphics.Clear(backgroundColor);

try
 {
 deviceContextHandle = graphics.GetHdc();

IViewObject viewObject = obj as IViewObject;
 viewObject.Draw(1, -1, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, deviceContextHandle, ref rectangle, IntPtr.Zero, IntPtr.Zero, 0);
 }
 finally
 {
 if (deviceContextHandle != IntPtr.Zero)
 {
 graphics.ReleaseHdc(deviceContextHandle);
 }
 }
 }
 }
 }

 

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
 {

Bitmap screenshot = new Bitmap(webBrowser1.Width, webBrowser1.Height);
 NativeMethods.GetImage(webBrowser1.ActiveXInstance, screenshot, Color.White);

// 保存图片
screenshot.Save(@"F:\h11.png");
 }

  • 打赏
  • 举报
回复
你这个涉及的东西比较多,因此你需要先从剪贴板入手,先看直接访问剪贴板有没有问题,然后看js这边执行有没有问题。观察不同电脑的ie版本等等……你分开来一点一点调试吧。
jvhmr 2018-02-08
  • 打赏
  • 举报
回复
引用 2 楼 xomix 的回复:
管理员权限? 按道理剪贴板是不需要的,但是真说不准
使用管理员启动的win form项目
  • 打赏
  • 举报
回复
管理员权限? 按道理剪贴板是不需要的,但是真说不准
jvhmr 2018-02-08
  • 打赏
  • 举报
回复
自己up一下

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧