丨你所具备能力

本教程综合难度为:(共10颗※)
您需要知道:Python语法基础。WEB开发基础。Qt库。win注册表编辑器。
如果您在学习的过程中,遇到困难,可以直接百度获取详细帮助,本文章不深入说明。

丨实例:腾讯QQ

丨丨链接

<召唤QQ音乐>
tencent://QQMusic/?uin=要召唤的QQ
<召唤多人聊天>
tencent://confhr/?subcmd=Start&fuin=要召唤的QQ&discname=房间名&user=设置自己昵称
<打开资料卡>
tencent://snsapp/?cmd=2&ver=1&uin=对方QQ&fuin=要召唤的QQ
<应该是进入对方的QT房间,没实际测试>
tencent://QTalk/?subcmd=Startup&account=对方QQ&roomid=0&fuin=要召唤的QQ
<弹出好友聊天窗口>
tencent://Message/?uin=对方QQ

丨丨效果

当在浏览器中打开这类链接,就会调用客户端,跳转到置顶界面。是不是很神奇呢?
具体就是碰到 tencent://… 时,自动调用 Timwp.exe,并把 tencent://… 地址作为第一个参数传递给 Timwp.exe。当然还他们还有mapi://,qqapi://等等。可以自定义。
那么我们也来搞一个吧!

丨效果图

丨网页

因为这是教程,我就用网页来输入编程猫的账号密码,然后传递到程序里获取用户数据。那具体的就是几个输入框加提交按钮,那么放上网页代码!

<!DOCTYPE html>
<html>
<head><title>注册应用程序协议--冷鱼制作</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1"><style>html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,dl,dt,dd,ol,nav ul,nav li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video,input{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline;font-family:"Segoe UI","Lucida Grande",Helvetica,Arial,"Microsoft YaHei",FreeSans,Arimo,"Droid Sans","wenquanyi micro hei","Hiragino Sans GB","Hiragino Sans GB W3",FontAwesome,sans-serif}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}ol,ul{list-style:none;margin:0;padding:0}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}table{border-collapse:collapse;border-spacing:0}a{text-decoration:none}img{max-width:100%}body{background-color:#0091e6}.main{margin:5em auto 0;width:22%}h1{font-size:2.4em;padding-bottom:28px;color:#fff;text-align:center}h2{font-size:1.5em;padding-bottom:28px;color:#0091e6;text-align:center}.login{padding:2em 0}.inset{position:relative;background:#fff;padding:2.5em;border-radius:.3em;-webkit-border-radius:.3em;-o-border-radius:.3em;-moz-border-radius:.3em;box-shadow:0 0 15px #545454}form span{display:block;font-size:1.0em;color:#333;font-weight:400}input[type="text"],input[type="password"]{padding:9px;width:93.4%;font-size:1.1em;margin:3px 0 25px;color:#666;background:#f0f0f0;border:0;font-weight:400;outline:0;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;border-radius:.2em;-webkit-border-radius:.2em;-o-border-radius:.2em;-moz-border-radius:.2em}input[type="text"]:hover,input[type="Password"]:hover,#active{border:0;outline:0}.sign{padding:10px 0 0;text-align:center}.submit{margin-right:11px;background:#0091e6;border:0;outline:0;padding:8px 30px;cursor:pointer;color:#FFF;font-size:.9em;border-radius:.3em;-webkit-border-radius:.3em;-moz-border-radius:.3em;-o-border-radius:.3em;transition:.5s all;-webkit-transition:.5s all;-moz-transition:.5s all;-o-transition:.5s all;font-weight:600;margin:0 auto}.submit:hover{background:#c5c5c5}.copy-right{text-align:center;width:97%;margin:10em auto 0}.copy-right p{color:#FFF;font-size:1em}.copy-right p a{font-size:1em;font-weight:600;color:#1567a5;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.copy-right p a:hover{color:#fff}@media(max-width:1440px){.main{width:25%}h1{font-size:2.2em}.copy-right{margin:5em auto 2em}}@media(max-width:1080px){.main{width:31%;margin:5em auto 0}.copy-right{width:97%;margin:3em auto 1em}}@media(max-width:1024px){.main{width:31%;margin:5em auto 0}.copy-right{width:97%;margin:3em auto 1em}}@media(max-width:991px){h1{font-size:2em}}@media(max-width:800px){.main{width:39%}}@media(max-width:768px){.main{width:42%;margin:11em auto 0}}@media(max-width:640px){.main{width:48%}h1{font-size:2.1em}}@media(max-width:600px){h1{font-size:2em}}@media(max-width:480px){.main{width:70%}}@media(max-width:320px){.main{width:95%;margin:1em auto 0}.copy-right{margin:1em auto 0}.inset{padding:2em}h1{font-size:1.9em}.login{padding:2em 0 0}}</style>
</head>
<body><div class="main"><div class="login"><h1>bcmlogin://协议测试</h1><div class="inset"><div><h2>编程猫参数传递</h2><span><label>编程猫账户:</label></span><span><input type="text" class="textbox" id="uid"></span></div><div><span><label>登录密码:</label></span><span><input type="password" class="password" id="pw"></span></div><div class="sign"><input type="submit" value="使用客户端登录" class="submit" onclick="cs()" /><script>function cs(){location.href="bcmlogin://"+document.getElementById('uid').value+","+document.getElementById('pw').value;}</script></div></div></div></div>
</body>
</html>

