환경 설정 파일(ini)의 특정 값을 읽는 GetPrivateProfileString 사용 샘플입니다.

MFC 함수로 만들어서 사용한 예입니다.

 

BOOL CUtility::ReadOptionString(CString section, CString key, CString& value)         
                                                                                                            
     // 환경설정 파일이 ini .포멧 파일 형태                                                         
     CString strPath = GetAppDataPath() + L"\\option.dat";                                 
     WCHAR optValue[MAX_NAME] = {0};                                                          
     BOOL bSuccess = GetPrivateProfileString(section, key, NULL, optValue,  MAX_NAME, strPath);
     value = optValue;       
     return bSuccess; 
}

 

 

환경설정의 특정 섹션에 키와 값을 저장하는 샘플입니다.

 

BOOL CUtility::WriteOptionString(CString section, CString key, CString value)
{
 CString strPath = GetAppDataPath() + L"\\option.dat";
 BOOL bSuccess = WritePrivateProfileString(section, key, value, strPath);
 return bSuccess;
}

 


안드로이드 스튜디오 설치시 SDK Manager 설정

 

안드로이드 스듀디오 설치 후에 

 

1) SDK  Manager 선택하고...

 

   

 

 

2) Default Setting 의 하단의 Launch Standallone SDK Manager 을 클릭합니다.

 

