[WinAPI] FTP에 대하여(특징, 포트, 모드 차이점) – 1

최근에 회사에서 FTP 기능을 도입하기 위해 FTP에 대해 조사 할 일이 생겼는데, 조사한 내용을 정리하려 합니다. FTP(File Transfer Protocol)는 파일을 전송하기 위해 만들어진 프로토콜로서, 파일 전송 프로토콜이라고도 합니다.FTP는 TCP/IP 프로토콜을 가지고, 서버와 클라이언트의 사이의 파일 데이터를 전송하기 위해 만들어진 프로토콜입니다. HTTP 프로토콜은 문자, 사진, 음악, 동영상, 컨텐츠 등등 간단하게 사용할 수 있습니다. 하지만 큰 크기를 … Read more

[WinAPI] GetCurrentThreadId, 쓰레드 식별자

GetCurrentThreadID에 대해 알아보겠습니다. 프로그램을 개발하고 배포를 하면 개발자도 사람이다 보니 오류가 생기는 경우가 많이 있습니다.유지보수 하는 것 또한 개발자가 해야할 일 인데, 이 경우 보통 로그를 분석하거나, Debug Output, TRACE를 사용하여 코드 분석을 많이 하게 됩니다.이것은 매우 효율적인 방법이지만 GetCurrentThreadID를 사용하면 더욱 구별하기 쉬워집니다. 함수 원형은 아래와 같습니다. 매개변수는 없으며 반환값으로 쓰레드 식별자를 반환합니다. 예를들어 아래와 … Read more

[WinAPI] 내 경로 얻기, GetModuleFileName

간혹 개발을 하다보면, 현재 실행하고있는 내 프로그램의 경로를 알아야 할 때가 있는데, 그럴 때 GetModuleFileName 함수를 사용하면 쉽게 알아낼 수 있습니다. GetModuleFileName의 원형은 아래와 같습니다. 필요한 헤더파일은 아래와 같습니다. 매개 변수에 대한 설명은 아래와 같습니다. 함수가 성공하면 반환 값은 버퍼에 복사되는 문자열의 길이입니다.함수가 실패하면 반환값은 0이고, 확장 정보는 GetLastError에서 알 수 있습니다. 예시 코드는 아래와 … Read more

[WinAPI] 현재 언어 설정 읽기 – GetUserDefaultUILanguage

오늘은 언어 설정값을 읽어오는 방법을 알아보겠습니다. 배포하는 프로그램이 다국어를 지원하는 경우, 현재 System Locale 무엇인지 알아야 합니다. 이것은 제어판 -> 시계 및 국가 -> 국가 또는 지역 -> 관리자 옵션 탭에서 시스템 로캘 변경을 눌러 알 수 있습니다. 해당 Locale 값을 GetUserDefaultUILanguage 함수를 통해 알아 볼 수 있습니다. GetUserDefaultUILanguage를 사용하기 위해선 아래 조건을 만족해야합니다. Minimum supported client Windows 2000 Professional [desktop apps | UWP apps] … Read more

[WinAPI] SetWindowDisplayAffinity, Application Content 보호

이번 글에서는 윈도우의 내용을 보호하는 Windows API 함수, SetWindowDisplayAffinity에 대해 알아보겠습니다. SetWindowDisplayAffinity 를 사용하기 위해선 아래 조건을 만족해야 합니다. Minimum supported client Windows 7 [desktop apps only] Minimum supported server Windows Server 2008 R2 [desktop apps only] Header winuser.h (include Windows.h) Library User32.lib DLL User32.dll SetWindowDisplayAffinity 함수 원형은 아래와 같습니다. 첫번째 인자는 윈도우의 핸들이고, 두번째는 WDA_MONITOR, WDA_NONE 중 하나를 인자로 사용하시면 됩니다.WDA_MONITOR는 보호, WDA_NONE는 보호 해제입니다.반환 값은 해당 작업이 성공하면 TRUE, 실패하면 FALSE 입니다. MFC 대화상자에 아래와 … Read more

[WinAPI] CommandLine 사용하기

