| Microsoft Access Club >SampleFile >インデックス >このページ >次頁 < 前項 | |
|
Windows APIとはWindows API (Application Program Interface)をAccessVBAで利用するためには、宣言を記述しなくてはいけません。これは定型文ですから、覚える必要は ありません。サンプルファイルのモジュール欄に纏めてありますから、必要なときにダウンロードしてご利用下さい。 このAPIは、「IT用語辞典」によると下記のように説明されています。
API利用のための宣言部分ScrollLockキーをオン、オフにするプロシージャを作成します。まず、宣言部分を記述し、次にFunctionプロシージャとして作成します。 Option Compare Database
Option Explicit
'以下、宣言です。
'NumLock、CapsLock、ScrollLock、共通。
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
'Maintenance string for PSS usage
szCSDVersion As String * 128
End Type
'API declarations:
Private Declare Function GetVersionEx Lib "kernel32" _
Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare Function GetKeyboardState Lib "user32" _
(pbKeyState As Byte) As Long
Private Declare Function SetKeyboardState Lib "user32" _
(lppbKeyState As Byte) As Long
'Constant declarations:
Const VK_NUMLOCK = &H90
Const VK_SCROLL = &H91
Const VK_CAPITAL = &H14
Const KEYEVENTF_EXTENDEDKEY = &H1
Const KEYEVENTF_KEYUP = &H2
Const VER_PLATFORM_WIN32_NT = 2
Const VER_PLATFORM_WIN32_WINDOWS = 1
FunctionプロシージャCommand_SCROLLLOCKの作成'ScrollLockキーを切り替える Win APIです。
Function Command_SCROLLLOCK()
Dim OsVer As OSVERSIONINFO
Dim ScrollLockState As Boolean
OsVer.dwOSVersionInfoSize = Len(OsVer)
GetVersionEx OsVer
Dim keys(0 To 255) As Byte
GetKeyboardState keys(0)
ScrollLockState = keys(VK_SCROLL)
'オフであれば強制的にオンに切り替えます。
If ScrollLockState <> True Then
'Win95/98系
If OsVer.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then
keys(VK_SCROLL) = 1
SetKeyboardState keys(0)
'WinNT系
ElseIf OsVer.dwPlatformId = VER_PLATFORM_WIN32_NT Then
keybd_event VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
keybd_event VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
End If
'オンであれば強制的にオフに切り替えます。
Else
'Win95/98系
If OsVer.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then
keys(VK_SCROLL) = 1
SetKeyboardState keys(0)
'WinNT系
ElseIf OsVer.dwPlatformId = VER_PLATFORM_WIN32_NT Then
keybd_event VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
keybd_event VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
End If
End If
End Function
解説フォームを作成し、コマンドボタンのクリック時イベントに記述するなどして利用して下さい。
解説Win95/98系とWinNT(Win2000、WinXP)とで処理が異なっています。 If ScrollLockState <> True ThenこのIF構文で強制的にScrollLockキーをオンにしています。 'Win95/98系
If OsVer.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then
keys(VK_SCROLL) = 1
SetKeyboardState keys(0)
'WinNT系
ElseIf OsVer.dwPlatformId = VER_PLATFORM_WIN32_NT Then
keybd_event VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
keybd_event VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
End If
ElseこのIF構文のElse以下で強制的にScrollLockキーをオフにしています。 'Win95/98系
If OsVer.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then
keys(VK_SCROLL) = 1
SetKeyboardState keys(0)
'WinNT系
ElseIf OsVer.dwPlatformId = VER_PLATFORM_WIN32_NT Then
keybd_event VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
keybd_event VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
End If
ScrollLockキーの状態を取得するプロシージャ前述のプロシージャを一部変更して、フォームを開いた時にScrollLockキーの状態をメッセージボックスに表示させるプロシージャをご紹介します。 'ScrollLockの状態を取得します。
Function Display_SCROLLLOCK()
Dim ScrollLockState As Boolean
Dim keys(0 To 255) As Byte
GetKeyboardState keys(0)
ScrollLockState = keys(VK_SCROLL)
If ScrollLockState = True Then
Display_SCROLLLOCK = "現在、ScrollLockはオンです"
Else
Display_SCROLLLOCK = "現在、ScrollLockはオフです"
End If
MsgBox Display_SCROLLLOCK
End Function
解説プロシージャを実行すると、現在のScrollLockキーの状態を取得しメッセージボックスに表示します。
注意点
関連ページ
|