1. 아별툴
  2. 아별툴 패밀리
  3. 엑셀 질문하기
  4. 엑셀 강좌
  5. 엑셀 팁
  6. 엑셀 자료실
  7. 엑셀 연구과제
  8. 엑셀 북마크
  9. 관련 프로그램 소개

Win32 API 를 공부하기 시작해봅시당~ 꺄~ >.<

API 조회 수 12379 추천 수 0 2009.11.21 15:54:25

요즘 아별 엑셀 툴을 개발하면서 VBA가 제공하는 기능에 한계를 느껴

Win32 API를 공부하고 있습니다.

 

이 게시물은 제가 공부하면서 참고한 강좌들을 주르륵 열거해볼 생각입니다.

머.. 어떤 주제든지 처음 배우시는 분들은 똑같은 생각일테니까요..

 

 

일단 Win32 API에 대해 공부하려면 아래 강좌를 통해서 개념을 잡아주는게 좋을 것 같습니다.

 

0. Win32 API 뭥미? 하는 사람들에게 필요한 강좌

     http://examo.co.kr/tn/board.php?board=qqqApi&page=6&command=body&no=41

 

     ==> API라 함은 Application Programming Interface의 약자로 "응용 프로그래밍 인터페이스" ^-^;;

             그중에서도 Win32 API라 함은..

                                   운영체제와 응용프로그램 사이에 정보 교환을 위한 인터페이스라고나 할까.. ^-^;;

                                   그냥 윈도우기반 프로그래밍할때 필요한 함수와 정의들을 사용하기 위해 필요하다고 생각하세요.. ㅎㅎ

              VB에서는 윈도우즈에서 제공하는 함수 목록(라이브러리)을 참조가 아닌 선언(Declare)해서 사용한다고 하네요.

              VB가 할 수 없는 윈도우즈 핸들링이나 윈도우즈 기본 기능 또는 정보 등을 변경/참조할때 많이 사용합니다.

 

1. VBA에서 Win32 API 사용하는 방법.. 어떻게 선언하고 어떻게 사용할것인가?

          [Win32 API] 1. 윈도우 버전을 구하는 방법 - [1] API의 선언문 작성법 알아보기      <= 회원 가입이 필요합니다.

 

         ==> 항상 궁금했던.. 왜 API는 사용하기전에 저따구로 선언을 한 다음에 사용할까 하는 부분을 알려주시는군요.

         Declare Function GetTempFileName Lib "Kernel32.dll" Alias "GetTempFileNameA" (ByVal lpPathName As String, _

                                                                                                                                                   ByVal lpPrefixString As String, _

                                                                                                                                                   ByVal uUnique As Long, _

                                                                                                                                                   ByVal lpTempFileName As String) As Long

           Declare : 정의하죠

           Function : 함수를

           GetTempFileName : 정의할 함수죠.. MSDN에서 확인이 가능합니다.

           Lib : 윈도우즈 라이브러리를 참조할꺼란거죠..

           "Kernel32.dll" : 저 GetTempFileName가 정의되어 있는 라이브러리 이름이죠.. 역시 MSDN에서 확인한거죠.

           Alias : 대안으로 사용할 이름이란거죠. VB에서 이름 충돌이나 쓸수 없는 이름일경우를 대비한거죠~

           "GetTempFileNameA" : 대안으로 사용할 이름이죠. 끝에 A는 ANSI라서 그런거 같죠.

           ByVal lpPathName As Stiring : ByVal 참조 형식이 값이죠. lpPathName 변수명이죠. As String 문자열 형식이란거죠.

           ByVal ... 나머지.. : 위의 변수 정의한거랑 똑같죠?


1-2. 아래 사이트에서 잘 정리된 PPT자료를 발견했습니다.

 카페 가입하셔야하는데.. 카페 가입하시고.. 인사말만 적으면 바로 볼 수 있습니다. (chapter19-1.ppt 파일을 보세요..)

http://cafe.naver.com/javacircle/4524


 

2. 아래 사이트는 책(윈도우즈 API 정복)의 내용을 요약한건지 퍼온건지.. 그랬네요..

          http://bartsesang.tistory.com/tag/API%20정복정복

 

3. 아래 사이트에 Win32 API 강좌가 있습니다. C를 기준으로 설명을 해봐서.. 음.. 머 비슷하죠.. ㅋ

           http://www.winapi.co.kr/

           --> 2011.12.1일자로 도메인을 soen으로 변경했네요.. http://www.soen.kr

 

 

 

