[WinAPI] CreateProcess, WaitForInputIdle 함수 사용 예제

이번 글에서는 CreateProcess와 WaitForInputIdle 함수를 사용하는 방법을 알아보겠습니다. 외부 프로그램을 실행하다 보면 컴퓨터가 느리거나 해서 실행이 늦게 될 수 있습니다.그럴때 WaitForInputIdle을 사용하셔서 코딩을 하시면 편합니다.저같은 경우 카카오톡이 느리게 실행됩니다. 아래 코드는 카톡 실행 후 메시지를 표시하는 코드입니다. 함수가 직관적이라 CreateProcess는 언급하지 않겠습니다. 조심하셔야 할 것은 WaitForInputIdle 2번째 인자에 INFINITE를 입력했는데 만약 실행하는 프로세스가 실행이 안되고 … Read more

[WinAPI] FindWindow 사용법

이번 글에서는 FindWindow에 대해 알아보겠습니다. FindWindow를 사용하시기 전 아래 헤더파일을 선언하셔야합니다. FindWindow의 함수 원형은 아래와 같습니다. FindWindow의 첫번째 인자는 클래스네임, 두번째 이름은 캡션을 입력해야합니다.하지만 꼭 두개의 인자를 입력해야 하는건 아닙니다. 둘 다 NULL로 입력해도 되고, 둘 중 하나만 입력해도 됩니다. 다만 클래스네임과 캡션은 대소문자를 구별하지 않지만 부분 검색은 하지않으므로 정확하게 입력하시는걸 추천합니다. 정상적으로 작동하면 찾은 윈도우의 HWND를 … Read more

[WinAPI] IP Address 읽어오기

이번 글에서는 IP를 읽어오는 방법에 대해 알아보겠습니다. 자신의 PC에서 IP를 확인하는 방법은 명령 프롬프트에서 확인할 수 있습니다. 윈도우+R을 눌러서 cmd를 입력하시면 명령 프롬프트가 실행됩니다. 위와 같은 화면에서 ipconfig를 입력하시면 아래와 같이 PC에 설정된 IP 리스트가 표시됩니다. 이 IP 리스트들을 WinAPI 함수를 사용하여 출력해보겠습니다. 아래와 같이 코딩을 해주세요. 위 코드를 빌드 실행하면 아래와 같이 출력 됩니다. 해당 코드는 IPv4에서만 … Read more

[MFC] 대화상자 ClassName 변경

이번 글에서는 MFC 대화상자 ClassName을 변경하는 방법을 알아보겠습니다.Win32프로그래밍에서는 생성할때 ClassName을 설정해줘서 쉬운데, MFC는 손을 여기저기에 대야합니다. 우선 MFC 프로젝트 생성 해주신 뒤, 아래와 같이 리소스뷰에서 .rc를 클릭하면 우측에 RC노드라 하여 속성이 나타납니다. 여기서 MFC Mode를 False로 변경하셔야합니다. 그 다음으로 대화상자 속성에서 Class Name을 원하는 이름으로 변경해줍니다. 그리고 난후 대화상자 클래스의 생성자에 아래와 같이 코딩합니다. 실행해서 Spy++로 확인해봅니다. 이렇게 ClassName을 지정해서 … Read more

시험 부정행위 방지 프로그램

대학 시절, 프로그래밍 언어 시험을 볼 때 교수님은 답안을 Visual Studio로 코딩해서 제출하라고 하신적이 있습니다.아무리 조교들이 뒤에서 감시 한다 한들, 1~2명의 조교가 100명가까이 되는 학생들의 부정행위를 막을순 없었습니다.몇몇 학생들이 인터넷을 실행하거나, 메신저를 실행해서 어떻게든 부정행위를 했던 기억이 납니다.(부정행위를 했던 모든 학생들은 결국 발각되어 재수강을 면치 못했습니다만..) 그때 당시, “부정행위를 감지할 수 있는 프로그램이 있으면 얼마나 … Read more

[WinAPI] Dump 파일 생성하기 – SetUnhandledExceptionFilter

프로그래밍을 하다 보면 여러 에러가 나타납니다. 문법을 틀리거나 잘못된 인자를 사용하는 등의 컴파일 에러, 링크 단계에서 나타나는 링크 에러, 프로그램 실행중 나타나는 런타임 에러가 있을 수 있습니다. 컴파일, 링크에러의 경우 보통 개발도구에서 에러 메시지를 표시하기 때문에 프로그래머가 확인하기 용이하지만(그렇다고 바로 고칠수 있는건 아니지만) 런타임 에러같은 경우는 프로그래머 의도와 다른 값으로, 프로그램 실행 중에 발생하므로, 프로그래머가 확인하기 어렵습니다. 예를들어 아래와 같은 … Read more

[WinAPI] GetNativeSystemInfo, 윈도우 OS 몇 bit인지 확인하기

오늘은 윈도우 OS가 몇 비트인지 확인하는 함수를 알아보겠습니다.우선 내 컴퓨터 우클릭 -> 속성에 들어가면 아래와 같이 몇비트 인지 확인 할 수 있습니다. GetNativeSystemInfo함수를 사용하면 손쉽게 알아낼 수 있습니다. 함수 원형은 아래와 같습니다. 해당 함수는 최소 Windows XP, Windows Server2003부터 지원합니다. 또한 아래 헤더와 라이브러리를 포함해야합니다. Header sysinfoapi.h(include Windows.h) Library Kernel32.lib 사용 방법은 아래와 같습니다. 만약 위 사양으로 … Read more

Spy++ 창 검색 따라해보기

개발을 하다보면 Spy++ 프로그램을 자주 쓰게 됩니다. 그중 윈도우를 검색 할 수 있는 기능이 있습니다. 개발 시작한지 별로 안됐을 땐 엄청 신기했는데, … 간만에 다시보니 만들만 한것 같습니다. 필요 없는 윈도우 하이라이트 기능은 빼고, 마우스 커서 변경도 빼고, 마우스 클릭 기능, 핸들 받아오고 명칭 얻어오고 표시하고, … 여차 여차 자료 찾아가면서 한두시간 해보니까 얼추 비슷하게 … Read more

[C++] 함수 오버로딩(Function Overloading)

안녕하세요 이번 글에서는 함수 오버로딩에 대해 알아보겠습니다. 우선 아래 코드의 문제점을 무엇일까요? swap(&c, &d);를 보시면 double형 주소를 인자로 전달합니다. 하지만 swap 함수는 int 포인트로 인자를 받으므로 “double *”가 “int *”로 형변환이 되지 않아 에러가 생깁니다. 그렇다고 아래와 같이 강제 형변환을 할 수도 없는 노릇입니다. C++에서는 같은 이름의 함수가 여러 개 올 수 있는데, 이것을 함수 오버로딩(function overloading)이라고 … Read more

[C++] 다각형 내부 판별 알고리즘(Point in polygon)

안녕하세요, 이번 글에서는 다각형(Polygon)으로 도형을 그리고 클릭 했을 때, 그 클릭한 곳이 다각형의 내부인지 외부인지 판별을 하는 알고리즘 입니다. 코드를 보기전에 우선 알고리즘 설명부터 하겠습니다.아래와 같이 5각형을 기준으로 클릭을 한다고 봅시다. 다각형 내부 클릭 다각형 외부 클릭 사람은 “내부/외부에 클릭을 했다“라고 쉽게 생각합니다. 하지만 컴퓨터의 경우엔 어떻게 알 수 있을지 고민을 해봐야합니다. Point in polygon … Read more