APIを使いこなせるようになるためには、まずWindowsの仕組みを理解してしまうのが最も近道です。APIを使いこなすことはできないといっても過言ではありません。Windowsは非常に複雑なシステムであり、それ全体を完全に網羅するなんてことは到底不可能なことです。システムすべてを知ろうとするのではなく、システムを構成する基本的な要素を1つ1つ理解していくのがいいでしょう。基礎をしっかりと理解していくことにで、より高レベルな部分を少しずつ理解していくことができますから。いうわけで、まず最も基本となるWindowsそのものについて説明していきましょう。System:オペレーティングシステム)と呼ばれるものの1つです。OSとは、コンピュータにおけるファイルシステムの管理やファイルへのアクセス、およびアプリケーションプログラムの起動と実行管理などといった最も基本的な操作を行う基本ソフトウェアのことを言います。OSは、ユーザー(あるいはアプリケーションプログラム)とハードウェアとの間に存在し、ユーザやアプリケーションプログラムがコンピュータのシステムをできるだけ簡単に使うことができるように、仲介役を果たしています。Windowsの大きな特徴であるグラフィカル(視覚的)なインターフェースというものもOSの機能として提供されています。WindowsはOSとしてさまざまな機能を提供していますが、それらについては後で述べていくことにしましょう。プラットフォームとしてのWindows今言ったように、WindowsはOSなのですが、見方を変えて、プラットフォームとしての側面を持つソフトウェアであると言うこともできます。プラットフォームというのは、ハードウェアおよびOSによって構成されている、プログラムの実行環境のことを言います。場合によっては、ハードウェアだけの環境(CPU、メモリサイズ、ハードディスク容量など)とか、OSだけの環境(使っているOSは何か)とか、あるいはアプリケーション開発(プログラミング)のための環境などを指すこともありますが、普通は、プログラムを実行させる「環境」のことをプラットフォームと呼びます。Windowsアプリケーションプログラムは、プラットフォームであるWindowsの上で実行されているとみなすことができます。Windowsが提供してくれるいろいろな機能に囲まれた環境のもとで、アプリケーションが実行されているのだと考えるのです。ここでは、「OS」と「プラットフォーム」がまったく別のものであると言っているわけではありません。OSであるという見方もできるし、プラットフォームであるという見方もできる、ということです。「OSとして」というのは、マシンのシステム全体を絶対的な視点で見たときに、Windowsがユーザー(あるいはアプリケーション)とハードウェアの間にあって、その2つをつなぐインターフェース(仲介役、というか、窓口みたいなもの)の役割を果たしている1つのシステムとみなせる、ということです。「プラットフォームとして」というのは、ユーザー(あるいはアプリケーション)に視点を置いて見たときに、Windowsという環境の中で、ユーザーが操作したり、アプリケーションプログラムが実行されたりするということを表しているのです。全体的に見れば、OSというのは実行環境であるプラットフォームを決定する要素の1つであるに過ぎないのです。Explorerをインストールしているかどうか、さらには、ハードディスクの容量はどのくらいか、ディスプレイのサイズや表示可能色はいくつか、MIDI音源を持っているか、などといったことによってもプラットフォームは変わることになります。Windowsの特徴と機能Windowsは、ユーザーが簡単にコンピュータを使えるように、そしてプログラマが簡単にWindowsアプリケーションを作成できるように、さまざまな特徴を持っていて、数多くの機能を提供しています。GUIWindowsの持つ特徴の1つは、何といってもGUIにあります。Interface(グラフィカル・ユーザー・インターフェース)のことで、操作を視覚的に行えるようにして、誰にでも容易にコンピュータを操作できるようにしたものです。このようなGUIが導入される以前、すなわちMS-DOSの時代には、すべての操作は文字入力、つまりコマンドなどをキーボードで打ち込んで......という面倒なことによって行われていたのです。実行結果もすべて文字で出力されていました。プロンプト」)を実行させたときに表示される画面のことです。現在のようにウィンドウの中に表示されていたのではなく、画面全体がそれを覆っていました。Interface;キャラクタベース・ユーザー・インターフェース)と呼びます。そのようなCUIによる操作は大変で不便でしたので、より便利なGUIへと移行したというわけです。アプリケーションごとにウィンドウがあって、アイコンやボタンやメニューが表示されていて、マウスクリックで簡単に操作、タスクバーの「スタート」メニューからアプリケーションを簡単に起動、といったように、例を挙げればきりがありませんが、そのようなさまざまなGUIの機能がWindowsから提供されているのです。プラットフォームの統一Windowsの持つもう1つの特徴として、どのコンピュータにおいても、できるだけ統一されたプラットフォームを提供するということが挙げられます。Windowsアプリケーションとして作成されたプログラムならば、Windowsがインストールされているどのコンピュータでも動作し、同じ結果をもたらすようにすることです。基本的には、Windows用に作成された実行ファイルなら、Windowsがインストールされているどのコンピュータでも実行させることができるようになっているのです。実際にはWindowsのバージョンアップに伴って追加されたり廃止されたりしている機能もあるため、必ずしも全Windowsプラットフォームで互換性があるとは限りませんが。それでも、多くの場合は問題なく実行させることができます。マルチタスクWindowsには、複数のプログラムを同時に実行できる機能があり、マルチタスクと呼ばれています。これによって、複雑なタスク(作業)をそれぞれ別のプロセスに分けたり、同じプログラムを複数起動したりすることもできるようになります。以前のMS-DOSの時代には、ある1つのプログラムが実行されていると、その間は他のプログラムを実行させることができませんでした。16ビットWindowsでは、現在の32ビットWindowsとは違った方法でマルチタスクを実現していたのですが、どれか1つのプログラムが(バグなどで)フリーズした場合はマシン全体がフリーズする、という非常に不安定なものだったのです。32ビットWindowsでは、OSであるWindowsが中心となって、それぞれのプログラムを順番に実行していくような仕組みになっていて、16ビットWindowsのときのような不安定さがなくなっています。系はやや不安定さがありますが......。)マルチタスクを実現させるための仕組みとして、「プロセス」や「スレッド」などの用語が出てくることになりますが、それはまたの機会ということで。ウィンドウ上で述べたGUIを実現するためのWindowsの構成要素の一つがウィンドウです。直訳すれば『窓』ということになりますが、Windows上でのウィンドウというのは、ご存知のように、アプリケーションによってディスプレイ上に表示されている長方形の領域のことです。アプリケーションの『窓』というわけです。実際には、それだけをウィンドウと呼ぶわけではありません。Windowsにおいては、ツールバーやステータスバー、押しボタン、ラジオボタン、チェックボックス、テキスト入力ボックス、リストボックス、ツールチップまでもが、実は1つのウィンドウということになっているのです。最初はとっつきにくいかもしれませんが、そういうものなんだと割り切ってみてください。Windowsは、システム上に存在するすべてのウィンドウをウィンドウハンドルと呼ばれるものによって識別し、管理しています。ウィンドウハンドルとは、ウィンドウを識別するためにそれぞれのウィンドウに割り当てられている数値のことです。Windowsは、すべてのウィンドウを管理するためのテーブル(表)を作成していて、ウィンドウに関する情報が必要になったときは、ハンドルを元にそのテーブルを参照することで目的となるウィンドウに関する情報を引き出します。そのため、アプリケーションがウィンドウに何らかの処理をしたい場合、API関数を呼び出すときに対象となるウィンドウのハンドルを指定しなければなりません。HSPで作成されるウィンドウもそれぞれ異なるウィンドウハンドルを持っています。HSPのオブジェクト作成命令で作られたテキスト入力ボックスやコンボボックスなどもそれぞれのウィンドウハンドルを持ちます。HSPではシステム変数やHSP標準関数を使用して、これらのハンドルを取得することができるようになっています。それについては、必要となった時点で説明することにします。ウィンドウメッセージウィンドウメッセージ(単にメッセージとも呼ばれる)とは、Windowsシステム、もしくはユーザーが発生させたイベントをアプリケーションに伝えるためのものです。アプリケーションに送る、いわば「お知らせ」のようなものです。実際にはアプリケーションが持っているウィンドウに送られるので、このような名前がついています。具体的には、ユーザーがキーボードのキーを押したとか、マウスを動かしたとか、クリックしたとか、ウィンドウサイズを変更したとか、ウィンドウ上のボタンを押したとか、メニュー項目を選択したとか、......、......、とにかく、いろいろなことをイベントとしてウィンドウに伝えてくるのです。アプリケーションは、ウィンドウに送られてきたメッセージに対して、さまざまな処理を行います。右クリックされたらどうするとか、ボタンが押されたらどうするとか、イベントに対してどんな処理をするのかは、アプリケーションが決めなくてはなりません。このような処理をメッセージ処理などと呼ぶことがあります。メッセージ処理は、GUIを実現するために必要となる重要なものです。このように、イベントが送られてくるまではプログラムが停止していて、メッセージが送られてきたらそれに対して処理を開始するという、Windowsでは一般的に行われている処理の形式のことを「メッセージ駆動方式」(あるいは「イベント駆動方式」、「イベントドリブン」など)と呼んだりもします。HSP3では、任意のメッセージが送られたときの割り込み実行機能がサポートされています。この機能により、あらかじめ設定しておいたウィンドウメッセージを受け取ったときに、任意のラベルにジャンプしてそのスクリプトを実行することができます。HSP』でも、その機能を利用したメッセージ処理を説明していきます。(アプリケーション・プログラミング・インターフェース)の略で、アプリケーションプログラムがOSやデバイスから提供されている機能にアクセスするためのインターフェースのことです。一般に、APIはアプリケーションから呼び出すことのできる関数のセットという形でOSから提供されています。これは、プログラマが画面出力やユーザー入力などの処理を簡単に行うために、Windowsが基本的な機能をはじめから用意しておいて、プログラマがその機能を自由に使うことができるようにしたものです。APIは、Windowsが進化(バージョンアップ)するとともに、どんどんと変更・拡張が続けられてきています。APIと呼んでいます。APIをサポートするプラットフォーム(つまり、32ビットWindowsがインストールされた環境)をWin32プラットフォームと呼んだりもします。API」のことだと思ってください。APIについてのより詳細な説明も、また後の機会に行うことにします。APIは、先ほど述べたプラットフォームの統一を目的として提供されている重要な機能です。NTの間)でも互換性が保たれるように、それぞれのWindowsで同じAPIを提供しています。アプリケーションは、APIを使用することで、どのWindowsでも動作することができるようになるのです。95、98、2000、XPなど、いくつもの種類があることはご存知でしょう。ソフトウェアであるWindowsが年月を経るごとに次々とバージョンアップされてきているために多くの種類があるのですが、現在の32ビットマシン環境で使用されるWindowsは、大きく次の2つに分けられます。NT系あるいはNTカーネルなどと呼ばれます。これらはどちらも32ビットWindowsということになっていますが、この2つには実は大きな違いがあるのです。95は、もともとコンシューマ向け、つまり、家庭用のパソコンで使用されることを目的として作られたOSです。95ではそれらとの互換性が重視されています。95のシステムは、それまでの16ビットWindowsのプログラムコードがそのまま使用されている部分が多くあります。中核部分)も古い16ビットコードが使用されている部分が多く、そのために16ビットWindowsの欠点がいくつか引き継がれてしまったりもしています。95もまたそれを許しているため、しばしばマシンをクラッシュさせてしまうこともあります。OSが持っているべきセキュリティなどの機能もありません。95は、16ビット時代との互換性を保つ代わりに、堅牢性や機密性などを犠牲にしたOSなのです。95のカーネルが引き継がれているため、これらの欠点も引き継いでいるのです。Meが最後で、これ以降はもう出てくることはありません。NTは、ワークステーションやサーバなどといったシステムのOSとして作られたもので、その目的ゆえに、頑丈で、機密性にも優れたものである必要がありました。そのため、それまでの貧弱な16ビットコードは一切使わず、すべて32ビットプログラムコードで一から作り直されたのです。9xと比べるととても安定していて、マシンがクラッシュすることも非常に少なくなっています。1つのアプリケーションのバグでマシンが止まることはほとんどありませんし、その他にも、ネイティブなUnicodeのサポートやマルチプロセッサ(複数のCPU)のサポートなど、9x系にはない機能が多く含まれます。逆に、いくつかの面で互換性が失われてしまうということもあります。16ビット時代のアプリケーションを動作させるためのサブシステムが存在するとはいえ、デバイスを直接操作したりする多くのアプリケーションは動作させることができません。2000以降では可能になっていますが)。9x用に作られているアプリケーションでも、NT系で動かすことができなかったりするものも多く存在します。(2000やXPになってだいぶ減ってきてはいますが、デバイスを直接操作するタイプのものなどは使用できない場合があるようです。2000/XP/Vistaが一般家庭のパソコンに普及し、ほとんどのソフトウェアはそれに対応しているので、あまり問題にはなっていません。