从代码里面可以看到在

丨登录程序

我们先不急,我们先把程序搞定了,显然它是通过协议来传递参数的,也就是打开程序时候也带了一定的参数,我们在python里面,可以通过sys库来获取参数。

import sys
print(sys.argv)

然后我们运行一下,发现他打印出是列表,只有一个值:程序地址。那因为我们没有传递参数给他,所以就没有。只有一个地址。
经过打包后测试,我发现传递参数过来后,他就要两个值,第二个就是了。所以我们写成sys.argv[1]来得到我们的参数,建议加个try,避免程序出错。
那我们要实现登录程序,我们得写一个登录程序的代码吧?

import requests
sessionn = requests.Session()
headers = {"Content-Type": "application/json","User-Agent": "Mozilla/5.0 (Windows NT 10.0; ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"}
url = "https://api.codemao.cn/tiger/v3/web/accounts/login"
session = sessionn.post(url, headers=headers, data=dumps({"identity": xxxxxxxxx, "password": xxxxxxx, "pid": "65edCTyg"}))

通过我的测试,我们需要把参数给分割,然后再赋值给data。就可以实现登录了。

try:gpus = sys.argv[1].split(',')user = gpus[0].split('//')[1]password = gpus[1][0:len(gpus[1])-1]
except:QMessageBox.warning(self, "登入失败,注意!", "参数缺失!请检查您是否账号密码填写完整!")

那么我的完整单页代码是这样的:

from PySide2.QtWidgets import *
from xy import Ui_MainWindow
import sys
import requests
from json import loads, dumps
class xyy(QMainWindow,  Ui_MainWindow):def __init__(self):super().__init__()self.setupUi(self)self.show()try:gpus = sys.argv[1].split(',')except:QMessageBox.warning(self, "登入失败,注意!", "参数缺失!请检查您是否账号密码填写完整!")sessionn = requests.Session()headers = {"Content-Type": "application/json","User-Agent": "Mozilla/5.0 (Windows NT 10.0; ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"}url = "https://api.codemao.cn/tiger/v3/web/accounts/login"session = sessionn.post(url, headers=headers, data=dumps({"identity": gpus[0].split('//')[1], "password": gpus[1][0:len(gpus[1])-1], "pid": "65edCTyg"}))if session.status_code == 200:user = requests.get("https://api.codemao.cn/web/users/details",headers=headers, cookies=session.cookies.get_dict())user = loads(user.text)self.textBrowser.setText("获取到参数:"+str(sys.argv[1])+"\n您的uid:{0}\n您的昵称:{1}\n您的简介:{2}\n您的电话:{3}\n您的qq:{4}\n\n---------------------\n申明:如果您的程序是在冷鱼帖子中下载的请放心,如果您是在其他人链接下载的注意,别人很可能会篡改软件,获取您的密码!!本程序仅学习,请勿非法用".format(user['id'], user['nickname'], user['description'], user['phone_number'], user['qq']))else:QMessageBox.warning(self, "登入失败,注意!", "请检查您传递的参数是否正确!通常是您输入的账号密码错误!")#程序入口
if __name__ == '__main__':app = QApplication(sys.argv)window = xyy()sys.exit(app.exec_())

我使用了QT界面,文末附源码文件和注册文件。为了能更好的测试,我们可以用pyinstaller来打包程序,获得exe文件。

丨注册协议

重点来了,敲黑板!
我们想要实现用协议调用程序就要修改注册表,那么注册表修改错了容易导致计算机崩溃,我这里直接给.reg注册文件,修改一下内容就可以直接导入进去。

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Bcmlogin]
@="bcmlogin"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\Bcmlogin\DefaultIcon]
@=""
[HKEY_CLASSES_ROOT\Bcmlogin\shell]
@=""
[HKEY_CLASSES_ROOT\Bcmlogin\shell\open]
@=""
[HKEY_CLASSES_ROOT\Bcmlogin\shell\open\command]
@="\"C:\\Users\\Administrator\\Desktop\\1.exe\" \"%1\""

通过上方内容,显然,bcmlogin就是协议名称,最下方的command的就是程序路径,就是自己的程序了,当然每隔电脑放置的程序地址不同,需要你手动修改,注意,地址要使用双斜杠哦。还有"是转义字符,请不要删除\。不然会失败。
如果你已经把程序改为你打包出来的那个程序就完事了,修改一下协议名称。
那么,保存吧!然后双击程序,导入到注册表。

丨测试

导入后,我们随便打开一个浏览器,输入自己的协议试试看看能否调用,比如在地址栏输入bcmlogin://。发现有反应了。那我们就试试用网页来传递参数吧!
我是设置的bcmlogin://账号,密码,其中我是用,(英文逗号)隔开的,我可以用分隔符来截取。