아래와 같이 프로젝트 속성에서 명령 인수를 사용하면 쉽게 command를 전달할 수 있습니다. C, C++에서 CommandLine을 사용할 때, main의 인자값인 int argc, char *argv[]를 사용합니다. 콘솔기반 C, C++에서는 아래와 같이 사용합니다. 위 코드의 실행 결과는 아래와 같습니다. Command가 있건 없건 0번째 인자에는 프로그램의 실행경로가 나오고, 그 이후부터 입력한 명령줄이 나옵니다. MFC에서는 아래 두가지 방법 중 하나를 … Read more

[WinAPI] Compress, Decompress 압축 API 사용하기

이번 글에서는 데이터를 압축하는 Windows API를 알아보겠습니다. Compress를 사용하려면 아래 헤더파일과 라이브러리를 추가해야합니다. 압축을 위해선 우선 핸들을 만들어야 합니다. 만들어진 핸들을 이용하여 우선 압축 사이즈를 구합니다. 사이즈가 정상적으로 반환이 되면 실제 압축을 진행합니다. 압축이 모두 정상적으로 실행되면 핸들을 닫아줍니다. 위 과정을 진행하면 pucComp 변수에 압축된 데이터가 있습니다. 이제 반대 과정인 압축 해제 함수를 알아보겠습니다.압축과 비슷하게 … Read more

[WinAPI] GetPrivateProfileSection, Section안의 모든 문자 읽어오기

이번글에서는 GetPrivateProfileSection에 대해 알아보겠습니다. GetPrivateProfileString을 사용하여 ini에 값을 읽어오는 글을 쓴 적이 있습니다.(링크)GetPrivateProfileString은 하나의 section과 하나의 key값에 대해 값을 읽어오는 것을 해봤습니다. GetPrivateProfileSection은 GetPrivateProfileString, GetPrivateProfileInt와 비슷하지만 Key가 없이 Section의 내용을 모두 읽어온다는 것이 특징입니다. 함수 원형은 아래와 같습니다. 반환값은 버퍼에 복사된 문자수 입니다. 만약 버퍼 크기가 충분치 않으면 nSize – 2값이 반환 됩니다.예시를 만들어보겠습니다. 우선 아래와 … Read more

[WinAPI] SetCapture, ReleaseCapture, 영역 밖에서도 WM_MOUSEMOVE 받기

발을 하다보면, 프로세스 영역 바깥에서는 WM_MOUSEMOVE 이벤트가 받아지지 않습니다. 이렇게 마우스가 영역 밖으로 이동했을 때 WM_MOUSEMOVE를 받고 싶으면 SetCapture, ReleaseCapture를 사용합니다.SetCaptrue 함수 원형은 아래와 같습니다. 이전에 SetCapture를 했던 HWND가 있다면 이전 HWND를 반환합니다. 없다면 NULL을 반환합니다.SetCapture를 했다면 후에 ReleaseCapture를 호출해야합니다.ReleaseCapture를 하면 영역 밖에서 WM_MOUSEMOVE가 더 이상 받아지지 않습니다. ReleaseCapture 함수 원형은 아래와 같습니다. 함수가 실패하면 return … Read more

[WinAPI] 리틀엔디안, 빅엔디안(htons, ntohs, htonl, ntohl)

이번 글에서는 엔디안에 대해 간단히 알아보고 Visual C++에서 어떻게 변환해야하는지 알아보겠습니다. 엔디안은 컴퓨터 메모리에 연속된 대상을 배열하는 방법을 말하며 바이트를 배열하는 방법을 말합니다.엔디안은 리틀엔디안, 빅엔디안, 미들엔디안이 있으며, 리틀엔디안 빅엔디안의 차이는 아래와 같습니다. 프로세서는 CPU아키텍쳐에 따라 다를수 있습니다만 네트워크상에서는 빅엔디안을 사용합니다. 빅엔디안과 리틀엔디안의 저장 방식을 가시적으로 보면 아래와 같습니다. 해당 저장 방식을 고려해야하는 때는 보통 서로 다른 프로세서끼리 … Read more