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

简介:
 

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

分类: .Net    647人阅读  评论(0)  收藏  举报
 先用C#做一个COM
作用为下载图片和图片改名(使用GUID)
 
  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.   
  14. [assembly: AssemblyKeyFile("gachal_d_key.snk")]  
  15. namespace PicsDown  
  16. {  
  17.     [Guid("694C1820-04B6-4988-928F-FD858B95C880")]  
  18.     public interface DownLoad_Interface  
  19.     {  
  20.         [DispId(1)]  
  21.         void Down(string url, string dir);  
  22.         [DispId(2)]  
  23.         void SavePhotoFromUrl(string FileName, string Url);  
  24.         [DispId(3)]  
  25.         bool SaveBinaryFile(WebResponse response, string FileName);  
  26.     }  
  27.   
  28.     // 事件接口Database_COMObjectEvents     
  29.     [Guid("47C976E0-C208-4740-AC42-41212D3C34F0"),  
  30.     InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]  
  31.     public interface DownLoad_Events  
  32.     {  
  33.     }  
  34.   
  35.   
  36.     delegate void MyDelegate(string FileName, string Url);  
  37.   
  38.     [Guid("9E5E5FB2-219D-4ee7-AB27-E4DBED8E123E"),  
  39.     ClassInterface(ClassInterfaceType.None),  
  40.     ComSourceInterfaces(typeof(DownLoad_Events))]  
  41.     public class DownLoad : DownLoad_Interface  
  42.     {  
  43.         public void Down(string url,string dir)  
  44.         {  
  45.             string FileName;  
  46.             string Url;  
  47.             string tempUrl = url.Substring(url.Length - 5, 5);  
  48.             tempUrl = tempUrl.Substring(tempUrl.IndexOf(".", 0), 4);  
  49.             if (tempUrl == ".jpe")  
  50.             {  
  51.                 tempUrl = ".jpeg";  
  52.             }  
  53.             FileName = @dir + Guid.NewGuid().ToString() + tempUrl;  
  54.             Url = url;  
  55.   
  56.             MyDelegate del = new MyDelegate(this.SavePhotoFromUrl);  
  57.             IAsyncResult ar = del.BeginInvoke(FileName, Url, nullnull);  
  58.   
  59.             //del.EndInvoke(ar);   
  60.         }  
  61.   
  62.         /// <summary>   
  63.         /// 从图片地址下载图片到本地磁盘   
  64.         /// </summary>   
  65.         /// <param name="ToLocalPath">图片本地磁盘地址</param>   
  66.         /// <param name="Url">图片网址</param>   
  67.         /// <returns></returns>   
  68.         public void SavePhotoFromUrl(string FileName, string Url)  
  69.         {  
  70.             bool Value = false;  
  71.             WebResponse response = null;  
  72.             Stream stream = null;  
  73.   
  74.             try  
  75.             {  
  76.                 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);  
  77.   
  78.                 response = request.GetResponse();  
  79.                 stream = response.GetResponseStream();  
  80.   
  81.                 if (!response.ContentType.ToLower().StartsWith("text/"))  
  82.                 {  
  83.                     Value = SaveBinaryFile(response, FileName);  
  84.                 }  
  85.             }  
  86.             catch (Exception err)  
  87.             {  
  88.                 string aa = err.ToString();  
  89.             }  
  90.         }  
  91.   
  92.         /// <summary>   
  93.         /// Save a binary file to disk.   
  94.         /// </summary>   
  95.         /// <param name="response">The response used to save the file</param>   
  96.         // 将二进制文件保存到磁盘   
  97.         public bool SaveBinaryFile(WebResponse response, string FileName)  
  98.         {  
  99.             bool Value = true;  
  100.             byte[] buffer = new byte[1024];  
  101.   
  102.             try  
  103.             {  
  104.                 if (File.Exists(FileName))  
  105.                     File.Delete(FileName);  
  106.                 Stream outStream = System.IO.File.Create(FileName);  
  107.                 Stream inStream = response.GetResponseStream();  
  108.   
  109.                 int l;  
  110.                 do  
  111.                 {  
  112.                     l = inStream.Read(buffer, 0, buffer.Length);  
  113.                     if (l > 0)  
  114.                         outStream.Write(buffer, 0, l);  
  115.                 }  
  116.                 while (l > 0);  
  117.   
  118.                 outStream.Close();  
  119.                 inStream.Close();  
  120.             }  
  121.             catch  
  122.             {  
  123.                 Value = false;  
  124.             }  
  125.             return Value;  
  126.         }  
  127.     }  
  128. }  
 
在这之前先建立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的文件,内容如下
  1. <mce:script language="javascript"><!--  
  2.    
  3.     var objNetSamp=new ActiveXObject("PicsDown.DownLoad");//创建COM DLL对象    
  4.     var srcEvent = external.menuArguments.event;  
  5.     var EventElement;  
  6.   
  7.     if(typeof(srcEvent.clientX) == "undefined")  
  8.     {  
  9.         EventElement = external.menuArguments.document.elementFromPoint ( srcEvent.pointerX, srcEvent.pointerY );  
  10.     }  
  11.     else  
  12.     {  
  13.         EventElement = external.menuArguments.document.elementFromPoint ( srcEvent.clientX, srcEvent.clientY );  
  14.     }  
  15.   
  16.     if(EventElement != null && EventElement.tagName == "IMG")  
  17.     {     
  18.         objNetSamp.Down(EventElement.src,"C://pics//");  
  19.     }  
  20. // --></mce:script>   
 
OK,以后在IE保存图片就直接右键然后按X就会保存到c:/pic中,要改为其他目录只要修改download.htm的文件即可。
相关文章
|
Web App开发 前端开发
图片垂直居中(兼容IE6/7)
我们知道单行文字垂直居中时只用让`height=line-height`即可,那么图片以及多行文字是如何垂直居中的呢?现以如下图片和代码为例,将我搜集得到的方法做一个总结说明:
1621 0
|
Web App开发 JavaScript 前端开发
|
Web App开发 JavaScript 前端开发