あるマシンの使用状況を管理するソフトを作りたいと思っています。
マシンはWindows系全般です。(95〜XP、NTなど)
具体的には
・Windows起動後にログオン情報を取得する。
(ログオン日付、ログオン先、ログオンしたユーザー名)
・Windows終了時に終了時間を取得する。
・これらの情報をテキストファイルなどに保存する。
これを実現するためにはどうしたらいいでしょうか。
テキストファイルなどに保存する方法はわかりますが、
前の二つの項目がどうしてもわかりません。
APIがあるのかといろいろと検索してみましたが見つけることが出来ませんでした。
どうか、アドバイスをよろしくお願いいたします。
※ Windows2000、Delphi5.0 Enterpriseを使っています。
ユーザ名は
GetUserName
APIで取得できます。
ドメイン名は、WindowsNT系であれば、
LookupAccountName
APIで取得できます。
# 95/98/ME系ではわかりません。
ログオン日付は正確でないといけないのでしょうか。
各ユーザのレジストリ(HKEY_LOCAL_USER\Software\Microsoft\Windows\CurrentVersion\Run)か、スタートアップにソフトを起動するようにして、起動時刻を記録すればよろしいかと。
終了時は、WM_ENDSESSIONメッセージを受け取ったら、その時刻を記録し終了すればOKでしょう。
早速のアドバイスありがとうございます。
ユーザ名、ログオン日付、終了時刻はなんとかなりそうです。
ドメイン名を取得する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ではあきらめるしかないのでしょうか・・・。
ちょうどLookupAccountNameについて聞かれてる方がおられたので
それを参考にさせてもらいました。
そこで一つ質問なのですが、ドメイン名を取得するには
最初の引数をnil以外にしなければならないのでしょうか?
test
編集 削除