본문 바로가기

Programming/Win32&MFC&COM

GetLastError() 함수를 통한 에러 확인 Windows 프로그래밍을 할 때 에러를 확인하기 위해서 GetLastError() 를 사용합니다.GetLastError() 함수의 원형은 다음과 같습니다. DWORD WINAPI GetLastError(VOID) GetLastError()는 가장 최근의 에러의 번호를 리턴해줍니다.함수 이름 자체가 함수의 기능을 충실히 설명하고 있습니다.GetLastError()로 에러 번호를 가져올 수 있는데 이 에러의 번호는 미리 정의가 되어있습니다.winerror.h 파일의 정의 내용 중 일부입니다. // // Define the severity codes // // // MessageId: ERROR_SUCCESS // // MessageText: // // The operation completed succes.. 더보기
프로세스 목록 확인하기(작업 관리자) 작업 관리자는 현재 실행 중인 프로세스의 목록을 보여줍니다.작업 관리자와 유사한 형태로 현재 실행 중인 윈도우 목록을 보여주는 방법은 다음과 같습니다.군더더기 코드를 없애기 위해서 콘솔 프로젝트로 작성합니다.창의 타이틀, 파일명, PID 정도를 추출해서 출력하겠습니다.이것은 일단 EnumWindows()라는 API함수를 이용해서 가능합니다.이 함수는 현재 실행되는 윈도우들의 핸들값을 전부 하나씩 첫번째 인자인 함수에 보내줍니다.그리고 실제 처리는 EnumWindowsProc(이름은 바꿔도 됨)에서 해주게 됩니다. #include #include #include #include using namespace std; BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lPa.. 더보기
API, MFC에서 사용하는 변수형 API, MFC를 처음 공부하면 생소한 변수 타입을 자주 접하게 됩니다. API, MFC에서 주로 사용되는 변수 타입은 다음과 같습니다.BOOL기존의 bool(true, false의 값을 가짐)BSTR32비트 문자 포인터BYTE8비트 부호 없는(unsigned) 정수COLORREF색 지정에 사용되는 32비트값(RGB매크로 사용으로 생성 가능)DWORD32비트 부호 없는(unsigned) 정수, 세그먼트 어드레스 / 옵셋LONG32비트 부호 있는 정수LPARAM윈도우 프로시저 또는 콜백 함수의 인수로서 넘어가는 32비트 값LPCSTR문자열 32비트 포인터(const 속성)LPSTR문자열 32비트 포인터LPCTSTR정수문자열로의 32비트 포인터(Unicode 지원)LPTSTR문자열로의 32비트 포인터(Uni.. 더보기
MFC에서 프로그램의 hInstance와 hWnd 구하기 MFC에서 hInst와 hWnd를 필요로 할 때가 있습니다.Win32 API함수 등을 이용할 때 사용해야 할 필요가 생깁니다. // hInstance를 구하는 법 AfxGetInstanceHandle(); // hWnd를 구하는 법 GetSafeHwnd(); 이 2개를 이용해서 사용하면 됩니다.예제 코드는 다음과 같습니다. ::SetWindowLong(GetSafeHwnd(), GWL_EXSTYLE, ::GetWindowLong(GetSafeHwnd(),GWL_EXSTYLE) | WS_EX_LAYERED); this->SetLayeredWindowAttributes(RGB(0, 0, 255), 128, LWA_ALPHA | LWA_COLORKEY); 윈도우를 투명하게 만들어주는 코드로 GetSafeHwn.. 더보기
윈도우 리전(Region) 설정해서 윈도우 모양 바꾸기 윈도우 리전(Region)은 똑같은 사각형 형태의 밋밋한 윈도우의 모습을 바꿔줍니다.자기가 만들고 싶은 모양을 얼마든지 만들 수 있습니다.윈도우 리전을 생성하는 API함수는 다음과 같이 있습니다.CreatePolygonRgn(); CreateRectRgn(); CreateEllipticRgn();딱 봐도 그 용도가 보이는 참 착한 함수입니다.Polygon은 다각형, Rect는 사각형, Elliptic은 원을 그리는 용도로 쓰입니다.이 함수들 외에도 생성된 리전을 합쳐주는 함수와 만들어진 리전을 화면에 세팅하는 함수가 있습니다.CombineRgn(); SetWindowRgn();이 함수들이 그런 역할을 수행하는 함수입니다.CombineRgn() 은 만들어진 리전을 합치는데 사용하는 함수입니다.SetWind.. 더보기
다중 실행 방지 코드(CreateMutex) 프로그램을 보면 하나의 프로세스(실행되어진 프로그램)만 허용하는 경우가 있습니다.보통 게임에서 물가 안정 등의 이유로 다중 실행 방지를 많이 사용합니다.그래서 그걸 깨는 멀티로더들도 암암리에 제작이 됩니다.다중 실행을 방지하는 코드는 뮤텍스라는 걸 사용합니다.물론 뮤텍스가 아닌 다른 커널 오브젝트를 사용해도 가능합니다.뮤텍스는 커널 오브젝트기 때문에 모든 프로세스를 통틀어서 하나만 존재합니다.이 뮤텍스가 중복되는 지 확인(이미 존재하는가 확인)하면 되는것이죠.이 뮤텍스를 이용한 방법을 알아보도록 하겠습니다. #include #include HANDLE hMutex = nullptr; int main() { hMutex = ::CreateMutex(nullptr, TRUE, _T("Unique_Name_o.. 더보기
자신의 IP를 확인하기 자신의 IP를 확인하는 방법입니다.이전에 작성한 코드인데 Visual Studio 2012에서는 다음과 같은 코드를 맨 위에 삽입해야 합니다. #define _WINSOCK_DEPRECATED_NO_WARNINGS Visual Studio 2010이나 그 이하 버전에는 사용하지 않아도 될 것 같습니다.전체 코드는 다음과 같습니다.IP가 여러 개 리턴될 수 있기 때문에 vector로 리턴을 하도록 하였습니다. #define _WINSOCK_DEPRECATED_NO_WARNINGS #include #include #include #include #pragma comment(lib, "ws2_32.lib") using std::cout; using std::endl; using std::string; usin.. 더보기