사용자 정보 구하는 API
1. system32 폴더의 위치 알아내기 - GetSystemdirectory()
char sysDir[MAX_PATH];
GetSystemDirectory(sysDir, MAX_PATH);
2. Windows 가 설치된 폴더의 전체 경로 얻기 - GetWindowsDirectory()
|
3. 실행 프로그램의 경로 얻기 - GetCurrentDirectory()
char current[256]; |
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);
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 관련 ----------
#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;
}
<< 추가중 !! >>
// 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;
}