top
Loading...
第一個ASP組件:設置服務器日期時間組件
網絡之門

在進入我們需習的第一個組件之前,小虎首先得說明一下,由于小虎的水平有限,可能在下面的這些說明過程中存在
不少錯誤,希望大家提出指證,在這里我希望能與大家分享一下ASP的學習經驗,小虎的這個網站推聳的是原創精神,很多
東西都是DIY,因此程序編寫過程中也會染上小虎本身不良的編程習慣。而且整個教學網站也只有小虎一個維護,因此技術
上肯定存在不少問題,望大家諒解。
ASP組件為我們的ASP編程提供了強大的擴展功能,比如我們需要在服務器中啟動一個應用程序,設置服務器的時間,
訪問操作系統內部信息等等,光靠ASP是干不了的。很大部分都需要借助自己開發的ASP組件才能實現,ASP本身為我們提供
了幾個非常有用的組件,ADO數據庫訪問組件,文件輸入輸出組件,廣告輪換組件等等。但有很多時侯我們需要的一些特殊
的功能。
首先,小虎用自己最熟悉的VB來做這個組件,大伙先在自己的計算雞上裝上個D版的VB吧,版本沒要求,但小虎是用
VB6的。開始第一步怎么樣呢?

(一)運行VB6,系統彈出了一個“新建工程”的對話框。選擇ActiveX Dll
接著可以在工程管理器上看見“工程一”和所屬的一個類“ Class1”,讓我們想先幫他們改上一個好聽的名字吧,
要不你在ASP中使用這個自制組件時,難道用
set obj=server.createobject("工程一.class1")
這么難聽的名字嗎?快去把它改改吧。我們把工程一改名為:systimeset,而class1改為:timeset。這樣好多了
吧?好了,開始為類timeset添加代碼了,先想一想,vb6本身好象沒有能設定系統時間和日期的函數吧(小虎不記得有沒
有了)那么怎么辦呢?別著急,大家聽過WIN32API函數嗎?這是微軟的windows系統級函數。提供有豐富的操作系統功能,
別說改日期,改時間,就是讓你的window重起動也可以。小虎打開了厚厚的WIN32API函數大全,終于找到了SetSystemTime
這個函數,win32API原本是設計為C++程序員使用的,在VB里調用它得先聲名,好在微軟還想得挺周到,VB40以上的版本,
都帶有API文本瀏覽器,我們運行它,它就在開始菜單的VB程序組里,運行后彈出了個框框,從文件菜單中選擇加載文本文
件。選擇WIN32API.TXT,API類型中選擇聲明,然后在那個可用項中找到SetSystemTime這個東西,雙擊它,一段代碼就出
現在選定項里,接著還要選東西,在API類型中選擇類型,找到SystemTime這個類型,同樣把它雙擊,好了按一下復制,把
剛才選擇的東西都貼到粘貼板中。關了這個API瀏覽器,我們的東西算是夠用了。
現在編寫VB代碼,雙擊timeset類,在類里加入下面的代碼。
Option Explicit
Private SystemTime As SystemTime
'這些就是從粘貼板里來的,我們看看systemtime這個類型,也就是差不多C++中的結構體,光看看他那八項就知道是一些
年,月,日,小時,分種。。。等的八大項,現在只要為這八大項賦上值再調用SetSystemTime這個WIN32API函數,瞧瞧你
的服務器吧,日期時間都給改掉了,如果你用win98來做服務器,試把它調到26號看看,有沒有CIH,^0^,由于這是個例
子,因此大部分值我都采用固定的值,而不是從ASP中傳過來的值,從ASP中傳過來只有HOUR,和MINUTE,小時和分鐘,如
果你們有興趣加上其它幾個的話,那么就修改一下程序吧。
Private Declare Function SetSystemTime Lib "kernel32" (lpSystemTime As SystemTime) As Long
Private Type SystemTime
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type

Dim tmp
Private m_Hour As Integer
Private m_Minute As Integer

'聲明timeset類的公有屬性,比如當你用set obj=server.createobject("systimeset.timeset")創建了一個服務器對象
時,需要對timeset進行賦值,也就是指定要設置的系統時間吧,那么就得聲明下面這寫timeset的公有屬性,我這有只聲
明了HOUR和Minute,也就是只提供更改小時和分鐘,如過你要改其它的幾個,那么自己弄上去吧。
Public Property Get Hour() As Integer
Hour = m_Hour
End Property
Public Property Let Hour(tmp_Hour As Integer)
m_Hour = tmp_Hour
End Property
Public Property Get Minute() As Integer
Minute = m_Minute
End Property
Public Property Let Minute(tmp_Minute As Integer)
m_Minute = tmp_Minute
End Property
有了HOUR和Minute屬性,那么你在ASP中創建了服務器對象obj時,就可以通過

obj.Hour=10
obj.Minute=10著樣來對它賦值,意思就是你打算把時間設為10:10分。

好了,最后就是公有方法了,我們聲命一個setup()的方法,只要一調用它,就馬上更改時間。其它幾個參數我固定使用常
量,大家可以改一下,這個不用我說了吧?應改會有體會了,總之不能空著,不然調用WIN32API函數會失敗返回0的,如過
是1就成功了。我這里設為1999-10-1日,我們的50周年國慶。


Public Function setup() As Integer
SystemTime.wDay = 1
SystemTime.wDayOfWeek = 1
SystemTime.wMilliseconds = 0
SystemTime.wMonth = 10
SystemTime.wSecond = 0
SystemTime.wYear = 1999
SystemTime.wHour =Hour
SystemTime.wMinute =Minute
setup = SetSystemTime(SystemTime)

End Function


最后保存工程,并編譯DLL,編譯后這個組件會由VB6自動注冊的,所以我們可以馬上在ASP 中調用了。我們馬上寫一
個簡單的ASP程序。
*test.asp
<% @language="vbscript" %>
<%
response.Expires=0
set obj=server.createobject("systimeset.timeset")
obj.Hour=10
obj.Minute=10
result=obj.setup

if result=1 then

response.write "系統時間已成功修改"

else

response.write "系統時間修改失敗"

endif


set obj=Nothing

%>


累死我了,一口氣做這個組件和打了這么多字,具體的ASP組件注冊等問題下次我會對大家解說。我把ASP組件源程序
先打包,那么大家就不用敲了,直接拿去編譯就行了,由于工程是vb6做的,所以需要VB6才能打開編譯。如果大家覺得本
站辦的挺好的話,請為小虎的網站做個推薦和友情連接吧,希望通過交流學習,我們能共同進步。如轉載小虎的文章,請
注明出處,必竟小虎是花了不少時間來敲的。~0~
以上組件的運行環境為:Pwin98+Pws4

北斗有巢氏 有巢氏北斗