c++ builder XE4, 10.2 Tokyo > ユーザリストを取得する


動作確認
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