仿迅雷客户端的浏览器自定义协议的小程序

上家公司有这样的一个需求:

在网页中点一个链接,启动我们自己的一个客户端程序,并接受链接传递过来的参数,在客户端做相应的处理

 

1。自定义浏览器协议

     只要给注册表写进去一点信息就可以实现将自己定义的协议(如:mylink://)跟某客户端程序关联,google一下就可以了

2.只能让这个客户端运行一个实例

  

Main函数
 static void Main(string[] url)
        
{
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(
false);

            
if (url != null && url.Length > 0)
            
{
                
if (CreateMutex())
                
{
                    form 
= new MainForm(url[0]);
                    Application.Run(form);
                    ReleaseMutex(); 
                }

                
else
                
{
                    
int hd = FindWindow(null"自定义浏览器协议");
                    
if (hd == 0)
                    
{
                        
throw new Exception("Could   not   find   Main   window!");
                    }

                    
byte[] sarr = System.Text.Encoding.Default.GetBytes(url[0]);
                    
int len = sarr.Length;
                    COPYDATASTRUCT cds;
                    cds.dwData 
= (IntPtr)100;
                    cds.lpData 
= url[0];
                    cds.cbData 
= len + 1;
                    SendMessage(hd, 
0x004A0ref cds);
                }

            }

            
else
            
{
                
if (CreateMutex())
                
{
                    form 
= new MainForm();
                    Application.Run(form);
                    ReleaseMutex();
                }

                
else
                
{
                    MessageBox.Show(
"该程序只能运行一个实例!");
                }

            }

        }

 

mutex处理部分
        public static bool CreateMutex()
        {
            
bool result = false;
            mutex 
= new Mutex(true, Assembly.GetEntryAssembly().FullName, out result);
            
return result; 
        }

        
public static void ReleaseMutex()
        {
            
if (mutex != null)
            {
                mutex.Close();
            }
        }

3.消息传递   用windows的消息机制

   

消息结构
        /**//// <summary>
        
/// 该结构用来定义用户封装的数据
        
/// </summary>

        public struct COPYDATASTRUCT
        
{
            
public IntPtr dwData;
            
public int cbData;
            [MarshalAs(UnmanagedType.LPStr)]
            
public string lpData;
        }


       

 

 

消息处理
 

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

承接微信公众平台消息接口开发、PHP、.NET、javascript、html5程序开发;新浪微博应用、腾讯微博应用等各大开放平台应用开发业务

联系QQ:1433273389 

关注妈妈助手(账号mmhelper)方法:

1. 依次进入以下路径:朋友们—>添加朋友—>搜号码,输入mmhelper,不区分大小写,点击查找,然后点击关注。

2. 扫描二维码:


        /**//// <summary>
        
/// 消息处理
        
/// </summary>
        
/// <param name="m">消息</param>

        protected override void DefWndProc(ref Message m)
        
{
            
switch (m.Msg)
            
{
                
case 0x004A:
                    COPYDATASTRUCT mystr 
= new COPYDATASTRUCT();
                    Type mytype 
= mystr.GetType();
                    mystr 
= (COPYDATASTRUCT)m.GetLParam(mytype);
                    WebBrowserNavigatingEventArgs e 
= new WebBrowserNavigatingEventArgs(new Uri(mystr.lpData.ToString()), "");
                    OnNavigate(
null, e);
                    
break;
                
default:
                    
base.DefWndProc(ref   m);
                    
break;
            }

        }

转载于:https://www.cnblogs.com/CharlieSong/archive/2009/04/04/1429464.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值