在IE右键菜单,添加图片保存快捷方式

分类: .Net 2009-07-09 14:25 647人阅读 评论(0) 收藏 举报
先用C#做一个COM
作用为下载图片和图片改名(使用GUID)
view plaincopy to clipboardprint?
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using System.Net;
  9. using System.IO;
  10. using System.Reflection;
  11. using System.Runtime.InteropServices;
  12. using System.Threading;
  13. [assembly: AssemblyKeyFile("gachal_d_key.snk")]
  14. namespace PicsDown
  15. {
  16. [Guid("694C1820-04B6-4988-928F-FD858B95C880")]
  17. public interface DownLoad_Interface
  18. {
  19. [DispId(1)]
  20. void Down(string url, string dir);
  21. [DispId(2)]
  22. void SavePhotoFromUrl(string FileName, string Url);
  23. [DispId(3)]
  24. bool SaveBinaryFile(WebResponse response, string FileName);
  25. }
  26. // 事件接口Database_COMObjectEvents
  27. [Guid("47C976E0-C208-4740-AC42-41212D3C34F0"),
  28. InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
  29. public interface DownLoad_Events
  30. {
  31. }
  32. delegate void MyDelegate(string FileName, string Url);
  33. [Guid("9E5E5FB2-219D-4ee7-AB27-E4DBED8E123E"),
  34. ClassInterface(ClassInterfaceType.None),
  35. ComSourceInterfaces(typeof(DownLoad_Events))]
  36. public class DownLoad : DownLoad_Interface
  37. {
  38. public void Down(string url,string dir)
  39. {
  40. string FileName;
  41. string Url;
  42. string tempUrl = url.Substring(url.Length - 5, 5);
  43. tempUrl = tempUrl.Substring(tempUrl.IndexOf(".", 0), 4);
  44. if (tempUrl == ".jpe")
  45. {
  46. tempUrl = ".jpeg";
  47. }
  48. FileName = @dir + Guid.NewGuid().ToString() + tempUrl;
  49. Url = url;
  50. MyDelegate del = new MyDelegate(this.SavePhotoFromUrl);
  51. IAsyncResult ar = del.BeginInvoke(FileName, Url, null, null);
  52. //del.EndInvoke(ar);
  53. }
  54. /// <summary>
  55. /// 从图片地址下载图片到本地磁盘
  56. /// </summary>
  57. /// <param name="ToLocalPath">图片本地磁盘地址</param>
  58. /// <param name="Url">图片网址</param>
  59. /// <returns></returns>
  60. public void SavePhotoFromUrl(string FileName, string Url)
  61. {
  62. bool Value = false;
  63. WebResponse response = null;
  64. Stream stream = null;
  65. try
  66. {
  67. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
  68. response = request.GetResponse();
  69. stream = response.GetResponseStream();
  70. if (!response.ContentType.ToLower().StartsWith("text/"))
  71. {
  72. Value = SaveBinaryFile(response, FileName);
  73. }
  74. }
  75. catch (Exception err)
  76. {
  77. string aa = err.ToString();
  78. }
  79. }
  80. /// <summary>
  81. /// Save a binary file to disk.
  82. /// </summary>
  83. /// <param name="response">The response used to save the file</param>
  84. // 将二进制文件保存到磁盘
  85. public bool SaveBinaryFile(WebResponse response, string FileName)
  86. {
  87. bool Value = true;
  88. byte[] buffer = new byte[1024];
  89. try
  90. {
  91. if (File.Exists(FileName))
  92. File.Delete(FileName);
  93. Stream outStream = System.IO.File.Create(FileName);
  94. Stream inStream = response.GetResponseStream();
  95. int l;
  96. do
  97. {
  98. l = inStream.Read(buffer, 0, buffer.Length);
  99. if (l > 0)
  100. outStream.Write(buffer, 0, l);
  101. }
  102. while (l > 0);
  103. outStream.Close();
  104. inStream.Close();
  105. }
  106. catch
  107. {
  108. Value = false;
  109. }
  110. return Value;
  111. }
  112. }
  113. }
在这之前先建立snk文件,sn   -k   gachal_d_key.snk,在文件放在项目中
注意在VS中,项目->属性->应用程序->信息集信息 中 把程序集COM可见 选择
项目->属性->生成 为COM互操作注册 选择
这里使用了多线程运行SavePhotoFromUrl函数,保证保存图片时不会“卡卡”的
然后在注册表HKEY_CURRENT_USER/Software/Microsoft/Internet Explorer/MenuExt
上添加新项,命名为保存图片(&x),注意X将被设为快捷键
在该项添加一个字符值,名字默认,值为c:/download.htm
再添加一个DWORD值,名字为contexts,值为十六进制的2
在c盘新建名为download.htm的文件,内容如下
view plaincopy to clipboardprint?
  1. <mce:script language="javascript"><!--
  2. var objNetSamp=new ActiveXObject("PicsDown.DownLoad");//创建COM DLL对象
  3. var srcEvent = external.menuArguments.event;
  4. var EventElement;
  5. if(typeof(srcEvent.clientX) == "undefined")
  6. {
  7. EventElement = external.menuArguments.document.elementFromPoint ( srcEvent.pointerX, srcEvent.pointerY );
  8. }
  9. else
  10. {
  11. EventElement = external.menuArguments.document.elementFromPoint ( srcEvent.clientX, srcEvent.clientY );
  12. }
  13. if(EventElement != null && EventElement.tagName == "IMG")
  14. {
  15. objNetSamp.Down(EventElement.src,"C://pics//");
  16. }
  17. // --></mce:script>
OK,以后在IE保存图片就直接右键然后按X就会保存到c:/pic中,要改为其他目录只要修改download.htm的文件即可。

版权声明:原创作品,如需转载,请注明出处。否则将追究法律责任
本文转自9pc9com博客,原文链接:    http://blog.51cto.com/215363/744261    如需转载请自行联系原作者

在IE右键菜单,添加图片保存快捷方式相关推荐

  1. html右键菜单背景图片,右键菜单背景图片添加步骤

    原标题:"右键菜单背景图片怎么添加"相关电脑问题教程分享. - 来源:191路由网. 在这个追求个性化的时代,每个人都想要与众不同的东西,在电脑设置方面,也要张扬个性,设置标致的桌 ...

  2. html右键菜单背景图片,右键菜单背景图片怎么添加

    在这个追求个性化的时代,每个人都想要与众不同的东西,在电脑设置方面,也要张扬个性,设置标致的桌面墙纸,给窗口加上背景图片等等.但有没有发现,在华丽的外表下,右键弹出的菜单,会不会显得寒酸了点?我们可以 ...

  3. 在桌面右键菜单添加【切换电源计划-卓越性能】选项

    本文在参考<在桌面右键菜单添加[切换电源计划]选项>和<微软又立功了!通过修改电源设置提升dnf性能的方法!>两篇文章的基础上修改而来 旨在打开Win10卓越性能的基础上可以在 ...

  4. 戴尔便携式计算机右键,戴尔最新笔记本如何在右键菜单添加“在此处打开命令窗口”设置项?...

    最近有位戴尔最新笔记本用户,在升级Win10系统后,发现原本的命令提示符已被Powershell取代,因此操作上感觉有点不太习惯,需要一点时间适应,想知道如何在桌面右键菜单中添加"在此处打开 ...

  5. win10怎么用记事本打开html文件,给win10系统右键菜单添加“用记事本打开”的方法...

    有时候我们要打开一些文件的时候,总是会选择用记事本打开,但是不少用户升级到win10系统之后,发现右键菜单中并没有"用记事本打开"的选项,那要怎么在iwn10系统右键菜单中添加&q ...

  6. 在桌面右键菜单添加【切换电源计划】并且有【卓越性能】的选项

    本文在参考<在桌面右键菜单添加[切换电源计划]选项>和<微软又立功了!通过修改电源设置提升dnf性能的方法!>两篇文章的基础上修改而来 旨在打开Win10卓越性能的基础上可以在 ...

  7. win7 右键计算机 服务 设备管理器,win7系统计算机右键菜单添加设备管理器的操作方法...

    今天和大家分享一下关于对win7系统计算机右键菜单添加设备管理器设置的方法,在使用win7系统的过程中经常不知道如何去对win7系统计算机右键菜单添加设备管理器进行设置,有什么好的办法去设置win7系 ...

  8. win10软件拒绝访问删不掉_Win10右键菜单添加“获取文件管理员权限”选项

    文件访问被拒绝,你需要TrustedInstaller提供的权限才能对此文件进行更改/文件访问被拒绝,你需要权限才能执行此操作/你需要提供管理员权限才能移动此文件" 两种方案 一长期 为Wi ...

  9. 如何右键菜单添加命令提示符_在右键菜单顶部添加过滤器命令

    如何右键菜单添加命令提示符 Do you spend lots of time in Excel tables, filtering the data, then clearing those fil ...

最新文章

  1. c# winform笔记
  2. 【windows】编译安装ninja
  3. khoury计算机科学学院,东北大学Open House中国站
  4. 容器的基础 XmlBeanFactory(下篇)
  5. 疯狂VirtualBox实战讲学录 以及 virtualbox完全学习手册 之我见
  6. spring 集成 spring cloud config 的相关知识
  7. 浅谈Spring中Bean的生命周期
  8. 北京54、西安80和CGCS2000
  9. 计算机丢失gdiplus.dll怎么办,win7系统丢失gdiplus.dll报错的解决办法
  10. 天知道-网络应用-Vue小案例-黑马程序员
  11. android手机外置存储卡,安卓手机内置内存卡和外置内存卡(SD卡)互换方法
  12. C语言 · 求arccos值
  13. LONG RAW转换BLOB
  14. 如何获取国际短信验证码---创蓝253国际短信接口调用demo
  15. mysql分组后为0也显示_C罗离开后,梅西6次参加国家德比的数据为0球0助!
  16. 【第五篇】Maven系列教程-聚合工程
  17. 残留的过往伤感QQ日志_说太多,不如沉默
  18. 前端效果之“拉开窗帘”
  19. java使用axis2调用webservice接口实例
  20. Python安装第三方库出现失败并出现”Cannot find existing Pyqt5 plugin directories”的解决方案

热门文章

  1. linux下g编译文件或目录,【转】在linux下使用gcc/g++编译多个.h文件
  2. 脑机交互可提高行动能力
  3. java软件下载jar_qdox.jar免费版
  4. rabbitmq 查询版本_Hyperf 发布 v2.0.14 版本 | 企业级的 PHP 微服务云原生协程框架
  5. 人类基因组最后一块拼图完成!Science罕见6篇连发
  6. CES线下展回归在即:飞行汽车外骨骼智能戒指吸足眼球
  7. 韦东奕陈杲同获达摩院青橙奖,90后数学新星光彩夺目,却说「没有黄金一代」...
  8. 免费试用人数太多,微软Windows 365云电脑服务器炸了,官方紧急暂停
  9. iPad Pro变生产力工具,你还缺这个轻量级浏览器端代码编辑器
  10. AI啊,我这里有些羞羞的东西,你要不要看一眼?