VBA DoEvents関数

DoEvents関数

オペレーティング システムが他のイベントを処理できるように、実行を渡します。

構文

DoEvents( )

解説

DoEvents 関数は、単体バージョンのVisual Basic (Visual Basic Professional Edition など) で開かれているフォームの数を代表するIntegerを返します。他のすべてのアプリケーションでは、DoEventsは0を返します。

DoEvents はオペレーティング システムに制御を渡します。オペレーティング システムがキュー内のイベントの処理を終了し、SendKeysクラスにあるすべてのキーが送信された後、制御が戻されます。

DoEventsは操作を簡単化によく使われます。例えば、実行されているプロセスをキャンセルし、またはファイルの検索のような処理などです。長時間のプロセスの制御を渡すことには、 ActiveX EXE コンポーネントにタイマーを使うか、またはタスクを設定することはよいです。その後、タスクはまたアプリケーションから完全に独立しており、オペレーティング システムがマルチタスクと時間スライスの処理を実行します。

ヒント:DoEventsによる制御を放棄するプロセスが、最初のDoEventsを返す前に、他の部分のコードから呼び出されないように確認します。そうしないと、予期以外の状況になるかもしれません。さらに、他のアプリケーションがこのプロセスと予測できない方式で互換操作を実行するかもしれないため、DoEventsを使用しないで、現時点では制御を放棄できないためです。

タイマーを作成する

Private Declare Function GetKeyboardState Lib "user32" (pbKeyState As Byte) As Long
Const VK_NUMLOCK = &H90
Const VK_SCROLL = &H91
Const VK_CAPITAL = &H14
Dim zt, ks, t
Sub 開始()
Dim keys(0 To 255) As Byte
t = Timer
ks = 1
zt = 0
For x = 1 To 250
DoEvents
GetKeyboardState keys(0)
If keys(39) > 127 Then zt = 0
If keys(37) > 127 Then zt = 1
If keys(40) > 127 Then ks = 0
If zt = 0 Then Cells(1, 2) = Timer - t
If x = 250 Then x = 0
If ks = 0 Then Exit Sub
Next x
End Sub
Sub 中止()
If zt <> 0 Then
zt = 0
t = Timer - Cells(1, 2)
Else
zt = 1
End If
End Sub
Sub 終了()
ks = 0
End Sub
GetKeyboardState

VB宣言

Declare Function GetKeyboardState Lib “user32” Alias “GetKeyboardState” (pbKeyState As Byte) As Long

解説

キーボードの各仮想キーコードの現在の状態を取得します

返す値

Long、0以外の値を返すのは成功を意味し、0は失敗を意味します。 GetLastErrorを設定します

引数表

引数種類と解説
pbKeyStateLong、合計256個の項目のバイト配列の一番目です。各バイトには、仮想キーコードに対応する状態がロードされます。スイッチキーがオンになっている場合、ビット0は1に設定されます。(スイッチキーにはCapsLock、NumLock、ScrollLockが含まれます)そのときにキーが押されている場合、ビット7は1です。押していない場合は0です。

コメント

仮想キーコードの定数であるVK_?は、配列のインデックスとして使用されます。この関数は、ボタンの状態に対応します。ボタンを押したり離したりした後、配列は自動的に更新されません。 vbからUnicodeへの内部変換によって引き起こされるエラーを回避するために、win32でバイト配列を使用することに注意してください。

Dim keys(0 To 255) As Byte '配列を定義します

DoEvents ‘この関数を追加してから、GetKeyboardState関数はキーボードの各仮想キーコードの状態を取得できます。それ以外の場合は、プログラムが実行される前の仮想キーコードの状態です。つまり、プログラムが実行中の場合にはキーボード制御情報(中止以外)を受信できません。

GetKeyboardState keys(0) 

キーボードの各仮想キーコードの状態を取得します

If keys(39) > 127 Then zt = 0 

Keys(39)>127キーボードの右方向キーが押されたことを意味します。

If keys(37) > 127 Then zt = 1 

Keys(37)>127キーボードの左方向キーが押されたことを意味します。

If keys(40) > 127 Then ks = 0 

Keys(40)>127キーボードの下方向キーが押されたことを意味します。

つまり、キーボードのすべてのキーに対応するkeys(N)は> 127の理由は、バイナリの7番目のビットが1に等しく、10進数の128に相当します。

Share

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です