WindowsAPIにGetSystemTimeという
システム時刻(世界協定時刻[UTC])を取得する関数があります。
GetSystemTime関数の定義は、下記のとおりになっております。
VOID GetSystemTime(
LPSYSTEMTIME lpSystemTime // システム時刻
);
渡す引数は、SYSTEMTYME構造体のポインタです。
SYSTEMTYME構造体の定義は、下記のとおりになっております。
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME;
※WORDは、unsigned shortの別名。
下記が自作した確認スクリプト
// HSPから呼び出す外部DLLのファイル名を指定する
#uselib "kernel32.dll"
// 外部DLL呼び出し命令を登録する
#func GetSystemTime "GetSystemTime" var
// SYSTEMTIME構造体の内容を格納する配列変数
dim g_tagSystemTime, 4
// 配列変数の内容を2バイトずつ切り出して格納する変数
g_wDay = 0
g_wDayOfWeek = 0
g_wHour = 0
g_wMilliseconds = 0
g_wMinute = 0
g_wMonth = 0
g_wSecond = 0
g_wYear = 0
*HspMain
// システム時刻(世界協定時刻[UTC])を取得する
GetSystemTime g_tagSystemTime
// 配列変数の内容を2バイトずつ切り出す
/*
g_wYear = wpeek(g_tagSystemTime.0, 0)
g_wMonth = wpeek(g_tagSystemTime.0, 1)
g_wDayOfWeek = wpeek(g_tagSystemTime.1, 0)
g_wDay = wpeek(g_tagSystemTime.1, 1)
g_wHour = wpeek(g_tagSystemTime.2, 0)
g_wMinute = wpeek(g_tagSystemTime.2, 1)
g_wSecond = wpeek(g_tagSystemTime.3, 0)
g_wMilliseconds = wpeek(g_tagSystemTime.3, 1)
*/
g_wYear = wpeek(g_tagSystemTime, 0)
g_wMonth = wpeek(g_tagSystemTime, 1)
g_wDayOfWeek = wpeek(g_tagSystemTime, 2)
g_wDay = wpeek(g_tagSystemTime, 3)
g_wHour = wpeek(g_tagSystemTime, 4)
g_wMinute = wpeek(g_tagSystemTime, 5)
g_wSecond = wpeek(g_tagSystemTime, 6)
g_wMilliseconds = wpeek(g_tagSystemTime, 7)
// 変数の内容を表示する
mes g_wYear
mes g_wMonth
mes g_wDayOfWeek
mes g_wDay
mes g_wHour
mes g_wMinute
mes g_wSecond
mes g_wMilliseconds
stop
end
スクリプトの説明ですが、
GetSystemTime関数は、WindowsAPIなので、そのままでは、HSPでは使えません。
GetSystemTime関数は、kernel32.dllに含まれているので、
#uselib命令で、HSPから呼び出す外部DLLのファイル名を指定します。
次に、#func命令で、GetSystemTime関数を登録します。
3番目に、HSPには構造体がないので、配列で代用します。
ここで注意したいのが、SYSTEMTIME構造体には、8つの項目があるのに、
4つ要素の配列しか作ってないのかということですが、
SYSTEMTIME構造体の各項目は、unsigned short(2バイト)。
HSPのほうは、int(4バイト)。
つまり、配列の1番目に、年(wYear)と月(wMonth)が入ることになります。
最後に、各要素には、2項目ずつ入っているので、
wpeek関数で、2バイトずつ値を取得しています。
テスト結果は、
2010
1031
4
768
3
1792
7
3072
各項目と、バイト位置が対応していないようなので、
(g_wDayOfWeekに月が、g_wSecondに日が入っていると思う)
使うのであれば、各自修正してください。
>コードよめないからすいません。
通りすがりさんも、おっしゃられてますが、
スクリプトが読めないから聞くのではなく、
読めないなら読めるようにした方がいいです。
それに、私もHSPを使用しはじめてから、まだ約1ヶ月程なので
完全にHSPを理解していませんが、
HSPは、対応する機能が増えてきていますが、それでもまだまだ少ないと思います。
本格的にやるのであれば、C言語の知識は持っていたほうがいいと思います。
自分で調べる癖をつけたら、すぐに上達すると思いますので、
gmさんもがんばって下さい。