從用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檔案,嘿嘿,事實上它就是一個用戶端,綠色的!