WisdomSoft - for your serial experiences.

Windows API とは

Windows デスクトップアプリケーションの実行基盤である Windows API の仕組みについて解説します。アプリケーションは Windows API を通じて Wisdows システムと対話し、ウィンドウの生成や制御、グラフィックスなどの処理を行います。

Windows プログラミング

コマンドプロンプト上で動作するアプリケーションであれば C 言語の標準ライブラリだけで開発できますが、Windows デスクトップ上にウィンドウを表示するグラフィカルなソフトウェアを作ることはできません。Windows デスクトップで動作するアプリケーションを開発するには、C 言語の標準ライブラリだけでは不十分なのです。国際標準で定められている関数は Windows や Mac OS X など、特定の OS (処理系)に依存した機能は含まれていません

Windows 上でウィンドウを表示し、ウィンドウに図やイメージを表示するグラフィカルなアプリケーションを開発するには Windows API を学習しなければなりません。API とは、Application Programming Interfaces の略で、アプリケーションから Windows のようなシステムが提供する機能にアクセスするための手段となります。つまり、Windows API とは、Windows の機能を呼び出すための関数群のことです。

ウィンドウを表示したり、Windows が管理するハードウェアの機能を呼び出したりするには、Windows が定める手続きに従わなければいけません。Windows の管理下で動作するアプリケーションは、基本的にハードウェアを直接制御することができないため、ディスプレイなどの出力装置にデータを送ることができないのです。そのため「ウィンドウを作ってほしい」とか「ウィンドウを座標(x , y)まで移動させてほしい」というような要求を API を通して Windows に伝えるのです。

API は関数の集合なので、当然どこかに関数本体のコードが存在します。Windows API の本体は、主に Windows ディレクトリやシステムディレクトリの中にある DLL という拡張子のファイルに保存されています。この DLL ファイルはダイナミックリンクライブラリ(Dynamic Link Library)と呼ばれ、再利用可能な関数を実行ファイルに提供します。

Windows はアプリケーション実行時に必要な DLL をメモリに読み込むダイナミックリンクをサポートしています。これによって、コードのすべてを単一の実行ファイルに埋め込むのではなく、特定の機能を提供するプログラムをダイナミックリンクライブラリとして分離することができます。Windows API は DLL で提供出されているため、アプリケーションプログラムが必要な機能だけを部分的に利用できます。

図1 Windows API
図1 Windows API

すなわち、Windows API とは開発者が作成するプログラムが Windows OS とコミュニケーションするための接点となります。デスクトップでは、複数のアプリケーションが同時に動くため、Windows は個々のアプリケーションに適切なハードウェア資源(CPU、メモリ、ネットワークなど)を割り当てます。アプリケーション開発者は、ハードウェアを意識することなく、独立したプログラムとしてアプリケーションを記述できます。

Windows API を呼び出すことができれば、開発用のプログラミング言語は問われませんが、ほとんどは C 言語、または C++ 言語が用いられます。

Windows の歴史

Windows は誕生以来、数年ごとにバージョンアップを続け進化してきました。古くは Windows Version 1.0 という名前でリリースされた 80 年代の Windows から始まります。この時代の Windows は日本ではまったく使われていなかったため、実際に使ったことがある方は少ないでしょう。このシリーズで有名なのは  Windows 3.1 と呼ばれている製品です。

Windows Version 1.0 から Version 3.1 までは、Intel の 16 ビットプロセッサ 8086 ~ 286 をベースにしています。数値は 16 ビットで扱われるため、現在の API とは大きく異なっています。この時代の 16 ビット Windows から 32 ビット Windows への以降では API にも大きな変更が加えられているため、16 ビット時代の Windows API を特に Win16、32 ビット時代の Windows API を Win32 と呼んで分けます。この場で解説する Windows API は Win32 が対象となります。

Windows は、Windows 95 以降の個人や小規模ビジネスを対象とした 9x 系と呼ばれるシリーズと、Windows NT 以降の信頼性が重要視される企業向けの NT 系と呼ばれるシリーズが存在しています。9x 系は Windows 95、Windows 98、Windows ME と進化しましたが、現在では 9x 系の開発は終了し Windows XP 以降は NT 系に一本化されています。これらの Windows のバージョンと Windows API の関係は、開発者にとって重要です。

幸い、それぞれの Windows に応じて API を学習する必要はありません。Windows のバージョンが異なっていても、基本は同じ Win32 API で動作しているのです。新しい Windows は過去の Windows の関数を引き継いでいるため、過去の Windows の知識を新しい Windows でも使うことができるのです。

ただし、シリーズの違いによって多少の差があります。例えば Windows NT シリーズは 9x シリーズに比べていくつかの関数が加えられています。もし、Windows NT でコンパイルしたプログラムが NT 専用の関数を利用している場合、9x で動作する保証はありません。Windows 98 でも 95 に加えて多くの関数が追加されています。新しく追加された関数を使っている場合、古い Windows では正常に動作しない可能性があります。

また、Windows Server や Windows Vista 以降の OS では、古い Windows に比べてセキュリティが強化されています。そのため、古い Windows では無許可でアクセスできたディスク領域でも、新しい Windows ではアクセスできないといった問題が発生することがあります。

表1 Wisdows 年表
Windowsシリーズ 発売年 メモ
Windows Version 1.0 1986 MS-DOS に GUI を実現するための拡張ソフトウェアとして発売。OS としては独立していない。
Windows Version 2.0 1987 Windows Version 1.0 の後継。機能の拡張。
Windows Version 3.0 1990 Windows が米国内で普及し始める。
Windows 3.1 1992 高い完成度を持ち、マルチメディアを標準でサポートしたことから世界中で爆発的にヒット。
Windows NT 1993

