LoginSignup
2
3

More than 5 years have passed since last update.

PC上の全てのユーザー名を取得するプログラム(拡張版)

Last updated at Posted at 2016-03-11

以前書いたPC上の全てのユーザー名を取得するプログラムを拡張し、net user (ユーザー名)で出てくる、2行目のフル ネームも取得できるようにしてみました。ちなみにフル ネームがない場合はユーザー名が出てくるようにしてあります。

これは私のPCで「net user AinoMegumi」というコマンドを実行した時の出力結果の上2行です。
get_user.png

get_all_user_info.cpp
#ifndef UNICODE
#define UNICODE
#endif
#include <Windows.h>
#include <string>
#include <vector>
#include <LM.h>

std::vector<std::pair<std::wstring, std::wstring>> get_all_user() {
    std::vector<std::pair<std::wstring, std::wstring>> re;
    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;
                    if (std::wcslen(p->usri1_full_name) == 0) re.emplace_back(std::make_pair(p->usri1_name, p->usri1_name));
                    else re.emplace_back(std::make_pair(p->usri1_name, p->usri1_full_name));
                    //                  DbgPrint("<%S> <%S>\n", p->usri1_name, p->usri1_comment);

#if 0   // for C++ Builder XE4
                    OutputDebugString(p->usri1_name);
#endif

                } while (p++, --n);
            }
            NetApiBufferFree(pv);
            break;
        }
    } while (err == ERROR_MORE_DATA);
    return re;
}

使い方例(この関数をget_all_user_info.hに書いたと仮定)

main.cpp
#include <iostream>
#include "get_all_user_info.h"
int main() {
    std::wcout.imbue(std::locale(""));
    for (auto& i : get_all_user()) {
        std::wcout << i.first << ", " << i.second << std::endl;
    }
    std::getchar();
    return 0;
}

実行結果
get_user_result.png

HomeGroupUser$出ないようにしようかなとも考えたんですが、まあいいやってことでその処理してません。
ちなみに、当然これもnetapi32.libのリンカー指定が必要です。

2
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3