API 함수 중 자주 사용되는 함수가 정리된 것입니다.

네이버카페(xlsvba.cafe)의 수학쟁이님이 정리한 것을 퍼왔습니다.

 

상세 출처 : http://cafe.naver.com/xlsvba/1736 

 

 [API] Win32 API 개요 - API를 종류별로 간략하게 분류한 문서

 

 실무에서 많이 쓰일법한 API만을 모아서 정리해봤습니다...^^;

 API를 공부하시면서 모르는 API가 생긴다면 이 문서에서 간단하게 뜻을 알아두는 것도

 괜찮을 듯 싶습니다...

 

 - 16-bit Compatibility(16비트 호환성)을 위해 제공되는 obsoleted(대체된) API도 같이 실어보았습니다.

 - 간단한 사용 목적만 풀이하였고, 자세한 풀이 과정은 카페 검색 및 MSDN를 참고로 하시기 바랍니다.

 

 *** 창 관련 API

 

 - CreateWindowEx: 창을 생성하는 API

 - DestroyWindow: (같은 스레드의) 창의 클라이언트 영역 파괴 (WM_DESTROY 메시지 발생)

 - CloseWindow: (같은 스레드의) 창을 최소화시킨다.

 - ShowWindow: (같은 스레드의) 창을 보이거나 숨긴다. (C++ Windows API 프로그래밍에서 주로 쓰는 API) 

 - SendMessage: 창에 메시지를 보낸다. 메시지 처리 될때까지 대기한다.

 - PostMessage: 창에 메시지를 보내고, 큐에 붙인 채로 처리는 끝난다.

 - SendMessageTimeout: 메시지를 보내고 처리를 대기하되, 시간 제한을 둔다. (SendMessage() 함수가 무한정 대기하는 것을 미연에 방지하기 위해 나온 함수)

 - GetMessage: 메시지 큐에서 메시지를 꺼낸다.

 - PeekMessage: 메시지 큐에서 메시지를 꺼낸다.

 - TranslateMessage: WM_KEYDOWN/WM_KEYUP 메시지를 WM_CHAR/WM_DEADCHAR 메시지로 변형시킨다.

 - DispatchMessage: (같은 스레드의) 창 프로시저에 메시지를 전송한다.

 - CallWindowProc: 창 프로시저를 임의로 호출하는 API

 - DefWIndowProc: Windows의 기본 창 프로시저를 호출하는 API

 - MoveWindow: 창의 위치를 변경할 수 있는 API 

 - SetWindowPos: 창의 위치와 Z축 좌표, 그리고 여러가지 플래그를 줄 수 있는 API

 - GetWindowLong: 지정된 창의 속성(GWL_XXX)의 값을 반환한다.

 (예: GWL_STYLE, GWL_WNDPROC, GWL_HINSTANCE)

 *** 그 중 GWL_STYLE은 창 스타일 플래그로 이루어져 있다. (WS_XXX/WS_EX_XXX 의 비트 조합)

 - SetWindowLong: 지정된 창의 속성(GWL_XXX)의 값을 설정한다.

 - MsgWaitForMultipleObjectsEx: 커널 함수 WaitForMultipleObjectsEx의 메시지 확장 버전이다.

 - FindWindow: 창을 검색하는 API

 - FindWindowEx: 창을 검색하는 API. FindWindow의 확장판(Extended)으로 부모창과 같은 준위의 기준 창을 지정할 수 있다.

 - GetActiveWindow: 현재 스레드에 속한 활성화창의 HWND(창 핸들) 값을 반환한다.

 - GetForegroundWindow: 시스템 전역의 활성화 창의 창 핸들 값을 반환한다.

 - GetDesktopWindow: 바탕 화면(Shell Process(Explorer.exe)에 속한 Window)의 창 핸들 값을 반환한다.

 - GetWindowThreadProcessId: 창 핸들으로부터 스레드 식별자나 프로세스 식별자를 얻는 데에 사용한다.

 

 *** 입력 처리 관련 API

 

 - AttachThreadInput: 현재 스레드 입력 큐를 다른 스레드 입력 큐에 붙인다.

 - BlockInput: 키보드/마우스 입력의 수신을 차단할 지 결정한다.

 - ClipCursor: 마우스 커서를 특정 영역에 묶는 API

 - keybd_event: 키보드 이벤트를 발생시키는 API

 - mouse_event: 마우스 이벤트를 발생시키는 API

 - SendInput: 키보드/마우스 이벤트를 발생시키는 API

 - SetWindowsHook(obsoleted/대체됨): SetWindowsHookEx로 대체되었다. 현재는 16비트 후방 호환성을 위해서만 제공된다.

 - SetWindowsHookEx: 윈도우 훅을 설치하는 API

 - DefHookProc(obsoleted/대체됨): CallNextHookEx으로 대체되었다. 현재는 16비트 후방 호환성을 위해서만 제공된다.

 - CallNextHookEx: 다음 후크 체인에 훅 정보를 넘긴다. 다음 훅 체인이 없다면 비로소 시스템이 해당 훅을 처리한다.

 

 *** 마우스 커서 관련 API

 

 - GetCursorInfo: 커서 정보를 가져오는 API

 - GetCursor: 커서의 HCURSOR 핸들을 반환하는 API

 - SetCursor: 커서 설정 API

 - SetSystemCursor: 시스템 커서를 설정한다.

 

 *** 파일 관련 API

 

 _lcreat/_lopen(obsoleted/대체됨): CreateFile로 대체되었다. 현재는 16비트 후방 호환성을 위해서만 제공된다.

 _lclose(obsoleted/대체됨): CloseHandle로 대체되었다. 현재는 16비트 후방 호환성을 위해서만 제공된다.

 _lread(obsoleted/대체됨): ReadFile로 대체되었다. 현재는 16비트 후방 호환성을 위해서만 제공된다.

 _lwrite(obsoleted/대체됨): WriteFile로 대체되었다. 현재는 16비트 후방 호환성을 위해서만 제공된다.

 _llseek(obsoleted/대체됨): SetFilePointer로 대체되었다. 현재는 16비트 후방 호환성을 위해서만 제공된다.

 CreateFile: 파일을 생성하는 API

 CreateFileMapping: 파일을 메모리에 매핑하기 위해 파일매핑 개체를 생성한다.

 ReadFile: 파일을 읽는 APi

 WriteFile: 파일을 쓰는 API

 SetFilePointer: 파일 포인터(현재 파일이 써질/읽어질 부분의 오프셋, 즉 위치 값)를 쓴다.

 *** 간단한 팁: 파일 포인터를 읽으려면 2번째 인수에 0을 넣고, 4번째 인수에 FILE_CURRENT을 넣은 후,

 반환값(하위 32비트)과 3번째 인수에서 지정한 변수의 값(상위 32비트)을 참조하면 알아낼 수 있다.

 CloseHandle: 핸들을 닫는 API. 내부적으로 커널 개체의 Reference Count가 1 감소하며, 이 Count가 0이 되었을 때 비로소 메모리에서 제거된다. (*** 핸들을 제대로 닫지 않으면 메모리 누수가 발생한다.)

 MapViewOfFile(Ex): 파일 매핑 개체를 메모리에 매핑하는 함수

 UnmapViewOfFile: 메모리에 매핑된 파일을 매핑 해제하는 함수

 GetMappedFileName: 메모리에 매핑된 파일의 파일 이름을 구하는 함수

 *** 주의: 이 API는 psapi.dll의 API입니다. NT4 에서는 기본 지원하지 않는 함수로, 이 함수는 내부적으로 ZwQueryVirtualMemory NTAPI를 호출하는데, 이를 직접 호출하여 직접 파일 이름을 구할 수도 있습니다.

 

 *** 프로세스 관련 API

 

 CreateProcess: 프로세스를 생성하는 API

 CreateProcessAsUser: 프로세스를 생성하는 API. 실행될 사용자를 지정할 수 있다.

 OpenProcess: 프로세스를 열어 핸들을 반환받는 API

 ExitProcess: 현재 프로세스를 종료하는 API

 TerminateProcess: 프로세스를 강제로 종료하는 API

 *** 주의: 이 함수는 ExitProcess와 달리 Process Cleanup 과정이 발생하지 않습니다. 따라서 일부 프로세스는 이 함수로 종료할 시 매우 심각한 현상을 초래할 수 있습니다.

 GetExitCodeProcess: 프로세스의 종료 코드를 반환받는 API. 종료가 되지 않고 동작중이라면 STILL_ACTIVE(259)가 반환된다.

 Process32First/Process32Next: CreateToolhelp32Snapshot으로 생성된 스냅샷 개체로부터 프로세스 목록의 항목을 하나씩 반환해주는 함수이다.

 

 *** 디버깅 관련 API

 

 ReadProcessMemory: 다른 프로세스의 메모리를 읽는다.

 WriteProcessMemory: 다른 프로세스의 메모리를 쓴다.

 VirtualQueryEx: 다른 프로세스의 가상 메모리 정보를 얻는다.

 VirtualProtectEx: 다른 프로세스의 가상 메모리 보호 옵션을 조정한다.

 DebugActiveProcess: 실행중인 프로세스를 디버깅한다.

 DebugActiveProcessStop: DebugActiveProcess를 중단한다.

 DebugBreak: 중단점 예외(인터럽트 3)를 현재 프로세스에서 발생시킨다.

 DebugBreakProcess: 중단점 예외(인터럽트 3)를 다른 프로세스에서 발생시킨다.

 CreateRemoteThread: 스레드를 원격에서 생성시킨다.

 DebugSetProcessKillOnExit: 디버거가 종료될 때 디버깅 당하는 프로세스가 종료되지 않게 할 수 있다.


 

 

