PC의 모든 사용자 이름을 얻을 수 있는 프로그램(확장판)

7629 단어 WindowsC++
예전에 썼어요.확장은 인터넷에 등장하는 두 번째 줄의 전체 이름을 얻을 수 있다.그나저나 전체 이름이 없으면 사용자 이름이 나온다.
이것은 내 PC에서 "net user Aino Megumi"명령을 실행했을 때의 출력 결과의 두 줄입니다.
PC의 모든 사용자 이름을 가져오는 프로그램
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;
}
실행 결과

Home GroupUser가 나오지 못하게 하는 건 아닐까 싶은데, 좋은 일이라 처리하지 못했어요.
그나저나 이것도 당연히 넷피32입니다.lib의 헤어 케어를 지정해야 합니다.

좋은 웹페이지 즐겨찾기