課題の理解
特に、どのくらいの間ユーザーがWindowsにログインしているかを知る必要があったことはありますか?これは、情報が必要なソフトウェアを開発している場合に特に重要です。その場合、あなたはひとりではありません。ユーザーセッションの期間を確認するのは直感的に見えるかもしれませんが、多くの開発者はこの情報を得るための直接的なAPI関数を見つけることに苦労しています。
このブログ記事では、現在のユーザーがWindows Vistaにログオンしている時間を確認する方法と、WMIクエリおよびVisual Basic Script(VBS)を使用した実用的な例を提供します。
直接的なAPIの不在
多くの開発者が直面する最初の障害は、ログイン期間の情報を簡単に提供できる直接的なAPI関数が存在しないことです。さらに、Windows Management Instrumentation(WMI)はしばしば強力な解決策ですが、それに不慣れな人々には圧倒されることがあり、その潜在的な能力を見逃してしまうことがあります。
解決策の概要
この問題を解決するために、WMIを使用してWin32_Session
クラスをクエリし、ユーザーセッションに関する詳細、特に開始時間を取得することができます。このセクションでは、これを簡単に設定する方法を詳しく説明します。
WMIのセットアップ
有用なリソース
コードに飛び込む前に、WMIに関するいくつかの主要なリソースを把握しておくと良いでしょう:
- さまざまな言語でのWMIの使用に関するMSDNページ
- Win32_Sessionのリファレンス
- Win32_LogonSessionのドキュメント
- WMIエクスプローラーツール - このツールを使用して、WMIクラスを簡単に探索し、クエリを実行します。
Win32_Sessionをクエリするためのサンプルコード
現在のユーザーのログイン期間を取得するために、シンプルなVBSスクリプトを書くことができます。以下は、その実演を示すコードスニペットの例です:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set sessions = objWMIService.ExecQuery _
("select * from Win32_Session")
For Each objSession in sessions
Wscript.Echo objSession.StartTime
Next
セッションのフィルタリング
コードを実行すると、複数のセッションが返されることに気付くかもしれません。インタラクティブユーザーに焦点を当てるために、セッションオブジェクトのLogonType
プロパティに基づいてフィルターを適用することを検討してください。これにより、アプリケーションにとって最も重要なセッションを特定できます。
さらなるリソース
コミュニティの意見やトラブルシューティングを求めている場合は、Sysinternals Forumのこのディスカッションをチェックしてください。コミュニティと関わることで、しばしば追加の洞察や解決策が得られます。
結論
ユーザーがWindowsにどれくらいの間ログオンしているかを確認することは難しそうに見えるかもしれませんが、WMIとVBSを活用することで、この作業は管理可能になります。ユーザーの活動を追跡するアプリケーションを開発しているか、単に管理目的で詳細を探している場合でも、上記の方法を使用すれば必要な洞察を得られます。
この解決策をアプリケーションに実装すれば、Windows上のユーザーセッションの監視がより効果的になります。