문서 첨부 제한 : 0Byte/ 2.00MB
파일 제한 크기 : 2.00MB (허용 확장자 : *.*)
List of Articles
번호 제목 글쓴이 날짜 조회 수sort
공지 엑셀일반 엑셀 짜투리 팁 모음.. imagefile [13] [레벨:30]아별 2005-07-22 52687
공지 엑셀일반 엑셀 잘 하는 요령은? _ 엑셀 추천사이트 포함 [2] [레벨:30]아별 2009-11-12 40725
공지 엑셀일반 엑셀 단축키(바로가는키, ShortCut) 총정리입니다. imagefile [247] [레벨:30]아별 2010-08-29 106133
72 엑셀일반 [엑셀에러] stdole32.tlb imagefile [레벨:30]아별 2013-09-27 112976
71 엑셀일반 엑셀에서 날짜와 시간 계산하는 법 image [레벨:30]아별 2008-06-27 26419
70 엑셀일반 [펌] sumproduct 함수를 이용한 다중 조건 계산 imagefile [3] [레벨:30]아별 2008-04-11 24827
69 엑셀일반 외부 파일에 연결된(외부 파일 참조) 셀 찾는 방법입니다. imagefile [4] [레벨:30]아별 2011-02-08 24347
68 엑셀일반 인쇄 설정 팁.. 머리글, 바닥글에 페이지 번호 설정하는 방법 imagefile [2] [레벨:30]아별 2011-08-03 22431
67 엑셀일반 셀 색상별 합계 구하기( GET.CELL( TYPE,REFERENCE) ) imagefile [레벨:30]아별 2008-03-12 21821
66 엑셀일반 엑셀 표시형식에 대해서 (셀서식, 숫자서식) file [1] [레벨:30]아별 2005-05-13 17952
65 엑셀일반 엑셀에서 유용한 단축키들.. [레벨:30]아별 2005-05-23 17394
64 엑셀일반 엑셀에서 줄바꿈 한 셀의 줄간격을 조절하기 [레벨:30]a☆ 2004-11-15 16245
63 엑셀일반 조건부 서식 적용하기 (로또 번호 맞춰 보기) imagefile [4] [레벨:30]아별 2011-04-11 16026
62 엑셀일반 엑셀에서 날짜 데이터 가공/계산/변환 등 종합 선물 세트. file [2] [레벨:30]아별 2008-06-30 15746
61 엑셀일반 두가지 조건을 만족하는 값 찾기 (직급별 연봉) imagefile [레벨:30]아별 2007-01-02 15159
60 엑셀일반 PDF파일을 EXCEL파일로 변환하기 file [1] [레벨:30]아별 2008-10-24 14082
59 엑셀일반 엑셀에서 다른 파일/시트 참조하기/영역설정하기 [레벨:30]a☆ 2004-10-15 13080
58 엑셀일반 열 방향의 데이터를 행방향 데이터로.. 데이터베이스(DB)형태로 변환하기.. imagefile [2] [레벨:30]아별 2008-08-20 12628
57 엑셀일반 [ XML ] 엑셀로 XML 데이터 다루기.. file [2] [레벨:30]아별 2011-12-26 12419
» API Win32 API 를 공부하기 시작해봅시당~ 꺄~ >.< file [레벨:30]아별 2009-11-21 12379