私のコードとTOMATOさんのコードを組み合わせ、
プログラム起動時の日時とログオン日時のタイムラグをとり、
ログオンした時のタイマー値を求めるようにしてみました。
これでログオン時に自動起動する必要はなくなると思います。
#define WinStationInformation 8
#uselib "winsta"
#func WinStationQueryInformation "WinStationQueryInformationW" int, int, int, var, int, var
#include "kernel32.as"
#include "winmm.as"
#module
//フリーゲルの公式でユリウス通日(紀元前4713年1月1日からの日数)を求める
#defcfunc get_mjd int _y,int _m,int d
y=_y
m=_m
if m<=2 : m+=12 : y--
a=365*y+y/4
b=30*(m-2)+59*(m-2)/100
return a+y/400-y/100+b+d-678912
#global
TimeGetTime : st=stat //今現在のタイマーの値を取得
dim WSINFO, 304
size = 0
WinStationQueryInformation 0, -1, WinStationInformation, WSINFO, 1216, size
if stat {
dupptr LogonTime, varptr(WSINFO) + 104, 8, 2
sdim LogonTimeLT, 8
FileTimeToLocalFileTime varptr(LogonTime), varptr(LogonTimeLT)
sdim LogonTimeST, 18
FileTimeToSystemTime varptr(LogonTimeLT), varptr(LogonTimeST)
//現在の日時とログオン日時のタイムラグを求める
ms=gettime(7)-lpeek(LogonTimeST, 14) //ミリ秒
s=gettime(6)-wpeek(LogonTimeST, 12) //秒
m=gettime(5)-wpeek(LogonTimeST, 10) //分
h=gettime(4)-wpeek(LogonTimeST, 8) //時
d=get_mjd(gettime(0),gettime(1),gettime(3))-get_mjd(wpeek(LogonTimeST,0),wpeek(LogonTimeST,2),wpeek(LogonTimeST,6))
lag=d*86400000+h*3600000+m*60000+s*1000+ms
st-=lag //タイマー値を修正し、ログオンした時のタイマー値を求める
mes strf("ログオン日時: %04d/%02d/%02d %02d:%02d:%02d.%03d", wpeek(LogonTimeST,0), wpeek(LogonTimeST, 2), wpeek(LogonTimeST, 6), wpeek(LogonTimeST, 8), wpeek(LogonTimeST, 10), wpeek(LogonTimeST, 12),lpeek(LogonTimeST, 14) )
}
//以下、使用例。
//この時点でstには、ログオンした時のタイマーの値がミリ秒単位で入っている
repeat
TimeGetTime
x=stat-st //ログオンから今までの時間をミリ秒単位で取得
title "ログオンから"+str(x/1000)+"秒経過。"
await 1000
loop