ログオン情報を取得するには?


michy  2003-09-12 20:45:24  No: 4795  IP: [192.*.*.*]

あるマシンの使用状況を管理するソフトを作りたいと思っています。
マシンはWindows系全般です。(95〜XP、NTなど)

具体的には
・Windows起動後にログオン情報を取得する。
  (ログオン日付、ログオン先、ログオンしたユーザー名)
・Windows終了時に終了時間を取得する。
・これらの情報をテキストファイルなどに保存する。

これを実現するためにはどうしたらいいでしょうか。
テキストファイルなどに保存する方法はわかりますが、
前の二つの項目がどうしてもわかりません。
APIがあるのかといろいろと検索してみましたが見つけることが出来ませんでした。

どうか、アドバイスをよろしくお願いいたします。
※  Windows2000、Delphi5.0  Enterpriseを使っています。

編集    削除
にしの  2003-09-13 00:57:55  No: 4796  IP: [192.*.*.*]

ユーザ名は
GetUserName
APIで取得できます。

ドメイン名は、WindowsNT系であれば、
LookupAccountName
APIで取得できます。
# 95/98/ME系ではわかりません。


ログオン日付は正確でないといけないのでしょうか。
各ユーザのレジストリ(HKEY_LOCAL_USER\Software\Microsoft\Windows\CurrentVersion\Run)か、スタートアップにソフトを起動するようにして、起動時刻を記録すればよろしいかと。

終了時は、WM_ENDSESSIONメッセージを受け取ったら、その時刻を記録し終了すればOKでしょう。

編集    削除
michy  2003-09-13 02:22:22  No: 4797  IP: [192.*.*.*]

早速のアドバイスありがとうございます。
ユーザ名、ログオン日付、終了時刻はなんとかなりそうです。
ドメイン名を取得するAPIの使い方なのですが、
どうもうまくいきません。

procedure TFrmMain.BitBtnLogonClick(Sender: TObject);
var
    chrAccountName : array [0..256] of char;
    Sid : psid;
    cbSid : DWORD;
    DomainName : array [0..256] of char;
    cbDomainName : DWORD;
begin
    LookupAccountName(nil,chrAccountName,Sid,cbSid,DomainName,
            cbDomainName,'SID_NAME_USE');  //←ココでエラーがでます。
    showmessage(DomainName);
end;
エラーの内容は、
「変数実パラメータと変数仮パラメータは同一の型でなければなりません」
です。
変数の定義がおかしいのだと思いますがいまいちよくわかりませんでした。
よろしければサンプルコードを教えていただけないでしょうか。

ちなみにMSDNでLookupAccountNameを調べてみたところ
やはりWindows95、98には非対応と書いてありました。
Windows95,98ではあきらめるしかないのでしょうか・・・。

編集    削除
michy  2003-09-13 02:34:28  No: 4798  IP: [192.*.*.*]

ちょうどLookupAccountNameについて聞かれてる方がおられたので
それを参考にさせてもらいました。
そこで一つ質問なのですが、ドメイン名を取得するには
最初の引数をnil以外にしなければならないのでしょうか?

編集    削除
test  2005-04-21 23:38:20  No: 4799  IP: [192.*.*.*]

test

編集    削除