从用HTA伪装客户端程序已经有好些时日了,虽说可以最大限度的去定义自己的操作界面,但是顶上的名称栏总规不是太完美,而且,如果从HTA窗口的关闭按钮关闭窗口的话,根本就无法让程序执行退出的步骤,所以往往会让一个用户在一个时间段内无法继续登录。
后来一次偶然的机会,发现在HTA中使用iframe载入其它文件,那么这个文件在提交时的Session是无法保存的,在网上到处乱找,结果在一国外的博客上找到了些相关的内容。(事实上是GOOGLE翻译的译文中有相关的介绍,好在那次译文没有误导……)通过自定义HTTP头可以达到跨域的目的:HTTP头:P3P,HTTP头值:CP= CAO PSA OUR。这么一来你可以在iframe框架中加入如:记住用户名之类的功能。
接下来问题又来了:如果想退出程序,那么得分两步,先是执行iframe中的退出,接着再关闭HTA窗口。如果直接关闭HTA窗口,那么无法达到退出当前帐户的目的,一在段时间内会导致这个帐户无法登录。之前虽然对这问题一直耿耿于怀,可也没办法,将就着就算了。前些天准备伪装另一个客户端的时候又找了些相关的资料,结果还是白高兴一场。
可以实现从iframe框架内退出程序并关闭窗口,代码如下:
第一步:得在HTA中的iframe加入application="yes"
代码:<iframe frameborder="0" id="client" name="client" scrolling="no" src=" " application="yes"></iframe
第二步:在iframe载入的页面中加入:
< %
a=Request.QueryString("a")
%>
< a href="?a=1">退出</a>
< %
IF a=1 Then
response.write("<script language=javascript>")
response.write("alert('我敢保证,你现在用的是超链接退出');")
response.write("top.window.close();")
response.write("</script>")
End IF
%>
或
<input type="button" value="退出" onClick="javascript:top.window.close();">
两种都行,但第二种如果要实现交互得调用JS函数,而不是单纯的关闭。
好了,这么一来退出可以实现了,那么是不是可以也用相同的思路用按钮或是链接模拟最大化和最小化呢?呃……结果,我实现不了……
先抛开最大化和最小化的问题不谈,因为还有其它问题!
当隐藏最大化,最小化按钮后,顶部的名称栏就只有关闭按钮,如果想隐藏它,那么就得隐藏系统菜单这一项,可是这么一来整个窗口就会变成无边框的一个窗口。问题就这么来了,当出现的是一个无边框窗口时,不管你用鼠标怎么去操作,它始终无法被拖动……
好了,我的问题到这里基本上都出现了:
1、如何能通过iframe框架载入的页面中的按钮或链接实现HTA窗口的最大化和最小化?
2、无边框的HTA窗口如何移动?
如果这两项可以实现,那么模仿像酷狗,毒霸等软件的窗口也不是什么难事了!
哦,另外再提一下,HTA文件我都是用ExeScript转成EXE文件,嘿嘿,事实上它就是一个客户端,绿色的!