{{위키데이터 속성 추적}}
{{소프트웨어 정보
| name                   = 윈도우 API<br />Windows API
| logo                   = 
| screenshot             = ReactOS Frankenstein Email.png
| screenshot size        =
| caption                = [[ReactOS]]는 윈도우 API를 구현하는 자유-오픈 소스 운영 체제이다.
| author                 = 
| developer              = [[마이크로소프트]]
| released               = {{Start date and years ago|1985|11|20}}
| latest release version = 
| latest release date    = 
| latest preview version = 
| latest preview date    = 
| replaces               = [[도스 API]]
| operating system       = [[마이크로소프트 윈도우]], [[OS/2]]
| platform               = 
| genre                  = [[API]]
| license                = [[사유 소프트웨어|사유]]
| website                = https://learn.microsoft.com/en-us/windows/apps/
}}
'''윈도우 API'''({{lang|en|Windows API, WinAPI}})는 [[마이크로소프트 윈도우]] 운영 체제들이 사용하는 [[API]]이다. [[C (프로그래밍 언어)|C]]/[[C++]] 프로그램에서 직접 운영 체제와 상호 작용할 수 있도록 만들어졌으며, 그보다 더 낮은 수준의 제어는 Ntdll.dll을 사용한 낮은 수준의 DLL로 가능하다.