3) 필요한 항목을 선택합니다.

 

   Tools은 최신의 버전이 자동 설치되므로 하위버전을 설치할 필요는 없습니다.(선택 불필요)

    가장 최신 버전(화면상의 Andriod 6.0(API 23)을 을 클릭해서 선택합니다.

    Extras을 체크해서 선합니다.'

 

 

 

  

 

 

 

간단한 안드로이드 스튜디오 단축키

 

1. 라인 전체 복사  [CTRL+D]

 

2. API  문서보기 [SHIFT + F1]

 

3. 이름 변경 [SHIFT+F6]

 

4. 북마크 [F11]

 

5. 디버깅 [SHIFT+F9]

   한 줄씩 이동 [F8]

   중단점 만만 때가지 이동 [F9]

 

** .단축키 설정은 File-Settings-Keymap 에서 변경가능함.

 

** 라이브 템플릿은 File-Settings-Editor-Live Templates 에서 설정

 

 

// 전체 경로로 하위 폴더까지 폴더를 생성하는 팁입니다.

 

void CUtility::MakeFolder(LPCTSTR path)
{
 if(!SetCurrentDirectory(path)){
  TCHAR tmpPath[MAX_PATH_EX];
  memset(tmpPath,0,MAX_PATH_EX);
  _tcscpy(tmpPath,path);

  LPTSTR rPt = _tcsrchr(tmpPath,'\\');

  if(rPt){   
   *rPt = 0;
   MakeFolder(tmpPath);
  }
  ::CreateDirectory(path,NULL);
 }
}

 

클립보드에 문자열을 저장하는 팁입니다.

 

OpenClipboard 로 클립보드를 오픈하고 SetClipboardData 함수로 클립보드에 문자열을 저장합니다.

 

BOOL CUtility::SetClipBoardString(CString data)

{

 

           if ( !OpenClipboard(NULL) )

           {

                     m_errMessage = L"Cannot open the Clipboard";

                     return FALSE;

           }

          

           if( !EmptyClipboard() )

           {

                     m_errMessage = _T("Cannot empty the Clipboard");

                     return FALSE;

           }

          

           wchar_t *wcBuffer = 0;

           HGLOBAL hglbCopy = GlobalAlloc( GMEM_MOVEABLE, ( data.GetLength() + 1 ) * sizeof (wchar_t) );

           wcBuffer = ( wchar_t* )GlobalLock( hglbCopy );

           wcscpy( wcBuffer,  data );

 

           GlobalUnlock( hglbCopy ); 

          

           if ( ::SetClipboardData( CF_UNICODETEXT, hglbCopy ) == NULL )

           {

                     m_errMessage.Format(L"Unable to set Clipboard data, error: %d", GetLastError());

                     CloseClipboard();           

                     return FALSE;

           }

           CloseClipboard();

           return TRUE;

 

 

 

dll 파일의 경로로  해당 파일의 버전을 가져오는 팁입다.

 

CString CUtility::GetDllVersion()

{

           TCHAR  path[MAX_PATH] = {0};

           GetModuleFileName(AfxGetStaticModuleState()->m_hCurrentInstanceHandle, path, MAX_PATH);

          

           DWORD infoSize = 0;

           CString ver;

 

     // 파일로부터 버전정보데이터의 크기가 얼마인지를 구합니다.

            infoSize = GetFileVersionInfoSize(path, 0);

            if(infoSize==0) return L"";

          

           // 버퍼할당

           char* buffer = NULL;

    buffer = new char[infoSize];

    if(buffer)

    {

          // 버전정보데이터를 가져옵니다.

          if(GetFileVersionInfo(path,0,infoSize, buffer)!=0)

          {

                VS_FIXEDFILEINFO* pFineInfo = NULL;

                UINT bufLen = 0;

               // buffer로 부터 VS_FIXEDFILEINFO 정보를 가져옵니다.

               if(VerQueryValue(buffer, L"\\",(LPVOID*)&pFineInfo, &bufLen) !=0)

               {   

                    WORD majorVer, minorVer, buildNum, revisionNum;

                    majorVer = HIWORD(pFineInfo->dwFileVersionMS);

                    minorVer = LOWORD(pFineInfo->dwFileVersionMS);

                    buildNum = HIWORD(pFineInfo->dwFileVersionLS);

                    revisionNum = LOWORD(pFineInfo->dwFileVersionLS);

 

                    // 파일버전 출력

                                                     ver.Format(L"%d.%d.%d.%d", majorVer, minorVer, buildNum, revisionNum);

                    //printf("version : %d,%d,%d,%d\n",majorVer, minorVer, buildNum, revisionNum);

                }

           }

          delete[] buffer;

      } 

           return ver;

}

 

자바스크립트의 Split 함수와 동일한 역할을 하는 MFC의 CString을 CStringArray을 변환하는 팁입니다.

 

 

CString str = L"AAA*??*BBB*??*CCCC";

CStringArray itemInfors;
 m_Utility.SpliteArray(str,  L"*??*", itemInfors);

 

void CUtility::SpliteArray(CString strData, CString Seperator, CStringArray& arr)

{

           CStringArray datas;

           CString Sep = Seperator;

           CString data = strData;

           int Position = 0;

           CString Token;

                    

           Token = data.Tokenize(Seperator, Position);

           if( Token != L"") arr.Add(Token);

 

           while(!Token.IsEmpty())

           {

                     // Get next token.

                     Token = data.Tokenize(Seperator, Position);

                     if(Token != L"")

                     {

                                arr.Add(Token);

                     }                                         

           }

}

 

 

PC내의 유선 또는 무선 네트워크 어댑터로부터 모든 Mac Address를 가져오는 샘플입니다.

 

간단하게 MFC의 CStringArray에 어드레스를 할당하는데, 적당히 활용하면 될 것으로 보입니다.

void CUtility::GetMacAddress(CStringArray& addresss)

{

           IP_ADAPTER_INFO AdapterInfo[16];        

           DWORD dwBufLen = sizeof (AdapterInfo); 

 

           DWORD dwStatus = GetAdaptersInfo(AdapterInfo, &dwBufLen);             

          if (dwStatus == NO_ERROR)

           {

                     PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo; 

                    while (pAdapterInfo)

                     {

                                CStringA strMacAddress;

                                strMacAddress.Format("%02X:%02X:%02X:%02X:%02X:%02X",

                pAdapterInfo->Address[0],

                pAdapterInfo->Address[1],

                pAdapterInfo->Address[2],

                pAdapterInfo->Address[3],

                                    pAdapterInfo->Address[4],

                pAdapterInfo->Address[5]); 

                                addresss.Add(CA2T(strMacAddress));

                                pAdapterInfo = pAdapterInfo->Next;    // 다으 링크

                     }                           

           }

}

 

리스트 컨트롤의 SetExtendedStyle 함수에 LVS_EX_FULLROWSELECT 옵션만 주면 됩니다.

 

CListCtrl m_ctlList;

......

m_ctlList.SetExtendedStyle(LVS_EX_FULLROWSELECT);

 

 

 

 

 

 

 

 

 

 

싸이코 패스 테스트

[일상] Sudean Story 2015.01.16 17:36 Posted by Sudean(수딘)

재미(?)삼아 해 보세요.

 

그러기엔은 좀 무서워요.

 

먼저 질문을 풀어보고 나중에 해석을 보세요~~~`

 

 

사이코패스 질문.docx

 

사이코패스 해석.docx

 

 

'[일상] Sudean Story' 카테고리의 다른 글

싸이코 패스 테스트  (0) 2015.01.16
3000년 마다 한번 핀다는 우담바라  (0) 2010.08.25