<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[js扫描系统进程　查看注册表实现。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Php/Js/Shell/Go]]></category>
<pubDate>Fri, 02 Aug 2013 09:50:56 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	背景：一些浏览器的其它协议，如自定义协议，会扫描进程的列表，及通过js读注册表（客户端会写注册表，以达到判断是否安装过客户端）等，是必须用到的。<br/>JS操作本地注册表有很多限制，默认浏览器是没有打开JS本地脚本操作的，如果浏览器没有配置且安全级别比较高，或者杀毒和防木马软件，直接用JS操作注册表会被阻止的，为了保险期间实现这个功能“需要在登陆后先判断是否安装过客户端才能进行游戏”，最好的方式个人认为是，通过客户端实现一个浏览器的插件，然后在JS中判断插件是否已经安装，然后通过插件启动客户端或做其他的事情比较稳妥。<br/><br/>一般这样做，我估计百度影音通过网络浏览器到播放器（好在没有广告）就是这么干的，好使用HTA(HTML application)，不然通过Web访问会出现安全提示。：<br/>干脆在客户端游戏安装过程中，同时安装一个BHO，好处是JS可以直接调用activex判断是否安装了，而且可以通过activex直接启动客户端，并且可以把用户的登录状成直接带到客户端游戏去，省得重新输密码登录。<br/><br/>读取注册表的办法，比较简单<br/>&lt;script&nbsp;&nbsp;language=&quot;JScript&quot;&gt;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; var&nbsp;&nbsp;WshShell&nbsp;&nbsp;=&nbsp;&nbsp;new&nbsp;&nbsp;ActiveXObject(&quot;WScript.Shell&quot;);&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keyValue&nbsp;&nbsp;=&nbsp;&nbsp;WshShell.RegRead(&quot;HKEY_LOCAL_MACHINE&#92;&#92;SOFTWARE&#92;&#92;Microsoft&#92;&#92;Windows&#92;&#92;CurrentVersion&#92;&#92;Internet Settings&#92;&#92;Cache&#92;&#92;Paths&#92;&#92;Directory&quot;);&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; alert(keyValue);&nbsp;&nbsp;<br/>&lt;/script&gt;&nbsp;&nbsp;<br/>原则上，只要注册表记录的信息都可以查到。<br/>但系统进程是在内存中，而不是在注册表也不是在硬盘上，可以使用win32 API CreateToolhelp32Snapshot 扫描系统进程，js不借助ActiveX是做不到的。<br/><br/>用WSH可以做很多的事...<br/>我实践了是可以hta来读取注册表和执行程序的，找开获得23.0，打开了cmd，如下：<br/><textarea name="code" class="JS" rows="15" cols="100">
&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0 Transitional//EN&quot;&gt; 

&lt;HTML&gt; 
&lt;HEAD&gt; 
&lt;TITLE&gt; New Document &lt;/TITLE&gt; 
&lt;META NAME=&quot;Generator&quot; CONTENT=&quot;EditPlus&quot;&gt; 
&lt;META NAME=&quot;Author&quot; CONTENT=&quot;&quot;&gt; 
&lt;META NAME=&quot;Keywords&quot; CONTENT=&quot;&quot;&gt; 
&lt;META NAME=&quot;Description&quot; CONTENT=&quot;&quot;&gt; 
&lt;/HEAD&gt; 
&lt;script language=&quot;javascript&quot;&gt; 
function readRegedit()&#123; 
var obj = new ActiveXObject(&quot;WScript.Shell&quot;); 
var s=&quot;HKEY_LOCAL_MACHINE&#92;&#92;SOFTWARE&#92;&#92;mozilla.org&#92;&#92;Mozilla&#92;&#92;CurrentVersion&quot;; 
var sNic = obj.RegRead(s); 
alert(sNic); 
&#125; 
&lt;/script&gt; 


&lt;script&gt; 
var WSH = new ActiveXObject(&quot;WScript.Shell&quot;); 
WSH.Run(&quot;C:&#92;&#92;Windows&#92;&#92;System32&#92;&#92;cmd.exe&quot;); 
&lt;/script&gt;　


&lt;BODY&gt; 
&lt;input type=&quot;button&quot; value=&quot;click me&quot; onclick=&quot;readRegedit();&quot;/&gt; 
&lt;/BODY&gt; 
&lt;/HTML&gt;
</textarea><br/><br/>如果用浏览器去执行这个会出现，如下问题，也就是说浏览器想要执行EXE可执行程序得要通过ActiveX控件去做,实践如下：<br/>http://localhost/jsReg.html<br/>ReferenceError: ActiveXObject is not defined<br/>[在此错误处中断] &nbsp;&nbsp;<br/>var WSH = new ActiveXObject(&quot;WScript.Shell&quot;);<br/>jsReg.html (第 22 行)<br/>ReferenceError: ActiveXObject is not defined<br/>[在此错误处中断] &nbsp;&nbsp;<br/>var obj = new ActiveXObject(&quot;WScript.Shell&quot;);<br/><br/><br/>参考来自：<br/>http://www.itlead.com.cn/article/html/148/2011-07-26/content-1027.shtml<br/><br/><br/><br/><br/><br/><br/><br/><br/>var wsh=new ActiveXObject(&quot;WScript.Shell&quot;);<br/>wsh.AppActive(&quot;title&quot;);//激活指定title的应用程序窗口<br/>wsh.CreateShortcut();//建立快捷方式<br/>wsh.Popup();//提示<br/>wsh.RegDelete();//删除注册表项<br/>wsh.RegRead();//读取注册表<br/>wsh.RegWrite();//写注册表<br/>wsh.Run(&quot;c:&#92;&#92;test.exe&quot;);//运行程序<br/>wsh.SendKeys();//摸拟按键<br/>//...........<br/><br/>等等一堆<br/><br/>你想要做系统进程扫描的话,可以使用WMI对象来...<br/><br/>呵呵,并不是像大花猫说的,JS还是可以做的...<br/><br/>http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/WDdnclinicscripting.mspx<br/><br/>这是MS上的WMI的参考文档...<br/>你想像一下msinfo32.exe可以做什么事,可以查看到什么系统信息,你用JS使用WMI也能做什么,但是前提是你的WMI服务要启动地哦,不过默认是启动地...<br/><br/><br/>http://www.microsoft.com/china/technet/community/scriptcenter/resources/wmifaq.mspx<br/>WMI的秘密<br/><br/>http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/wmi_reference.asp<br/>WMI参考文档。。。<br/><br/>你一定要去看看。。<br/>里面的示便都是用VBS做的，你自己用JS当然也一样能行。。。<br/><br/>来源：http://bbs.csdn.net/topics/80029089<br/><br/>参考：http://www.dewen.org/q/663<br/>http://blog.csdn.net/yu555666/article/details/1563547
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] js扫描系统进程　查看注册表实现。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>