動作確認
C++ Builder XE4
Rad Studio 10.2 Tokyo Update 2 (追記: 2017/12/27)
http://qiita.com/AinoMegumi/items/f46dc3f6da4bb62e622e
にて試していることが興味を引いたので実装してみた。
Unit1.cpp
# include <Windows.h>
# include <iostream>
# include <LM.h>
# pragma comment(lib, "netapi32.lib")
...
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
PVOID pv;
DWORD n, i = 0, err;
do
{
switch (err = NetQueryDisplayInformation(0, 1, i, MAXDWORD, MAX_PREFERRED_LENGTH, &n, &pv))
{
case 0:
case ERROR_MORE_DATA:
if (n)
{
PNET_DISPLAY_USER p = (PNET_DISPLAY_USER)pv;
do
{
i = p->usri1_next_index;
OutputDebugString(p->usri1_name);
} while (p++, --n);
}
NetApiBufferFree(pv);
break;
}
} while (err == ERROR_MORE_DATA);
}
//---------------------------------------------------------------------------
結果
デバッグ出力: Administrator プロセス Project1.exe
デバッグ出力: Guest プロセス Project1.exe
デバッグ出力: [自分のユーザ名] プロセス Project1.exe
...
上記のコードはC++ BuilderというよりWin32APIというものなのかもしれない。
Delphiコードは以下にあるが、上記のコードの方が読みやすい。
http://stackoverflow.com/questions/27689479/delphi-list-all-windows-users-logged-on-a-computer