VBレスキュー(花ちゃん)
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ各掲示板

リンク元へ戻ります。 関数・メソッド・変数関係のメニュー
1.変数関係
2.VB6.0 からの文字列関数の使用例
3.インプットボックス関数をマスターする
4.指定時間待つ、待機関数
5.ちょっと便利な自作関数集
6.API関数の使い方(簡単な)
7.Visual Basic 6.0 用簡易リファレンス
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.


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 関数の宣言部分に使用されている用語の解説
指定項目 内            容
Public 省略可能です。モジュール内のすべてのプロシージャから参照できるプロシージャを宣言するときに指定します
Private 省略可能です。宣言が行われたモジュール内でのみ参照できるプロシージャを宣言するときに指定します。
Sub 省略可能です。ただし、Sub を省略する場合には、Function を指定する必要があります。プロシージャが値を返さないことを示します。
Function 省略可能です。ただし、Function を省略する場合には、Sub を指定する必要があります。プロシージャが値を返し、式の中で使えることを示します。
name 必ず指定します。任意の有効なプロシージャ名を指定します。DLL のエントリポイントは大文字小文字を区別して指定することに注意してください。
Lib 必ず指定します。宣言するプロシージャが DLL またはコードリソースに含まれていることを示します。Lib 節は、すべての宣言で必要です。
libname 必ず指定します。宣言するプロシージャが含まれている DLL またはコードリソースの名前を指定します。
Alias 省略可能です。呼び出すプロシージャが、DLL の中で別の名前を持っていることを示します。外部プロシージャの名前が Visual Basic のキーワードと同じ場合に役に立ちます。
DLL プロシージャの名前が、パブリック変数、パブリック定数、または適用範囲内のほかのプロシージャの名前と同じ場合でも、Alias を使えます。
また、Alias は、DLL の名前付け規則に合っていない文字がDLL プロシージャ名に含まれている場合にも使えます。
aliasname 省略可能です。DLL またはコードリソース内のプロシージャの名前を指定します。先頭の文字がシャープ記号 (#) でない場合、引数 aliasname には DLL 内で定義されているプロシージャのエントリポイント名を指定します
先頭の文字がシャープ記号 (#) の場合は、2 文字目以降の文字にはプロシージャのエントリポイントの序数を指定します。
arglist 省略可能です。プロシージャを呼び出すときに、プロシージャに渡す引数を表す変数のリストを指定します。
type 省略可能です。Function プロシージャの戻り値のデータ型を指定します。
バイト型 (Byte)、ブール型 (Boolean)、整数型 (Integer)、長整数型 (Long)、通貨型 (Currency)、単精度浮動小数点数型 (Single)、倍精度浮動小数点数 (Double)、10 進型 (Decimal) (現在はサポートされていません)、日付型 (Date)、文字列型 (String) (可変長のみ)、バリアント型 (Variant)、ユーザー定義型、オブジェクト型のいずれかを指定できます。

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.


このページのトップへ移動します。 検索キーワード及びサンプルコードの別名(機能名)





このページのトップへ移動します。