MAGICでWin32のAPIを使用する...
このページでは、MAGICからWin32用APIを使用するための方法について紹介しています。
WIN32 APIとMAGIC
解説するまでもないかと思いますが、Windowsが標準で提供しているAPI(機能のセット)は、「Win32
API」と呼ばれています。
これらの仕組みや機能を知り、MAGICのコーディングに組み入れることは意義のあることと言えるでしょう。
例えば、MAGICで、メッセージを表示するために標準で提供されている「エラー」コマンドがありますが、これらは、「E=エラー」か「W=警告」かの2種類しか機能を選択することができません。メッセージを表示したら、利用者は「OK」ボタンを選択するしか選択の余地がないし、例えば、「はい」、「いいえ」を表示させるようにコーディングすることはできません。ダイアログに表示されるアイコンは2種類ですし、単にメッセージを出すだけに使うのなら、(「E=エラー」としてしまうとロジックに影響があるので)黄色い「!」マークのアイコンを使用せざるを得ないかも知れませんし、処理を選択するような機能が欲しければ、自前でボタンを配置したプログラムを作っているかもしれません。
しかし、「OK」ボタンを押すだけのものも、「はい」、「いいえ」を出して処理を選択させるための画面を出すのも、Windowsにとっては、「MessageBox」という同じ関数で実現されており、ただ、その関数に渡すパラメータが違うだけなのです。表示するアイコンを「?」に変えたり、ボタンの初期位置を「いいえ」に配置するなども、この指定パラメータを操作することにより実現が可能です。
MAGICでは、外部DLLにアクセスするための機能を標準で持っていますので、それらのAPIの機能を知り、正しくコールする方法さえ知り得れば、より有用なMAGICコーディングが実現できることでしょう。
しかし、MAGICの開発者にとってWin32のAPIの仕様を調べるのは少し敷居が高いのかも知れません。今でこそいろいろなWebサイトでWin32APIの仕様については、簡単に調べられるようになったかもしれませんが、MAGIC用にそれを解説しているページは殆どないのが現状かもしれません。
このページでは、MAGICの開発に有用と思われる基本的なものについて、順に公開していこうと考えています。
MAGICからの呼び出し方法
まず、MAGICからのアクセス方法を大別すると次の2種類になります。
- 関数型 ・・・ CallDLLS関数等を利用
- 手続型 ・・・ 外部コール「U=UDP」を利用
- 関数型の場合
関数型として定義するタイプのものは、「CallDLLS」等のMAGIC関数を使用し、呼び出すことが可能です。
下の画面は、GetActiveWindow関数を呼び出している例ですが、第一パラメータに実際に呼び出す「モジュール名+関数名」を、第2パラメータには、パラメータと戻り値の並びと型を表す「引数型文字列」を、第3パラメータ以降は、関数の引数や戻り値を順に指定します。
GetActiveWindowは、USER32.DLLというモジュールの関数ですが、パラメータが無く、ウインドウのハンドルを返す戻り値のみなので、「'4'」が指定されているわけです。

関数型の場合は、式を記述する項目更新や代入、その他の箇所で使用することが可能です。
- 手続型の場合
手続型として定義するタイプのものは「外部コール」コマンドを使用して記述します。
下の例は、「GetWindowText」関数をコールするためのものですが、UDPの指定は「@USER32.GetWindowText」のようにモジュール名USER32.DLLと関数名「GetWindowText」を組み合わせたものです。

パラメータの指定は、ダイアログを開いて指定します。
先頭が「引数型文字列」で、関数の引数や戻り値に対応したものを指定します。それ以降は、実際の関数の引数や戻り値です。

コーディングの実際
コーディングの実際例については、各ジャンル別にページを作成しています。
下記の関連コンテンツからページをたどって下さい。(未完成のページあり)
