HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0524
poiuytrewログインしている時間を取得したい12解決


poiuytrew

リンク

2020/5/24(Sun) 15:11:26|NO.90622

Windowsにロスインしてからの経過時間を取得したいです。何か方法があればご教授願います。



この記事に返信する


Q

リンク

2020/5/24(Sun) 15:54:43|NO.90624

目的は何ですか?



poiuytrew

リンク

2020/5/24(Sun) 16:58:14|NO.90625

取得して1時間ごとに通知する、みたいなのが作りたいです



沢渡

リンク

2020/5/24(Sun) 18:35:59|NO.90626

こんな感じで、「プログラムを起動した時のタイマーの値」をTimeGetTimeで取得するような
プログラムを作り、ログオン時に自動的にプログラムを起動するようにしておくという方法はどうでしょう。

#include "winmm.as" TimeGetTime st=stat //このプログラムを起動した時のタイマーの値を取得 repeat TimeGetTime x=stat-st //プログラムを起動してから今までの時間をミリ秒単位で取得 title "プログラムを起動してから"+str(x/1000)+"秒経過。" await 1000 loop



poiuytrew

リンク

2020/5/25(Mon) 22:03:43|NO.90638

なるほど!
その方法がありましたか
ありがとうございます



TOMATO

リンク

2020/5/26(Tue) 01:07:49|NO.90646

解決してますが、ログインする際にウィンドウステーション(WinSta)も同時に作成されるので
作成された時間をWindowsのログイン時間とすれば取得できます。
https://docs.microsoft.com/ja-jp/windows/win32/winstation/window-station-and-desktop-creation


#define WinStationInformation 8 #uselib "winsta" #func WinStationQueryInformation "WinStationQueryInformationW" int, int, int, var, int, var #uselib "kernel32" #func FileTimeToLocalFileTime "FileTimeToLocalFileTime" var, var #func FileTimeToSystemTime "FileTimeToSystemTime" var, var dim WSINFO, 304 size = 0 WinStationQueryInformation 0, -1, WinStationInformation, WSINFO, 1216, size if (stat) { dupptr LogonTime, varptr(WSINFO) + 104, 8, 2 dim LogonTimeLT, 4 FileTimeToLocalFileTime LogonTime, LogonTimeLT dim LogonTimeST, 4 FileTimeToSystemTime LogonTimeLT, LogonTimeST mes strf("ログオン日時: %04d/%02d/%02d %02d:%02d:%02d", wpeek(LogonTimeST,0), wpeek(LogonTimeST, 2), wpeek(LogonTimeST, 6), wpeek(LogonTimeST, 8), wpeek(LogonTimeST, 10), wpeek(LogonTimeST, 12) ) }

本来は、リモートデスクトップ向けの関数のようですが、
第1引数をNULL指定すると自分自身を指します。

なお、コマンドプロンプトで quser や query user した結果と同じになります。



mikumo

リンク

2020/5/26(Tue) 10:20:20|NO.90648

解決してますが…
GetTickCountを使う方法も。

#uselib "kernel32.dll" #cfunc GetTickCount "GetTickCount" ms = GetTickCount() min = ms/1000/60 sec = ms/1000 - min * 60 mes "" + min + "min " + sec + "secs"
ただ49.7日を超えると0に戻ってしまうので、TOMATOさんの方法のほうが確実です。



沢渡

リンク

2020/5/26(Tue) 14:58:06|NO.90653

私のコードと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



poiuytrew

リンク

2020/5/26(Tue) 16:20:48|NO.90654

ありがとうございます!



トノ

リンク

2020/5/26(Tue) 19:19:41|NO.90655

よく分からないのですが、↓これでは駄目なんでしょうか…?

#include "winmm.as" TimeGetTime dialog "Windowsにログインしてから" + stat/1000 + "秒経過しました。" end
あるいは

#include "d3m.hsp" elapsedtime = d3timer() dialog "Windowsにログインしてから" + elapsedtime/1000 + "秒経過しました。" end



TOMATO

リンク

2020/5/26(Tue) 20:06:20|NO.90656

> よく分からないのですが、↓これでは駄目なんでしょうか…?

そのコードだと Windows が起動してからの経過時間になるかな。

49.7日問題があると思います。
高速シャットダウンが有効時も問題があります。

あと、Windows 起動時刻 ≠ Windows ログイン時刻 と思っていて、
Windows のアカウントは複数作れますし、
任意のタイミングでログオン、ログオフできるので。



トノ

リンク

2020/5/26(Tue) 21:18:26|NO.90658

>> NO.90656

なるほど、得心しました。



沢渡

リンク

2020/5/27(Wed) 13:00:04|NO.90663

あ、本題から離れたどうでもいいことですが、
NO.90653のコメントの「ユリウス通日」は「修正ユリウス日」の間違いです。
「紀元前4713年1月1日」ではなく「1858年11月17日」からの日数です。
Wikipediaの内容よく読んでませんでした、すみません。



ONION software Copyright 1997-2023(c) All rights reserved.