728x90

프로그램/C++ 22

문자 및 문자열의 split 구현

오늘은 문자 또는 문자열을 split 하는 방법에 대해 설명합니다. 보통 자바스크립트나 자바 등에서는 쉽게 제공이 되지만 C++에서는 직접 구현을 해줘야 합니다. 여러군데에서 설명나온걸 마니 보았지만 실제 업무에서 적용되어서 운영되는 것인지 명확하지 않기 때문에 제가 현재 사용하고 있는 함수를 공개합니다. * 문자단위의 split int Util::Split(LPCTSTR lpszExpression, TCHAR chDelimiter, CStringArray &result) { int nCount = 0; CString strSub; while (AfxExtractSubString(strSub, lpszExpression, nCount++, chDelimiter)){ strSub.TrimLeft(); st..

프로그램/C++ 2021.01.25

내 현재 폴더에 INI 파일 일고 쓰기

오늘은 INI 파일을 사용하는 법에 대해 설명하고자 합니다. 일반적인 INI 함수는 WINNT\SYSTEM 에 저장되어 사용되는것이 대부분인데 이 방식은 INI파일 관리하는데 문제점이 있고. 레지스트리 함수 또한 레지스트리에서 찾기도 힘들고, 관리 또한 힘든 점이 있습니다. 아래의 함수는 특정 폴더 위치에 INI을 생성해서 관리하는 방법을 설명하고자 합니다. 일반적으로 실행되는 위치 또는 그 하위폴더에 잡게 됩니다. * 특정폴더의 INI 읽기 // CString parm_command : command명 // CString parm_default : 없을경우 default값 CString Util::GetInformationINI(CString parm_command, CString parm_defaul..

프로그램/C++ 2021.01.15

디버깅을 위해 로그를 남길 때 사용하는 방법

오늘은 개발할 때 디버깅을 위해 파일로 로그를 남기는 저의 방법을 알려드리려고 합니다. 일반적으로 함수 하나로 해서 로그를 많이 남기게 됩니다. * 소스코드 // parm_log : 남길 로그 void Util::AddLog(CString parm_log) { CTime t = CTime::GetCurrentTime(); CString log_str; log_str.Format("[%04d/%02d/%02d %02d:%02d:%02d] %s", t.GetYear(), t.GetMonth(), t.GetDay(), t.GetHour(), t.GetMinute(), t.GetSecond(), parm_log); CString file_str, make_str; file_str.Format("%s\\log\\..

프로그램/C++ 2021.01.15

파일(exe,dll) 의 버젼 읽기

오늘은 exe파일이나 dll, ocx 등의 파일 버젼을 읽을 필요가 있게 됩니다. 그때 읽는 함수를 알려드리겠습니다. 현재 제가 사용하고 있는 소스입니다. * 소스코드 // CString parm_path : 파일경로 // CString parm_filename : 파일명.확장자 CString Util::GetAppVersion( CString parm_path, CString parm_filename ) { DWORD dwHandle, dwLen; UINT BufLen; LPTSTR lpData; VS_FIXEDFILEINFO *pFileInfo; CString pgm_path, ret_version; pgm_path.Format("%s\\%s", parm_path, parm_filename); dwL..

프로그램/C++ 2021.01.15

해당위치에 파일 존재유무 체크

오늘은 해당 특정폴더 안의 특정 파일이 존재하는지를 체크하는 함수 입니다. 간단하지만 막상 인터넷에서 찾아서 사용하려면 머리 아픕니다. 아래 함수 하나를 넣어놓고 호출해서 사용하시면 편리합니다. * 소스코드 // LPCSTR lpszFilePath : 폴더 및 파일명 BOOL Util::IsFileExist(LPCSTR lpszFilePath) { CFileFind find_file; if(find_file.FindFile(lpszFilePath)){ return TRUE; // 존재한다. } return FALSE; } * 사용법 BOOL present = IsFileExist("c:\\특정폴더\\aaa.exe"); 파일이 존재하면 TRUE 이겠죠... #존재#파일#폴더#현재폴더

프로그램/C++ 2021.01.15

바탕화면에 단축아이콘 만들기 (각종)

오늘은 윈도우 시스템의 바탕화면, quickLaunch, 시작메뉴 에 원하는 실행파일을 위한 단축아이콘 생성에 대한 통합 함수를 설명하고자 합니다. 아래 함수 하나면 원하는 위치에 생성할 수 있습니다. (win10 에서는 안해봐서 될지는 잘.. 해봐야 알 것 같네요..) 이 단축아이콘을 변경되는 경우는 PC을 재부팅해야 설정이 되더라구여.. 원래는 아래 함수 후에 시스템에 notify 을 줘야 하는데 그 부분은 검색해 보시면 됩니다. * 소스코드 // LPTSTR pszFilePath : 실행파일경로 및 파일명.확장자 // LPTSTR pszTitle : \\파일명.lnk // LPTSTR pszDescription : 표시할 툴팁 // BOOL bDesktop : 바탕화면 생성 유무 TRUE., FAL..

프로그램/C++ 2021.01.15

작업관리자에서 해당 프로세스가 실행중인지..

오늘은 해당 프로그램이 실행중인지 확인하는 함수를 소개하고자 합니다. 보통 FindWindow 을 사용하면 되지만.. 부팅 시 자동실행이나 PC의 부하가 많은 상태에서는 FindWindow 로는 해당 window을 찾지 못하는 경우가 있습니다. 그래서 직접 작업관리자에서 해당 파일이 실행중인지 확인해서 해당 핸들을 얻는 방법이 가장 정확한 방법이기에 소개합니다. 보통 FindWindow 로 먼저 처리하고, 프로그램을 운영을 하면서 FindWindow 가 통과하는 경우가 발생하면 CreateToolhelp32Snapshot 울 이용을 하개 됩니다.. * 소스코드 // CString parm_exe : exe 파일명 // DWORD parm_id : 프로세스 아이디 (모르는 경우 -1 사용) int Util..

프로그램/C++ 2021.01.15

강제로 프로세스 종료하기

오늘은 작업관리자에서 강제로 프로세스를 종료하는 방법이 있는데 이런 방법을 프로그램을 하는 것에 대해 설명하고자 합니다. 보통 메인 프로그램이 서브프로그램을 강제로 종료시킬 때 sendmessage 을 통해서 종료를 시키게 되는데 해당 프로그램이 lock이 걸렸거나 이벤트를 받지를 못하는 상황이 생겼을 때 위 메세지는 의미가 없게 된다. 그렇기에 강제로 프로세스를 종료를 시켜야 하는데 이에 사용한 함수를 소개 하고자 합니다. ** 소스코드 // CString strProcessName : 프로세스 파일명.확장자 BOOL Util::ProcessKill(CString strProcessName) { HANDLE hProcessSnap = NULL; BOOL bRet = FALSE; PROCESSENTRY3..

프로그램/C++ 2021.01.15

Http Request 로 파일 다운로드 하기

오늘은 C++에서 많이 사용하는 기능 중 웹서버에 있는 이미지나 파일을 다운로드 받아야 하는데.. 이 부분을 클래스로 만들어 사용하면 편할 것 같애 소개합니다. 제가 현재 사용하고 있는 클래스인데 이 클래스를 등록해 놓고 사용하시면 편리합니다. 6.0 기준입니다. * 소스코드 (header) #define IDS_HTTPDOWNLOAD_FAIL_PARSE_ERROR "An error occurred parsing the url: %s" #define IDS_HTTPDOWNLOAD_GENERIC_ERROR "An error occurred while attempting to download the file, Error:%1" #define IDS_HTTPDOWNLOAD_FAIL_CONNECT_SERVER ..

프로그램/C++ 2021.01.14

현재 실행중인 폴더 위치

오늘은 C++에서 현재 실행되고 있는 exe의 폴더 위치를 찾는 방법에 대해 설명합니다. 기본 방식이 GetModuleFileName 이란 함수를 통해서 위치를 찾게 되고 그것을 _tsplitpath 함수를 통해 분리하고 원하는 형태로 다시 재구성해서 현재 실행되고 있는 위치를 CString 에 저장해 놓고 필요한 곳에서 사용하시면 됩니다. 6.0 기준입니다 * 소스코드 TCHAR cur_folder[_MAX_PATH]={0,}; GetModuleFileName(AfxGetApp()->m_hInstance, cur_folder, _MAX_PATH); //AfxMessageBox(cur_folder); TCHAR drive[_MAX_DRIVE] = _T(""), dir[_MAX_DIR] = _T(""); ..

프로그램/C++ 2021.01.13
728x90
반응형