在程序中打开QQ对话框

先摘抄一篇文章的部分内容 http://blog.csdn.net/cometnet/article/details/8222522,以防丢失


以前就注意到在网页上可以通过特殊的链接访问程序,如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的路径即可使用命令行工具


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的输出后,命令行启动完毕,就可以输入下一步命令,查找注册表了

var cmd:String = 'reg query "HKEY_CLASSES_ROOT\\Tencent" /v "URL Protocol" \n';
n.standardInput.writeMultiByte(cmd, "utf-8");

注意命令中的\n,没有回车输入,是不会产生输出结果的

然后onOutput函数再次输出一堆信息,提取有用的输出,获取exe路径

再创建一个访问qq程序的进程,将TencentProtocol的链接传入,功能就完整实现了。


                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);
			
			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);
			}
		}

试了一下直接在浏览器地址栏中输入

tencent://message/?uin=123456789&Menu=yes

在IE下没问题,在Chrome下却不好用,还没搞清楚为什么,以后再补充吧


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值