自定义协议

如何自定义协议

  1. 确定调用的程序。
  2. 创建注册表并执行。声明协议名和调用的程序、调用的方式。
  3. 通过URL在浏览器上调用。通过URL向操作系统调用相应的程序。

1

win10下我测试发现jar是调不了的,exe是可以的,所以建议程序是exe的。简单起见,使用gcc生成测试用的程序,文件名为a.exe

源代码a.c

#include 
#include 

# 执行 gcc a.c -o a.exe 生成程序
int main(int argc,char *argv[]){

    //读取缓冲区遗留的换行符0xA,不会暂停程序
    //getchar();
    //暂停程序
    //getchar();

    //调用记事本
    //system("notepad");
    //通过ADB将电脑上的文件推送到手机上
    //system("adb.exe push D:\\test.txt /mnt/sdcard/apk");

    //程序参数
    char* url = argv[1];
    printf("argv1=%s\n",argv[1]);

    //程序本身名称
    url = argv[0];
    printf("argv0=%s\n",argv[0]);

    //通过ADB从手机获取文件到电脑上
    //int i = system("adb.exe pull /mnt/sdcard/apk/test.txt D:\\adb ");
    //printf("i=%d",i);

    //通过winscp上传文件到服务器
    //system('pscp.exe -pw root test.txt [email protected]:/home/wang ');
    //printf("Input Enter To continue\n");
    system("pause");//暂停程序

    return 0;
}

运行结果

自定义协议_第1张图片

2

生成自定义协议的注册表文件,文件后缀为.reg,文件格式和操作系统有关,这里使用的是win10。代码中的REGEDIT4是协议格式,C:\\Users\\TR\\Desktop\\adb2\\a.exe是调用程序,HKEY_CLASSES_ROOT\opente在系统注册表中的目录,@="opente"中的opente则是协议名称,当然可以换成其他的,如qq、迅雷等。假如想获取参数,则声明"\"C:\\Users\\TR\\Desktop\\adb2\\a.exe\" \"%1\"",其中的\"%1\"就是参数,系统自动从URL获取的。

REGEDIT4

[HKEY_CLASSES_ROOT\opente]
"URL Protocol"="C:\\Users\\TR\\Desktop\\adb2\\a.exe"
@="opente"

[HKEY_CLASSES_ROOT\opente\DefaultIcon]
@="C:\\Users\\TR\\Desktop\\adb2\\a.exe,1"

[HKEY_CLASSES_ROOT\opente\shell]

[HKEY_CLASSES_ROOT\opente\shell\open]

[HKEY_CLASSES_ROOT\opente\shell\open\command]
@="\"C:\\Users\\TR\\Desktop\\adb2\\a.exe\" \"%1\""

点击运行reg文件
自定义协议_第2张图片
自定义协议_第3张图片

想查看或修改系统中的配置时,可以通过Win + R调出“运行”,输入regedit启动注册表编辑器,结果如下

自定义协议_第4张图片

3

在浏览器的地址栏上输入(或者html上的链接跳转)。

opente://hello

自定义协议_第5张图片
自定义协议_第6张图片

目前想到能应用的场景:

  • 分享,将分享的链接作为参数传到程序中保存,建立个人书签/资料库。
  • 爬虫,直接将链接传到后台爬虫系统中启动任务。

你可能感兴趣的:(爬虫)