我们发现,的确是可以实现这种效果的。

基于win注册表注册程序协议,你也能从网址调用程序带参。相关推荐

  1. 什么是注册表?注册表怎么打开?

    什么是注册表?注册表是干嘛的?注册表怎么打开?如果上述关于注册表的问题还不了解的话,下面是关于注册表的知识介绍. 1.注册表是什么意思? 注册表是Windows系统中的一个重要的数据库,用于存储系统和 ...

  2. 注册表注册自定义协议

    1. 使用注册表编辑器 直接win + R 输入regedit,打开注册表编辑器, 在HKEY_CLASSES_ROOT右键创建新的项(名字自定义) 创建新的字符串值 名称 类型 数据 默认 REG_ ...

  3. 使用注册表设置程序软件开机自启

    以下两种方式均通过注册表方式实现程序软件开机自启,其中第二种方式是为了满足Windows系统启动默认显示程序软件而不显示Windows原有桌面,有无法还原的风险,请谨慎选择. Windows+R打开运 ...

  4. kX 3552插件===优化注册表小程序

     Windows操作系统需要忧化,kX安装后的注册表也是同样的道理. kX在日常使用当中,有一些注册插件是不经常用到的.太多无用的注册插件造成一些音频污染,会让你的注册表越来越臃肿,这里就是一个学 ...

  5. [转载] 黑鹰完完全全学习注册表——注册表概念介绍

    需要用到的软件:系统注册表(regedit.exe) 内容: 1.DOS时代的"注册表":在DOS时代,系统只能按照默认的DOS系统参数运行,根本谈不上注册表的概念,对于一些DOS ...

  6. c语言强制写注册表,:注册表的认识以及用c语言编写一个“百分之一熊猫烧香”...

    众所周知,熊猫烧香是一个威力强大的病毒.曾经的电脑只要被感染以后就只有重装系统这条路. 当然,现在可能对这种病毒已经有所防御,所以威胁没有以前那么大了. 熊猫烧香一个比较明显的特点就是会感染所有exe ...

  7. .html 打开方式注册表,注册表怎么打开

    核心提示:注册表怎么打开 你知道注册表怎么打开?你一定很想知道这个问题的解决方法和答案吧,下面一起来看看注册表怎么打开的知识吧. 注册表怎么打开 开始--运行--输入reged-- 你知道注册表怎么打 ...

  8. 好累!iTunes安装不上,UNKNOW\Components...,以及注册表“注册表编辑器无法在当前所选的项及其部分子项上设置安全性”,注册表某项打不开、删不掉,所有问题,都在此终结!

    这个问题困扰了我好几天,每天网上各种搜方法,全都没有用! 本来只是想装一个低版本的iTunes,结果牵出来这么一大坨东西. 第一个问题:安装到一半,程序要写注册表的时候,提示UNKNOW\Compon ...

  9. 注册表-注册表中的启动项!特全的那种!

    注册表编辑器中启动项的位置,如下: [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run] [HKEY_LOCAL_MAC ...

最新文章

  1. 2020年python工资一般多少钱-2020年Python的就业薪资有多少?前景如何?
  2. php的主要架构,php运行原理与基本结构
  3. Java中List接口重要实现类一ArrayList
  4. android intent 跳转卡顿_Intent七大属性
  5. elasticsearch 安装( 阿里云ECS )、远程访问、启动报错处理
  6. mysql从删库到跑路 亚马逊_Amazon RDS 上的 MySQL 的已知问题和限制 - Amazon Relational Database Service...
  7. 从storyboard加载视图控制器
  8. pandas按照字典格式替换dataframe的值
  9. linux openssh升级7.4,RHEL Centos上升级OpenSSH7.4p1
  10. excel打印预览在哪里_别再浪费A4纸了,Excel按下这个键,一张纸可以打印全部表格内容...
  11. 自动把动态的jsp页面(或静态html)生成PDF文档,并且上传至服务器
  12. 广州华龙展贸考场——科目三
  13. java去掉字符串的逗号_java – 从字符串数组中删除逗号
  14. 华为外包数据库面试问题分享20211225
  15. 输入圆半径 计算 直径 周长 面积
  16. 8583 mac 字符选择 java 实现_转 8583包 mac算法
  17. strtok()函数详解!
  18. 使用Crucible和FishEye链接svn库时遇到尝试添加或索引存储库时出现错误-版本中不存在的问题
  19. HTML5-企业宣传6款免费源码尽在h5edu.cn
  20. 数字网络监控和传统模拟监控的区别

热门文章

  1. OPC和DCOM配置
  2. C++ 并行编程(thread)
  3. 改变border-bottom的长度
  4. 重新安装mac 自带的apachectl_AirMail 可能是Mac上最好用的邮箱客户端
  5. borland终于把delphi卖掉了
  6. React Native字体问题解决方案指北
  7. 新冠疫情数据实时显示-next.js
  8. (Xilinx)FPGA中的差分信号
  9. xilinxFPGA使用差分信号及差分信号有关的原语
  10. 浏览器css有问题怎么办,css一招解决不同浏览器页面错位问题