【游客模式】——注册会员,加入11RIA 闪客社区吧!一起见证Flash的再次辉煌……
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 心羽 于 2018-12-14 10:01 编辑
以前就注意到在网页上可以通过特殊的链接访问程序,如tecent:// thunder://,却不知道其中原理。
如今已经了解到,这种链接是使用了操作系统提供的访问本地程序的方法,称为RegisterProtocol,在对于 Windows、Linux 和 OS X 操作系统都可以注册这样的协议。
比如说 Windows,其实只需写入注册表,即可实现协议与执行程序的关联。
例如腾讯的协议注册表如下:
[HKEY_CLASSES_ROOT\TENCENT]
@=”TencentProtocol”
“URL Protocol”=”D:\\Program Files\\Tencent\\QQ\\Timwp.exe”
[HKEY_CLASSES_ROOT\TENCENT\DefaultIcon]
@=”D:\\Program Files\\Tencent\\QQ\\Timwp.exe,1″
[HKEY_CLASSES_ROOT\TENCENT\shell]
[HKEY_CLASSES_ROOT\TENCENT\shell\open]
[HKEY_CLASSES_ROOT\TENCENT\shell\open\command]
@=”\”D:\\Program Files\\Tencent\\QQ\\Timwp.exe\” \”%1\”"
注册表内容在HKEY_CLASS_ROOT下,TENCENT即对应协议头 tencent://,....\shell\open\command键值代表运行某exe,将第一个参数传入程序,也就是网址本身。
所以了解到2个有用的事情:
1.如果想通过自己的应用程序或网页访问到QQ或者迅雷,这种自定义了RegisterProtocol的程序,访问起来都比较方便(网页访问还没研究)。本地程序访问可以直接在注册表中查找“HKEY_CLASS_ROOT\xxx”。
2.自己写的程序也可以定义RegisterProtocol
再记录一下几个事情:
1.想获得QQ的推广链接需要在腾讯推广的页面上注册 http://shang.qq.com/v3/index.html,需要通过授权才能让陌生人在不加好友的情况下与你聊天。否则,这个功能现在只能与自己的好友对话
2.推广链接是 http://wpa.qq.com/msgrd?v=3&uin=(QQ号码)&site=qq&menu=yes
3.TencentProtocol的使用格式 tencent://message/?uin=(QQ号码)&Menu=yes
最后是尝试着实现功能的部分
今天使用Adobe AIR for Desktop实现了一下打开与好友聊天窗口的功能,再次熟悉了一下NativeProcess的使用方法。
NativeProcess只能访问exe。每个NativeProcess都会打开一个进程。因此传入cmd.exe的路径即可使用命令行工具
[Actionscript3] 纯文本查看 复制代码 var n:NativeProcess = new NativeProcess();
n.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onOutput);
n.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, onError);
var info:NativeProcessStartupInfo = new NativeProcessStartupInfo();
info.executable = new File("c://windows//System32//cmd.exe");
n.start(info);
在onOutput函数接收到cmd的输出后,命令行启动完毕,就可以输入下一步命令,查找注册表了
[Actionscript3] 纯文本查看 复制代码 var cmd:String = 'reg query "HKEY_CLASSES_ROOT\\Tencent" /v "URL Protocol" \n';
n.standardInput.writeMultiByte(cmd, "utf-8");
注意命令中的\n,没有回车输入,是不会产生输出结果的
然后onOutput函数再次输出一堆信息,提取有用的输出,获取exe路径
再创建一个访问qq程序的进程,将TencentProtocol的链接传入,功能就完整实现了。(代码示例中使用123456789代替实际QQ号)
[Actionscript3] 纯文本查看 复制代码 if (str.indexOf("Timwp.exe") > -1) {
//字符串处理写的比较烂。。见谅。。
var idx:int = str.lastIndexOf(":");
var exeIdx:int = str.lastIndexOf(".exe");
var path:String = str.substr(idx-1, exeIdx - idx + 5).replace(/\\/g, "//");
trace("Path:" + path);
[attach]1450[/attach]
var tencentFile:File = new File(path);
trace(tencentFile.exists);
if(tencentFile.exists) {
var startQQcmd:String = "tencent://message/?uin=123456789&Menu=yes";
var tencentProcess:NativeProcess = new NativeProcess();
var tencentInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
tencentInfo.executable = tencentFile;
tencentInfo.arguments.push(startQQcmd);
tencentProcess.start(tencentInfo);
}
}
现在,(QQ已登录后)运行起来后就可以打开该好友的对话框了。
尝试输入自己的QQ号后启动程序,弹出这样的提示....
尝试输入自己的QQ号后,弹出提示
如果要在web端做实验,可以先尝试在浏览器地址栏中输入:
tencent://message/?uin=123456789&Menu=yes
在IE下没问题,在Chrome下却不好用,还没搞清楚为什么,以后再补充吧
附上测试代码源码:
|