6.API関数の使い方(簡単な) |
1.どのような関数があるかを調べる 2.APIビューアを使って関数を貼り付ける。 3.Win32API 関数を使ってコードを書いてみる 4.Win32API 関数名の逆引き及び.NET Framework API との対応表の紹介 5. 6. 7. 8. 9. 10. 11. 12. 13. |
下記プログラムコードに関する補足・注意事項 動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6) Option :[Option Explicit] 参照設定:追加なし 使用 API:なし その他 : : |
1.どのような関数があるかを調べる |
どのような関数があるかを調べる場合、多くのネット上の情報は、関数名から調べるしか手段が用意されていないのが大半である VB6.0をインストールした時に、MSDN もインストールしていれば、下記のようにある程度検討をつけて調べる事ができる (Web 上でも下記と同様のMSDN ライブらが提供されているが、用法別から調べるには困難である) 今回は、5.指定時間待つ、待機関数 のところでふれておりました、Sleep 関数を例題に進めていきます。 上記の図のように調べていき、Sleep 関数の解説のところをみると下記のように書いてあります。 Sleep 現在のスレッドの実行を、指定された時間だけ中断します。 VOID Sleep( DWORD dwMilliseconds // sleep time in milliseconds ); パラメーター dwMilliseconds 実行を中断する時間を、ミリ秒単位で指定します。0 を指定すると、スレッドは、実行の準備ができている同じ優先順位のほかのスレッドに残りのタイムスライスを譲ります。そのようなスレッドがない場合は、関数はすぐに戻ります。INFINITE を指定すると、無制限に実行が中断されます。 戻り値 戻り値はありません。 対応情報 Windows NT: バージョン 3.1 以降 Windows: Windows 95 以降 Windows CE: バージョン 1.0 以降 ヘッダー : winbase.h 内で宣言 インポートライブラリ : kernel32.lib を使用 参照 MsgWaitForMultipleObjects,MsgWaitForMultipleObjectsEx, SleepEx 但し、WEB上の最新のMSDNを見ると上記とは違った書き方がされています。特に下記の部分は大きく追加されています。 http://msdn.microsoft.com/ja-jp/library/cc429358.aspx Sleep 関数と、ウィンドウを直接的または間接的に作成するコードを組み合わせて使う場合は、注意が必要です。1 つのスレッドがウィンドウを作成した場合、そのスレッドはそのウィンドウに関係するメッセージを処理しなければなりません。また、メッセージのブロードキャスト(同報送信)が発生した場合、システム内のすべてのウィンドウへそのメッセージが送信されます。無期限の遅延を指定して Sleep 関数を呼び出していた場合、このような現象が発生すると、システムはデッドロック状態に陥ります。ウィンドウを間接的に作成する 2 つの例として、DDE と COM の CoInitialize があります。そのため、ウィンドウを作成するスレッドでは、Sleep 関数ではなく、MsgWaitForMultipleObjects または MsgWaitForMultipleObjectsEx 関数を使ってください。 即ち、ウィンドウ上で操作しているプログラム上から Sleep 関数を使用すると問題が発生するから使用するなという事のようです。 C言語とVB6.0 では、変数の型が違います。(変数関係のところを参照) 従って、パラメーターの dwMilliseconds の部分は、Long VB6.0 では、Long 型に変えて下さい。 Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sleep 関数は、引数が1個だけで、戻り値もありません、引数には、実行を中断する時間を、ミリ秒単位で指定しますと書かれているように5秒間実行を停止したいなら、Sleep 5000 のように指定する事になります。 (引数が複雑でなければ自作関数を使用するような感覚で使用できます。) 以上の事が理解できなければ、API 関数は、使用しないようにして下さい。 使い方や、使う場所を間違えると思わぬトラブルの元になり、場合によっては、OS を壊してしまう事にもなりかねません。 尚、上記例のように使用する前に、最新の情報をWEB上の MSDN で確認しておいて下さい。 特に解説は、最後まで必ず読むようにして下さい。(たいていの場合、注意事項は最後の方に書いてあるので) 関数名が解れば、関数名をキーにして検索すれば、MSDN の掲載ページはじめ、色々情報やサンプルコードも見つかります。 ※ 参考 API 関数の宣言部分に使用されている用語の解説
ByVal とByRef の使い方はこちらを参照して下さい。 |
2.APIビューアを使って関数を貼り付ける。 |
(1).APIビューアを起動する。 (2).APIファイルを開く ファイル→テキストファイルの読込み でWin32api.txtを開く (3).目的の関数を指定し [追加] [コピー] を実施クリップボードにコピーする (4).クリップボードからモジュールの宣言セクションに貼り付けます。 又は、メニューバーの[アドイン]→A[PIビューア](初めての場合は、アドインマネージャーから)→APIビューアが開いたら→ファイル→テキストファイルの読み込み→WINAPIのフォルダーを開く→ Win32api.txtを開く、尚、種類のところで、定数・型等を選択すれば、それぞれ表示されます。 |
3.Win32API 関数を使ってコードを書いてみる |
別途、API関数は、宣言しておいて下さい。(このサンプルは実使用はしないで下さい。) プログラムを書く (1).フォームにラベルとコマンドボタンを貼り付ける。 (2).コマンドボタンに下記コードを記入する。 Private Sub Command1_Click() 'APIを使って5秒間待つ Label1.Caption = "5秒後に消去します。" DoEvents Sleep 5000 'ミリ秒で指定する(この場合5秒) 'この間このウィンドウは一切のイベントに反応しない Label1.Caption = "" End Sub 引数が少ないもの(簡単なもの)解説を見てそこそこ理解できるような関数から使用するようにして下さい。 |
4.Win32API 関数名の逆引き及び.NET Framework API との対応表の紹介 |
上記でも分かるように、WIN32API 関数を知らない人が使用する場合どのような関数があるのかを調べるのが非常に難しいのと、Win32API
関数を紹介されていたサイトが閉鎖されたり、検索してもうまくヒットがしなくなりつつあり、今さらながらではあるがそれなら自分で作ってしまえと思い急遽作る事にしました。 私が、今まで使った事がある関数と VB6.0 に付属している APIビューア に掲載している関数等を中心に、1770 件あまりの関数を収録しております。 カテゴリ別に、関数名、関数の機能、対応する Framework API、私が使用したサンプルNo、Win32 APIの宣言文 等を収録しており、SQL で検索・抽出が瞬時にできるようにしています。 |
5. |
6. |
7. |
8. |
9. |
10. |
11. |
12. |
13. |
14. |
15. |
検索キーワード及びサンプルコードの別名(機能名) |