それではまず、最も基本となるWindowsそのものについて説明していきましょう。
皆さんも1度は聞いたことがあると思いますが、WindowsはOS(Operating System:オペレーティングシステム)と呼ばれるものの1つです。(よくOSのことを「オペレーションシステム」なんて言う人がいますが、間違いですよ。)
OSというのは、コンピュータにおけるファイルシステムの管理やファイルへのアクセス、およびアプリケーションプログラムの起動と実行管理などといった最も基本的な操作を行なう基本ソフトウェアのことを言います。また、ユーザー(あるいはアプリケーションプログラム)とハードウェアとの間にあって、コンピュータのシステムをできるだけ簡単に使うことができるような仲介役の役目も果たしています。Windowsの大きな特徴であるグラフィカル(視覚的)なインターフェースというものもOSの機能として提供します。
WindowsはOSとしてさまざまな機能を提供しているのですけど、それについては後で述べていくことにしましょう。
今言ったように、WindowsはOSなのですが、見方を変えると、プラットフォーム(Platform)としての側面を持つソフトウェアであると言うことができるのです。
プラットフォームというのは、ハードウェアおよびOSによって構成されている、プログラムの実行環境のことを言います。場合によっては、ハードウェアだけの環境(CPU、メモリサイズ、ハードディスク容量など)とか、OSだけの環境(使っているOSが何か)とか、あるいはアプリケーション開発(プログラミング)のための環境などを指すこともありますが、普通は、プログラムを実行させる環境のことをプラットフォームと呼びます。Windowsアプリケーションプログラムは、プラットフォームであるWindowsの上で実行されているとみなすことができます。つまり、Windowsが提供してくれるいろいろな機能に囲まれた環境のもとで、アプリケーションが実行されているのだと考えるのです。
ここでは、「OS」と「プラットフォーム」がまったく別のものであると言っているわけではありません。あくまで、OSであるという見方もできるし、プラットフォームであるという見方もできる、ということです。
「OSとして」というのは、マシンのシステム全体を絶対的な視点で見たときに、Windowsがユーザー(あるいはアプリケーション)とハードウェアの間にあって、その2つをつなぐインターフェース(仲介役、というか、窓口みたいなもの)の役割を果たしている1つのシステムとみなせる、ということです。
一方、「プラットフォームとして」というのは、ユーザー(あるいはアプリケーション)に視点を置いて見たときに、Windowsという環境の中で、ユーザーが操作したり、アプリケーションプログラムが実行されたりするということを表しているのです。
結局は、全体的に見れば、OSというのは実行環境であるプラットフォームを決定する要素の1つであるに過ぎないのです。OSが変われば、当然プラットフォームとしては別のものになりますけど、OSが同じでも、例えばどの種類のCPUを使っているかとか、Internet Explorerをインストールしているかどうか、さらには、ディスプレイのサイズ・ドット数や表示可能色がどのくらいか、MIDI音源を持っているか、などといったことによってもプラットフォームは変わることになってしまいます。
Windowsは、ユーザーが簡単にコンピュータを使えるように、そしてWindowsアプリケーションを作成するプログラマが簡単にプログラミングを行なえるように、さまざまな特徴を持っていて、それを実現する数多くの機能も提供しています。
Windowsの持つ特徴の1つは、なんと言っても GUIにあります。GUIとは、Graphical User Interface(グラフィカル ユーザー インターフェース)のことで、操作を視覚的に行なえるようにして、誰にでも容易にコンピュータを操作できるようにしたものです。
「って、いったい何を言っているのかわからないっ」なんて言う人は、Windowsプログラミングをしている人の中にはもういないと思いますけど、一応説明しておくと、このようなGUIが導入される以前、MS-DOSなどの時代には、すべての操作は文字入力、つまりコマンドなどをキーボードで打ち込んで……という面倒なことをしていたのです。また、実行結果も文字で出力されていました。具体的にどういったものかというと、あの「MS-DOS プロンプト」(NT系では「コマンド プロンプト」)を実行させてみたときに表示されるやつです。今のように、ウィンドウの中に表示されていたのではなくて、画面全体がそれを覆っていました。(体験してみたければ、「MS-DOS プロンプト」を実行させて [Alt] + [Enter] などどうぞ。) このDOS時代のインターフェースをCUI (Character-based User Interface;キャラクタベース ユーザー インターフェース)と呼びます。
で、そのようなCUIによる操作は大変で不便だというので、より便利なGUIへと移行したというわけです。アプリケーションごとにウィンドウがあって、アイコンやらボタンやらメニューやらがあって、マウス操作で簡単操作。タスクバーの「スタート」メニューからアプリケーション簡単起動。といったように、挙げればきりがありませんが、そんなさまざまなGUIの機能がWindowsから提供されているのです。
Windowsの持つもう1つの特徴として、どのコンピュータにおいても、できるだけ統一されたプラットフォームを提供するということが挙げられます。すなわち、Windowsアプリケーションとして作成されたプログラムならば、Windowsがインストールされているどのコンピュータでも動作し、同じ結果をもたらすようにすることです。基本的には、Windows用に作成された実行ファイルなら、Windowsがインストールされているどのコンピュータでも実行させることができるようになっているのです。
Windowsには、複数のプログラムを同時に実行できる機能があって、マルチタスクと呼ばれています。これによって、複雑なタスク(作業)をそれぞれ別のプロセスに分けたり、同じプログラムを複数起動したりすることもできるようになります。
以前のMS-DOSの時代には、ある1つのプログラムが実行されていると、その間は他のプログラムを実行させることができませんでした。また、16ビットWindowsでは、とある方法でマルチタスクを実現していたのですが、どれか1つのプログラムが(バグなどで)フリーズした場合はマシン全体がフリーズする、という非常に不安定なものだったのです。
32ビットWindowsでは、OSであるWindowsが中心となって、それぞれのプログラムを順番に実行していくような仕組みになっていて、それまでのような不安定さは取り除かれています。(それでも 9x 系はやや不安定さがありますが……。)
マルチタスクを実現させるための仕組みとして、「プロセス」や「スレッド」などの用語が出てくることになりますが、それはまたの機会ということで。
ウィンドウメッセージ(単にメッセージとも呼ばれる)とは、Windowsシステム、もしくはユーザーが発生させたイベントをアプリケーションに伝えるためのものです。すなわち、アプリケーションに送る、いわば「お知らせ」のようなものです。実際にはアプリケーションが持っているウィンドウに送られるので、このような名前がついています。
具体的には、ユーザーがキーボードのキーを押したとか、マウスを動かしたとか、クリックしたとか、ウィンドウサイズを変更したとか、ウィンドウ上のボタンを押したとか、メニュー項目を選択したとか、……、……、とにかく、いろいろなことをイベントとしてウィンドウに伝えてくるのです。
アプリケーションは、ウィンドウに送られてきたメッセージに対して、さまざまな処理を行ないます。右クリックされたらどうするとか、ボタンが押されたらどうするとか、イベントに対してどんな処理をするのかは、アプリケーションが決めなくてはなりません。このような処理をメッセージ処理などと呼ぶことがあります。メッセージ処理は、GUIを実現するために必要となる重要なものです。
メッセージについての詳しいことはまた後で。
API (エー・ピー・アイ)とはApplication Programming Interface (アプリケーション プログラミング インターフェース) の略で、アプリケーションプログラムがOSやデバイスから提供されている機能にアクセスするためのインターフェースのこと。APIはアプリケーションから呼び出すことのできる関数のセットという形でOSから提供されています。
Windowsが提供するAPIを特にWindows APIと呼びます。Windows APIは、Windowsが進化(バージョンアップ)するとともに、どんどんと変更・拡張が続けられてきています。
Windows APIのなかで、32ビットWindowsが提供しているものを特にWin32 APIと呼んでいます。また、Win32 APIをサポートするプラットフォーム(つまり、32ビットWindowsがインストールされた環境)をWin32プラットフォームと呼びます。このページでは、単に「API」と書くことがたびたびありますけど、それは「Win32 API」のことだと思ってください。Win32 APIについての説明も、また後の機会にしましょう。
Windows APIは、先ほど述べたプラットフォームの統一を目的として提供されている重要な機能です。原則として、異なるWindowsプラットフォームの間(例えば、Windows 95 と Windows NT の間)でも互換性が保たれるように、それぞれのWindowsで同じAPIを提供しています。アプリケーションは、APIを使用することで、どのWindowsでも動作することができるようになるのです。
現在、Windowsには 95、98、2000、xp など、いくつもの種類があることはご存知ですよね。ソフトウェアであるWindowsが年月を経るごとに次々とバージョンアップされてきているために多くの種類があるわけですけど、現在の32ビットマシン環境で使用されるWindowsは、大きく次の2つに分けられます。
一般に、前者は総称してWindows 9x 系あるいは 9x カーネルなどと呼ばれ、後者はWindows NT 系あるいは NT カーネルなどと呼ばれます。これらはどちらも32ビットWindowsということになっていますが、この2つには実は大きな違いがあるのです。
Windows 95 は、もともとコンシューマ向け、つまり、家庭で使われるようなパソコンで使用されることを目的として作られたOSです。Windows 95 より以前はMS-DOS、あるいは16ビットのWindows 3.1 などが一般的なパソコン用OSとして使われてきたため、Windows 95 ではそれらとの互換性が重視されています。(早い話が、今までのパソコンゲームを使えるようにしてくれと言うことなんじゃないのかな……?)
互換性を保つという要求を満たすために、Windows 95 のシステムは、それまでの16ビットWindowsのプログラムコードがそのまま使用されている部分が多くあります。カーネル(OS の中核部分)も古い16ビットコードが使用されている部分が多く、そのために16ビットWindowsの欠点がいくつか引き継がれてしまったりもしています。また、それまでの16ビットアプリケーションの中には、ハードウェアに直接アクセスするものも多く、Windows 95 もまたそれを許しているため、しばしばマシンをクラッシュさせてしまうこともあります。OSが持っているべきセキュリティなどの機能もありません。つまり、Windows 95 は、16ビット時代との互換性を保つ代わりに、堅牢性や機密性などを犠牲にしている、といったところです。
以降の Windows 98 や Me も、細かい部分では改良がなされているものの、基本的には Windows 95 のカーネルが引き継がれているため、これらの欠点も引き継いでいるのです。
これに対してWindows NT は、ワークステーションやサーバなどといったシステムのOSとして作られたもので、その目的ゆえに、頑丈で、機密性にも優れたものである必要がありました。そのため、それまでの貧弱な16ビットコードは一切使わず、すべて32ビットプログラムコードで一から作り直されたのです。
このため、Windows 9x と比べるととても安定していて、マシンがクラッシュすることも非常に少なくなっています。1つのアプリケーションのバグでマシンが止まることはほとんどありませんし、その他にも、ネイティブなUnicodeのサポートやマルチプロセッサ(複数のCPU)のサポートなど、9x 系にはない機能が多く含まれます。
逆に、いくつかの面で互換性が失われてしまうということもあります。16ビット時代のアプリケーションを動かすことはできませんし、NT4.0以前では、比較的新しいバージョンのDirect Xを必要とするアプリケーションも実行できません。(Windows 2000 以降では可能になっていますが。) Windows 9x 用に作られているアプリケーションでも、NT系で動かすことができなかったりするものも多く存在します。(2000 や xp になってだいぶ減ってきてはいますが、デバイスを直接操作するタイプのものなどは、やはり使用できないようです。) 最近はWindows 2000/xp が一般家庭のパソコンに普及してきて、ソフトウェアの方もほとんどがそれに対応してきているので、あまり問題にはなりませんけど。