ネットワークでの利用を前提として、従来の Windows とは別に開発された高い信頼性を実現する 32 ビット Windows OS。企業向けの大型コンピュータを対象にしている。クライアント向けの Workstation と、これに加えてサーバー機能を追加した Server の2種類に分かれている。

Windows 95 1995 Windows 3.1 の後継で OS として独立した一般利用者向けの 32 ビット Windows OS。3.1 に比べ、ユーザーインタフェースの改良やプラグ&プレイの対応で、コンピュータの知識が無いユーザーでも、比較的容易に利用できるようになった。
Windows CE 1996 組み込み機器向けとして開発されたリアルタイムOS。Pocket PC などの小型デバイスや Dreamcast、家電などの端末にも使われている。Win32 API をベースにしている。
Windows NT Enterprise Edtion 1997

大規模システム向けの Windows NT。

Windows 98 1998 Windows 95 の後継。基本機能の拡張やブラウザの統合などが行われた。
Windows NT Embedded 4.0 1999 Windows NT を組み込み機器向けに最適化されたもの。Windows CE に比べると必要とされる機能は大きくなるが、通常の Windows NT に比べると軽量。高機能の事業用端末に使われ POS システムなどで利用されている。
Windows 98 Second Edition 1999 通称 Windows 98 SE。Windows 98 の問題点などを修正したアップグレード版。各種機能の追加。
Windows Millennium Edition 2000 Windows 98 の後継。通称 Windows ME。
Windows 2000 2000 Windows NT の後継。機能の拡張、セキュリティの向上など。クライアントOSとして NT Workstation の後継に当たる Professional、NT Server の後継で小規模ネットワークのサーバー向けの Server、NT Enterprise Edition の後継で、大規模システム向けの Advanced Server、そして大規模なデータセンター構築用で Windows 2000 の最高峰である Datacenter Server の4種類に分かれている。
Windows XP 2001 95 年以降分裂していた Windows 9x シリーズと Windows NT シリーズが統合された製品。NT をベースとしているため、高い信頼性と安全性を一般ユーザー製品で実現された。Windows Me の後継となる Home Edition と、パワーユーザー向けでWindows 2000 Professionalの後継となる Professional Edition に分かれている。
Windows XP Embedded 2001 Windows NT Embedded の後継。Windows XP Professional を組み込み機器向けに改良したもので、業務用端末などに組み込まれる。
Windows XP Media Center Edition 2002 Windows XPをマルチメディアなどのデジタルコンテンツ、エンターテイメント用に拡張したOS。リモコンからの入力に対応し、若年層や家庭向けに設計されている。
Windows XP Tablet PC Edition 2002 ペン入力に対応したタブレットコンピュータ向けに開発された Windows XP。手書き文字の認識など、ペン入力に特化した機能やツールが追加されている。
Windows Mobile 2003 2003 携帯電話、携帯情報端末向けのOS。Microsoft .NET Compact Framework に対応し、Windows XP や 2003 との連帯性を強めている。マルチメディアや無線通信機能も装備されている。
Windows Server 2003 2003 Windows 2000 Server の後継。Windows XPのサーバ向け製品とも位置づけられている。
Windows Vista 2007 Windows XP の後継。これまでの Windows よりも大幅にセキュリティが強化され、システムに影響の与える動作が制限されるようになった。半透明なウィンドウが特徴の Aero と呼ばれる UI が採用され、見た目も大幅に変化した。
Windows Server 2008 2008 Windows Server 2003 の後継。Windows Vista 世代に対応するサーバー製品。ハイパーバイザー型の仮想化システム Hype-V が搭載され、サーバーの仮想化が強化された。
Windows 7 2009 Windows Vista の後継。Windows Vista で不評だった負荷の強さを軽減するためのチューニングが行われ、パフォーマンスやユーザー体験が改善された。
Windows Server 2008 R2 2009 Windows Server 2008 の後継。Windows 7 世代に対応するサーバー製品。Hyper-V が更新され、仮想化の機能向上と強化が行われている。
Windows Phone 7 2010 iPhone や Android の普及によって Windows Mobile のアーキテクチャ及びユーザー体験が通用しなくなったため、基本から再設計されたスマートフォン用OS。開発には Silverlight 及び XNA Framework が用いられ、初めて Wisdows を冠しながら完全に Windows API が廃止された製品。
Windows 8 2012 Windows 7 の後継。スマートフォンやタブレット型端末の普及に伴い、マルチタッチのタブレット端末に最適化された Metro UI が追加された。従来のスタートメニューが廃止され、デスクトップと Metro UI を切り替えられる仕組みを採用。Intel プロセッサに加え、ARM プロセッサにも対応した。Windows API とは別に、Metro UI のために新しく Windows Runtime と呼ばれる API が追加。
Windows RT 2012 Windows 8 の ARM プロセッサ対応版。デスクトップに制限があり Office アプリケーションしか動作しない。基本的にタブレット端末で利用されることを想定しており、Metro UI が中心となる。Windows API で開発されたアプリケーションは動作しない。
Windows Server 2012 2012 Windows Server 2008 R2 の後継。Windows 8 に対応するサーバー製品。
Windows Phone 8 2012 マーケティング的には Windows Phone 7 の後継とされるが、技術的には Windows 8 のカーネルを用いており、Windows 8 の携帯電話専用 OS という位置づけ。

Windows API の基本的な機能だけを使ったアプリケーションであれば、バージョンやエディションに関係なく、モバイルなどの特殊環境を除く Windows デスクトップ環境で共通して動作します。ただし、後継の OS で追加された機能を呼び出すアプリケーションであれば、古い OS で実行しても正常に動作しないでしょう。またシステムに近い部分を制御するアプリケーションは、バージョン互換性やセキュリティの問題が発生する可能性があります。