Cプログラミンの一環として始めた Windos API ですが、やってみたら面白かったので、もっと詳しく、かつ簡単に、ステップバイステップで学習するコーナーも作りました。
Windows API Primer
Primer は、入門書という意味です。
2020年1月14日にWindows 7のサポートが終了して、Windows 10無償アップグレードも終了しました。しかし、Windows 7もしくは8.1のライセンスでWindows 10を新規インストールすることはできます。
次のサイトで。Windows 10のディスクイメージをダウンロードして、Windows 7かWindows 8.1のライセンスで新規インストールします。
Windows 10 のディスク イメージ (ISO ファイル) のダウンロード
上記のサイトで「エディションの選択」で「Windows 10」を選んで「確認」をクリックします。「製品の言語の選択」で「日本語」などを選び「確認」をクリックします。24時間有効なダウンロードリンクが表示されますので、ダウンロードしてください。
なお、Windows 8.1のダウンロードサイトは次のとおりです。
Windows 8.1 のディスク イメージ (ISO ファイル) のダウンロード
これらのディスクイメージは、すべてのエディション(HomeとかProfessionalとか)が同梱されていて、お持ちのライセンスによってインストールされるエディションが決まります。
今までは、Windows 7からのアップグレードでWindows 10を使っていたのですが、起動に時間がかかり、ログイン時にアカウントとパスワードを要求されるなどで使いにくかったですが、新規インストールすると起動も少し早くなったような気がします。ログンイン時にアカウントやパスワードを要求されることもなくなりました。ま、パスワードを要求されないのは逆に問題なのかもしれませんが...
ただし、この方法でWindows 10を新規インストールした場合は、元となったWindows 7やWindows 8.1ではライセンスは使えなくなります。以前のWindows 10無償アップグレードでは、Windows 7やWindows 8.1でもそのままライセンスが使えたのですが、まぁ仕方ないですね。
以上のように、Windows環境が新しなったので、もっとWindowsプログラミングをやってみたくなりました。Windowsフォームにしようかなどと考えていたのですが、このコーナーはC/C++のコーナーですし、手書きでプログラミングするなら、もっとダイレクトにWindows APIをやってみたくなりました。
Windows APIプログラミングは、wxWidgetsやGTKやWindowsフォームなどと比べると難易度が高くなります。しかしコーディング(プログラムを記述すること)が好きな人には面白い開発環境のように思います。
Windows APIの開発には、CコンパイラとWindows SDK(Software Development Kit、ソフトウェア開発キット)が必要です。
このサイトでは、WindowsのC/C++コンパイラとしてMinGW(Minimalist GNU for Windows)を使っています。そしてMinGWをインストールすると自動的にWindows SDKもインストールされるみたいです。
MinGWを使ったWindows APIアプリケーションのコンパイルは、コンソールアプリケーション(コマンドプロンプトで文字として実行されるアプリケーション)並みに簡単です。
MinGWをインストールするには、MinGWを単体でインストールするか、Msys2というソフトの付属としてインストールするかの方法があります。
どちらを使っても、お好きなエディタでソースコードを記述して、コマンドプロンプトでコンパイルできます。コンパイルされた実行ファイルはダブルクリックで実行できます。当然コマンドで起動することもできます。
wxWidgetsやGTKアプリケーションも手書きでプログラミングする場合は、Msys2をインストールしてください。私は、Msys2付属のMinGWを使っています。
次のサイトから MingW-W64-buildsをダウンロードします。
ダウンロードした mingw-w64-install.exe を実行します。Settings 画面が表示されたら次のように設定してください。
インストールする場所は C:\mingw-w64
などにします。
インストール後、Windowsの環境変数に次のパスを追加してください。
C:\mingw-w64\mingw32\bin
C:\mingw-w64\mingw64\bin
次のサイトから、msys2-i686-20190524.exe か msys2-x86_64-20195024.exe をダウンロードしてください。
32bit Windows用がmsys2-i686-20195024.exeで、64bit Windows用がmsya2-x86_64-20195024.exeです。
ダウンロードしたインストーラーを実行します。
インストールする場所はデフォルトのままにしてください。
インストール後、自動で MSys2 のコンソールが表示されますが、一旦閉じてください。
そして、スタートメニュー → すべてのプログラム → MSYS2 64ibt(もしくはMSYS2 32bit)からお使いのWindowsに合わせて、MSYS2 MinGW 64-bit(もしくは MSYS2 MinGW 32bit)のコンソールを開き直してください。
デスクトップに MSys 64bit のショートカット作りたい場合は、C:\msys64\ingw64.exe(もしくはC:\msys32\mingw32.exe)のショートカットを作ってください。
Msys2を起動し直したら、次のようにしてMsys2にMinGWコンパイラをインストールします。
gcc --version
bash: gcc: コマンドが見つかりません
// 64bit Windowsの場合
pacman -S mingw-w64-x86_64-toolchain
選択して下さい (デフォルト =all): // 左のように表されたらエンターキーを押します
gcc --version
gcc.exe (Rev2, Built by MSYS2 project) 8.3.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// 32bit Windowsの場合
pacman -S mingw-w64-i686-toolchain
選択して下さい (デフォルト =all): // 左ように表示されたらエンターキーを押します
$ g++ --version
g++.exe (Rev1, Built by MSYS2 project) 7.4.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
64bitでは、MinGW単体を使うよりMsys2を使ったほうが新しいGCCがインストールされます。32bitでは、Msys2のほうが古いGCCがインストールされます。
これでMsys2でMinGWコンパイラを使えるようになりました。Msys2のコンソールでMinGWコンパイラを使う場合は環境変数へのパスの追加は不要です。コマンドプロンプトでもMsys2のMinGWコンパイラを使う場合は、Windowsの環境変数に次のパスを追加してください。
なお、MinGW単体とMsys2付属のMinGWの両方をインストールすることはできますが、Windowsの環境変数に両方のパスを追加すると、コンパイル時にエラーが起こります。またMsys2では、Msys2以外でインストールされたMinGWのパスが存在した場合も、コンパイル時にエラーが起こります。混乱するので両方をインストールするのはやめておいたほうが良いでしょう。
なお、Msys2でemacsを使いたい場合は、次のようにしてインストールします。
$ emacs --version
-bash: emacs: コマンドが見つかりません
$ pacman -S emacs
emacs --version
GNU Emacs 26.2
Copyright (C) 2019 Free Software Foundation, Inc.
GNU Emacs comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of GNU Emacs
under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING.
// Emacsで自動バックアップを作りたくない場合は、ホームディレクトリに次の内容の.emacsというファイルを作ります。
(setq make-backup-files nil)
(setq auto-save-default nil)
// Msys2を起動した画面がホームディレクトリです。パスで言えば次のとおりになります
C:\msys64(もしくはmsys32)\home\ユーザー名
試しにコンソールアプリケーションをビルド(コンパイル&リンク)して実行してみます。
次のソースコードを hello.c という名前で任意の場所に保存してください。
#include <stdio.h>
int main()
{
printf("My First C Program.\n");
return 0;
}
そして、Msys2またはコマンドプロンプトでhello.cを保存したディレクトリに移動して、次のようにビルドと実行をします。
// ビルド
gcc hello.c -o hello
// コマンドプロンプトでの実行
hello
// Msys2での実行
./hello
// 実行結果
My First C Program.
Cで書かれたWindows APIを、C++のライブラリにしたものが、MFC(Microsoft Foundation Class)です。
このコーナーでは、MFCは扱いません。
もしMFCをするなら、別のコーナーでやろうと思います。