== 개요 ==
윈도우 API가 제공하는 기능은 다음과 같이 여덟 가지이다.<ref name="msdn-overview2">[[마이크로소프트 개발자 네트워크]] (July 2005). ''[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/overview_of_the_windows_api.asp Overview of the Windows API.] {{웨이백|url=http://msdn.microsoft.com/library/default.asp?url=%2Flibrary%2Fen-us%2Fwinprog%2Fwinprog%2Foverview_of_the_windows_api.asp |date=20200731024005 }}'' Retrieved August 28, 2005.</ref>

; 기본 서비스<ref name="msdn-base">[[마이크로소프트 개발자 네트워크]] (July 2005). ''[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/base_services.asp Base Services.]{{깨진 링크|url=http://msdn.microsoft.com/library/default.asp?url=%2Flibrary%2Fen-us%2Fwinprog%2Fwinprog%2Fbase_services.asp }}'' Retrieved August 28, 2005.</ref>: 이용할 수 있는 중요한 리소스를 윈도우 시스템에서 사용할 수 있게 도와 준다. [[파일 시스템]], [[컴퓨터 하드웨어|장치]], [[프로세스]], [[스레드]], [[예외 처리|오류 처리]]와 같은 것들을 포함한다. 이러한 기능들은 16비트 윈도우의 경우 <code>kernel.exe</code>, <code>krnl286.exe</code>, <code>krnl386.exe</code> 파일에, 32비트 윈도우의 경우 <code>[[kernel32.dll]]</code>에 상주한다.
; 고급 서비스
:부가 기능을 커널에 사용할 수 있게 도와 준다. [[윈도우 레지스트리]], 시스템 종료/다시 시작 (또는 중단), [[윈도우 서비스]] 시작/중지/만들기, 사용자 계정 만들기와 같은 것들을 포함한다. 이러한 기능들은 32비트 윈도우의 <code>advapi32.dll</code>에 상주한다.
; [[그래픽 장치 인터페이스]] (GDI)<ref name="msdn-gdi">[[마이크로소프트 개발자 네트워크]] (July 2005). ''[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/graphics_device_interface.asp Graphics Device Interface.]{{깨진 링크|url=http://msdn.microsoft.com/library/default.asp?url=%2Flibrary%2Fen-us%2Fwinprog%2Fwinprog%2Fgraphics_device_interface.asp }}'' Retrieved August 28, 2005.</ref>: 출력되는 그래픽 콘텐츠를 [[컴퓨터 디스플레이|모니터]], [[프린터]], 기타 [[출력 장치]]에 전달하는 기능을 제공한다. 16비트 윈도우의 경우 <code>gdi.exe</code>에, 사용자 모드에서의 32비트 윈도우의 경우 <code>[[gdi32.dll]]</code>에 상주한다. 커널 모드 GDI 지원은 그래픽 드라이버와 직접 통신하는 <code>win32k.sys</code>가 제공한다.<ref>{{웹 인용|url=http://msdn.microsoft.com/en-us/library/ms789535.aspx|제목=G|publisher=[[마이크로소프트 개발자 네트워크]]|확인날짜=2009-01-28|보존url=https://web.archive.org/web/20090112084113/http://msdn.microsoft.com/en-us/library/ms789535.aspx|보존날짜=2009-01-12|url-status=dead}}</ref>
; [[윈도 사용자|사용자 인터페이스]]<ref name="msdn-ui">[[마이크로소프트 개발자 네트워크]] (July 2005). ''[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/user_interface.asp User Interface.]{{깨진 링크|url=http://msdn.microsoft.com/library/default.asp?url=%2Flibrary%2Fen-us%2Fwinprog%2Fwinprog%2Fuser_interface.asp }}'' Retrieved August 28, 2005.</ref>: 화면 [[창 (컴퓨팅)|창]]뿐 아니라 단추와 스크롤바와 같은 가장 기본적인 컨트롤을 만들어 관리하고, 마우스와 키보드 입력을 받는 기능, 윈도우의 [[그래픽 사용자 인터페이스|GUI]]와 연동하는 기능을 제공한다. 이 기능은 16비트 윈도의 경우 <code>user.exe</code>에, 32비트 윈도의 경우 <code>[[user32.dll]]</code>에 상주한다. [[윈도우 XP]] 버전 이후로 기본 컨트롤은 공통 컨트롤(공통 컨트롤 라이브러리)과 함께 <code>[[comctl32.dll]]</code>에 상주한다.
; 공통 대화 상자 라이브러리<ref name="msdn-comdlg">[[마이크로소프트 개발자 네트워크]] (2005). ''[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/commondialogboxlibrary.asp Common Dialog Box Library.]{{깨진 링크|url=http://msdn.microsoft.com/library/default.asp?url=%2Flibrary%2Fen-us%2Fwinui%2Fwinui%2Fwindowsuserinterface%2Fuserinput%2Fcommondialogboxlibrary.asp }}'' Retrieved September 22, 2005.</ref>: 응용 프로그램에 파일 열기 및 저장, 색 및 글꼴 선택 등을 위한 표준 [[대화 상자]]를 제공한다. 16비트 윈도의 경우 <code>commdlg.dll</code>에, 32비트 윈도의 경우 <code>[[comdlg32.dll]]</code>에 상주한다. 이 라이브러리는 API의 "사용자 인터페이스" 집합에 들어 있다.
; 공통 컨트롤 라이브러리<ref name="msdn-ccl">[[마이크로소프트 개발자 네트워크]] (July 2005). ''[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/common_control_library.asp Common Control Library.]{{깨진 링크|url=http://msdn.microsoft.com/library/default.asp?url=%2Flibrary%2Fen-us%2Fwinprog%2Fwinprog%2Fcommon_control_library.asp }}'' Retrieved August 28, 2005.</ref>: 응용 프로그램이 운영 체제가 제공하는 일부 고급 컨트롤에 접근할 수 있게 도와 준다. 여기에는 [[상태 표시줄]], [[진행 표시줄]], [[도구 모음]], [[탭 브라우징|탭]]을 포함한다. 이 라이브러리는 [[동적 링크 라이브러리|DLL]] 파일에 상주하는데, 16비트 윈도의 경우 <code>[[commctrl.dll]]</code>에, 32비트 윈도의 경우 <code>comctl32.dll</code>에 상주한다. 이 라이브러리는 API의 "사용자 인터페이스" 집합에 들어 있다.
; 윈도 셸<ref name="msdn-shell">[[마이크로소프트 개발자 네트워크]] (July 2005). ''[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/windows_shell.asp Windows Shell.]{{깨진 링크|url=http://msdn.microsoft.com/library/default.asp?url=%2Flibrary%2Fen-us%2Fwinprog%2Fwinprog%2Fwindows_shell.asp }}'' Retrieved August 28, 2005.</ref><ref name="msdn-shell2">[[마이크로소프트 개발자 네트워크]] (2005). ''[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/shell_intro.asp Shell Programmer's Guide.]{{깨진 링크|url=http://msdn.microsoft.com/library/default.asp?url=%2Flibrary%2Fen-us%2Fshellcc%2Fplatform%2Fshell%2Fprogrammersguide%2Fshell_intro.asp }}'' Retrieved August 28, 2005.</ref>: 윈도 API의 구성 요소는 응용 프로그램이 [[운영 체제 셸]]이 제공하는 기능에 접근하고 변경하고 강화할 수 있게 도와 준다. 이 구성 요소는 16비트 윈도의 경우 <code>[[shell.dll]]</code>에, 32비트 윈도의 경우 <code>[[shell32.dll]]</code>에 상주한다. 셸 라이트웨이트(Shell Lightweight) 유틸리티 기능은 <code>[[shlwapi.dll]]</code>에 있다. 이 라이브러리는 API의 "사용자 인터페이스" 집합에 들어 있다.
;  네트워크 서비스<ref name="msdn-network">[[마이크로소프트 개발자 네트워크]] (July 2005). ''[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/network_services.asp Network Services.]'' Retrieved August 28, 2005.</ref>: 다양한 [[컴퓨터 네트워크|네트워킹]] 기능을 운영 체제에 제공한다. [[넷바이오스]], [[윈속]], [[NetDDE]], [[원격 프로시저 호출|RPC]] 등을 포함한다.
=== 웹 ===
[[인터넷 익스플로러]] 웹 브라우저 또한 응용 프로그램에 자주 쓰이는 수많은 API를 노출하며 이러한 것들은 윈도 API의 일부로 간주할 수 있다. 인터넷 익스플로러는 [[윈도우 98 SE]] 이후의 운영 체제부터 포함되어 왔으며 [[윈도우 98]] 이후로 웹 관련 서비스를 제공하고 있다.<ref name="msdn-browser">[[마이크로소프트 개발자 네트워크]] (January 2006); ''[http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/prog_browser_node_entry.asp Programming and reusing the browser] {{웨이백|url=http://msdn.microsoft.com/library/default.asp?url=%2Fworkshop%2Fbrowser%2Fprog_browser_node_entry.asp |date=20061015195532 }}'' Retrieved January 22, 2006.</ref> 구체적으로 다음과 같은 가능을 제공하는 데에 쓰인다:
* 추가할 수 있는 웹 브라우저 컨트롤: <code>[[shdocvw.dll]]</code> 및 <code>[[Trident (layout engine)|mshtml.dll]]</code>에 포함되어 있음.
* URL 모니터 서비스: COM 오브젝트를 응용 프로그램에 제공하는 <code>urlmon.dll</code>가 관할함. 응용 프로그램은 자체 URL 핸들러를 제공할 수 있다.
* 다중 언어 및 국제 텍스트 지원 보조 라이브러리 (mlang.dll).
* DirectX 변형 (이미지 필터 구성 요소 집합).
* XML 지원 (MSXML 구성 요소, <code>msxml*.dll</code>가 관할).
* 윈도 주소록에 접속.

== [[Hello world 프로그램]] ==
<syntaxhighlight lang="c">
#include <Windows.h>
#include <tchar.h>

int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
    MessageBox(NULL, TEXT("Hello, world"), TEXT("App"), MB_OK);
    return 0;
}
</syntaxhighlight>

=== 멀티미디어 ===
마이크로소프트는 [[윈도우 95]] OSR2 이후로 [[DirectX]] 집합의 API를 모든 윈도 설치본의 일부로 제공하고 있다. DirectX는 멀티미디어와 게임 서비스를 제공한다:
* [[Direct3D]]: 3차원 하드웨어 그래픽 가속.
* [[DirectDraw]]: 2차원 프레임버퍼 하드웨어 가속. DirectX 8에서 이 구성 요소는 Direct3D의 선호로 배제되었다.
* [[DirectSound]]: 낮은 수준의 사운드 카드 가속.
* [[DirectInput]]: 조이스틱과 게임패드와 같은 입력 장치와 통신.
* [[DirectPlay]]: 멀티플레이어 게임 인프라 역할.
* [[DirectShow]]: 일반적인 멀티미디어 파이프라인을 만들고 실행.
* [[DirectMusic]]: MIDI 파일을 재생하는 데 이용하였으나 지금은 배제됨.

== 버전 ==
모든 윈도 운영 체제들은 버전마다 새로운 API 함수를 추가했으나 이들을 가리키는 이름은 구조가 크게 변화할 때만 바뀌었다. 나중에 마이크로소프트는 이전 버전과 현재 버전, 그리고 나중에 발표될 버전의 API를 통틀어서 ‘윈도 API’라는 이름으로 부르기 시작했다.

* '''Win16'''은 [[16비트]] 버전의 마이크로소프트 윈도우에서 사용했다. 대부분의 Win16 API는 kernel.exe(또는 krnl286.exe나 krnl386.exe), user.exe, gdi.exe에 구현되어 있으며, [[파일 확장자|확장자]]가 .exe이지만 실제로 이들은 [[동적 링크 라이브러리]]이다.
* '''Win32'''는 [[32비트]] 버전의 마이크로소프트 윈도우에서 사용하며, 현재 널리 쓰이고 있는 버전이다. Win32 API의 핵심 DLL은 [[kernel32.dll]], [[user32.dll]], [[gdi32.dll]]이다.
* '''[[Win32s]]'''(Win32 subset)는 [[윈도우 3.1]]x 버전에서 Win32 API를 일부 구현한 확장이다.
* '''64비트 윈도를 위한 Win32'''(Win32 for 64-bit Windows, 이전에는 '''Win64''')는 [[64비트]] 버전([[IA-64]]와 [[AMD64]] 둘 다)의 마이크로소프트 윈도우에서 사용한다. 실제로는 [[하드웨어 가상 계층]] 때문에 Win32와 큰 차이가 없으며, 32비트용 실행 파일을 64비트 윈도우에서도 수정 없이 돌릴 수 있다. ([[WOW64]])

== 다른 구현물 ==
마이크로소프트의 윈도 API 구현물은 저작권으로 보호 받지만, 일반적으로 이 구현물을 모방하여 독자적인 구현물을 만들면 법적인 문제를 피할 수 있다고 알려져 있다. 대표적으로 [[와인 (소프트웨어)|와인]](Wine) 프로젝트는 [[유닉스 계열]] 운영 체제에서 Win32의 [[호환성 계층]]을 구현하고 있으며, 더 나아가 [[ReactOS]]는 와인의 많은 부분을 함께 쓰면서 완전한 윈도 운영 체제를 모방하고 있다.

== 각주 ==
<references />

== 같이 보기 ==
* [[닷넷 프레임워크]]
* [[오브젝트 윈도 라이브러리]]
* [[마이크로소프트 파운데이션 클래스 라이브러리|MFC]]

== 외부 링크 ==
* {{언어링크|en}} [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/windows_api_start_page.asp Microsoft Developer Network Windows API development guide]

{{위젯 툴킷}}
{{마이크로소프트 개발 도구}}

[[분류:마이크로소프트 API]]
[[분류:윈도우 API]]