사용자 정보 구하는 API



1. system32 폴더의 위치 알아내기 - GetSystemdirectory()
 
  char
 sysDir[MAX_PATH];
  GetSystemDirectory(sysDir, MAX_PATH);

system32 폴더의 위치



2. Windows 가 설치된 폴더의 전체 경로 얻기 - GetWindowsDirectory()

    #include
 <windows.h>

    char windir[MAX_PATH];
    CString strTemp;
    GetWindowsDirectory(windir, MAX_PATH);

Windows 가 설치된 폴더의 전체 경로






3. 실행 프로그램의 경로 얻기 - GetCurrentDirectory()

    char current[256];
    GetCurrentDirectory(256, current);





4. 사용자 이름 얻기 - GetUserName()
   
    #include
 <windows.h>

    CString m_strComName;
    char szBuffer[MAX_COMPUTERNAME_LENGTH+1];
    DWORD dwcNameSize = MAX_COMPUTERNAME_LENGTH +1;

    GetUserName(szBuffer, &dwcNameSize);
    m_strComName.Format("사용자 이름 : %s", szBuffer);
    dc.TextOut(10, 10, m_strComName);

사용자 이름


    cf) #include<windows.h> -> #define MAX_COMPUTERNAME_LENGTH 31




5. 사용자 컴퓨터 이름 얻기 - GetComputerName()

    #include <windows.h>
   
    CString m_strComName;
    char szBuffer[MAX_COMPUTERNAME_LENGTH+1];
    DWORD dwcNameSize = MAX_COMPUTERNAME_LENGTH +1;

    GetComputerName(szBuffer, &dwcNameSize);
    m_strComName.Format("컴퓨터 이름 : %s", szBuffer);
    dc.TextOut(10, 10, m_strComName);

Computer 이름 얻기




6. 사용자 컴퓨터 로컬 시간 얻기 - GetLocalTime()

                         VOID GetLocalTime(LPSYSTEMTIME lpSystemTime);

로컬 시간을 조사해 준다. 로컬 시간이란 시스템이 유지하는 시스템 시간(UTC)에서

현재 컴퓨터가 실행되고 있는 시간대와 일광절약 설정을 계산하여 변환한 시간이다.

대한민국의 로컬 시간은 UTC 시간보다 9시간 더 빠르므로 시스템 시간에서 9시간만큼

더해주어야 로컬 시간이 구해진다. 일반적으로 현지 시간이라고 하면 이 함수로 구해지는
로컬 시간을 의미한다.

    SYSTEMTIME tm;
    GetLocalTime(&tm);              // 정보 얻은 현재 시간 구함
    wsprintf(str, "(마지막으로 조사한 시간: %d시 %d분 %d초)",
                               tm.wHour, tm.wMinute, tm.wSecond);
    TextOut(hDC, 25, 215, str, strlen(str));






--------- # Network, Socket 관련 ----------

7. 호스트 컴퓨터 IP Address 얻기

    #include <winsock2.h>
    #include <windows.h>

    char localHostName[256];
    IN_ADDR in_addr;
    HOSTENT *pHost;
    char ip[20];

    memset(localHostName, 0x00, 256);
    gethostname(localHostName, 256);
    pHost = gethostbyname(localHostName);
    memcpy(&in_addr, pHost->h_addr, 4);
    strcpy(ip, inet_ntoa(in_addr));

    CString strTemp;
    strTemp.Format("IP Address : %s", ip);
    dc.TextOut(10, 10, strTemp);

사용자 삽입 이미지

         cf). DLL을 불러오고 초기화, 해제 시켜주는 추가 작업 필요함!!







--------- ----------



8. 컴퓨터가 부팅된 모드 알아내기 - GetSystemMetrics(SM_CLEANBOOT)

    #include <windows.h>

    int iBootMode;
    CString strTemp;

    strTemp.Format("Booting Mode : ");
    iBootMode = GetSystemMetrics(SM_CLEANBOOT);

    switch (iBootMode) {
    case 0:
      strTemp = strTemp + "일반모드";
      dc.TextOut(10, 10, strTemp);
      break;
    case 1:
      strTemp = strTemp + "안전모드";
      dc.TextOut(10, 10, strTemp);
      break;
    case 2:
      strTemp = strTemp + "네트워크 연결 안전모드";
      dc.TextOut(10, 10, strTemp);
      break;
    }

Booting mode



<< 추가중 !! >>



// EnumWindows procedure

BOOL CALLBACK MyEnumWindowsProc(HWND hwnd, LPARAM lParam)

{

        char str[BUFSIZE];                                                            // 리스트박스에 넣어주기위해 문자저장

        char Cap[BUFSIZE];   // 캡션저장

        char sClass[BUFSIZE]; // 클래스저장

        DWORD dwStyle;

       

        // 열거된 윈도우의 스타일 조사

        dwStyle = GetWindowLong(hwnd, GWL_STYLE); 

       

        // 현재 style이 visible & overlapped인 윈도우를 찾는다.

        if ((dwStyle & WS_VISIBLE) == WS_VISIBLE

                && (dwStyle & WS_OVERLAPPED) == WS_OVERLAPPED

                && (dwStyle & WS_SYSMENU) == WS_SYSMENU) {

                GetWindowText(hwnd, Cap, 256);// 각 열거된 윈도우의 캡션 구함

                GetClassName(hwnd, sClass,256);// 각 열거된 윈도우의 클래스 명 구함

                strcpy(ClientInfor.window[ClientInfor.cbWindow].caption, Cap);// ClientInfor 구조체에 캡션명 저장

                // ClientInfor 구조체에 클래스 명 저장                    

               strcpy(ClientInfor.window[ClientInfor.cbWindow].classname, sClass);

                wsprintf(str, "%s", Cap);

                SendMessage(hList,LB_ADDSTRING,0,(LPARAM)str);

                ClientInfor.cbWindow++;

        }

               

        return TRUE;

}






 

Posted by six605
,