固定キー機能の情報を取得          <TOP>


SystemParametersInfo システム全体に関するパラメータを取得・設定
 

 

'================================================================
'= 固定キー機能の情報を取得
'=    (SPI_GETSTICKYKEYS.bas)
'================================================================
#include "Windows.bi"

Type tagSTICKYKEYS
    cbSize  As Long
    dwFlags As Long
End Type

#define SKF_AUDIBLEFEEDBACK &H40        'このフラグが設定されると、システムは、ユーザーが、ロック、ラッチ、サウンド、またはリリース修飾キーは
#define SKF_AVAILABLE &H2               '固定キー機能が使用可能
#define SKF_CONFIRMHOTKEY &H8           'Windows9*・Windows2000:確認のダイアログボックスが固定キー機能のホットキーを使用してアクティブに表示・
#define SKF_HOTKEYACTIVE &H4            'ユーザーは、固定キー、Shiftキーを5回押してオンとオフの機能を無効にすることができる
#define SKF_HOTKEYSOUND &H10            'システムは、ユーザーが固定ホットキーを使用してオンまたはオフ機能をオンサイレンの音を再生する
#define SKF_INDICATOR &H20              'Windows98・Windows2000:視覚的なインジケータは、固定キー機能が表示される必要があります。
#define SKF_LALTLATCHED &H10000000      'Windows98・Windows2000:左[Alt]キーがラッチされる
#define SKF_LALTLOCKED &H100000         'Windows98・Windows2000:左[Alt]キーがロックされる
#define SKF_LCTLLATCHED &H4000000       'Windows98・Windows2000:左[Ctrl]キーがラッチされる
#define SKF_LCTLLOCKED &H40000          'Windows98・Windows2000:左[Ctrl]キーがロックされる
#define SKF_LSHIFTLATCHED &H1000000     'Windows98・Windows2000:左[Shift]キーがラッチされる
#define SKF_LSHIFTLOCKED &H10000        'Windows98・Windows2000:左[Shift]キーがロックされる
#define SKF_LWINLATCHED &H40000000      'Windows98・Windows2000:左[Windows]キーがラッチされる
#define SKF_LWINLOCKED &H400000         'Windows98・Windows2000:左[Windows]キーがロックされる
#define SKF_RALTLATCHED &H20000000      'Windows98・Windows2000:右[Alt]キーがラッチされる
#define SKF_RALTLOCKED &H200000         'Windows98・Windows2000:右[Alt]キーがロックされる
#define SKF_RCTLLATCHED &H8000000       'Windows98・Windows2000:右[Ctrl]キーがラッチされる
#define SKF_RCTLLOCKED &H80000          'Windows98・Windows2000:右[Ctrl]キーがロックされる
#define SKF_RSHIFTLATCHED &H2000000     'Windows98・Windows2000:右[Shift]キーがラッチされる
#define SKF_RSHIFTLOCKED &H20000        'Windows98・Windows2000:右[Shift]キーがロックされる
#define SKF_RWINLATCHED &H80000000      'Windows98・Windows2000:右[Windows]キーがラッチされる
#define SKF_RWINLOCKED &H800000         'Windows98・Windows2000:右[Windows]キーがロックされる
#define SKF_STICKYKEYSON &H1            '固定キー機能が有効
#define SKF_TRISTATE &H80               '[Shift]・[Ctrl]・[Alt]を2回押したとき、押し続けていると見なし3回目を押したとき、その設定を解除
#define SKF_TWOKEYSOFF &H100            '別のキーと同時に押している[Shift]・[Ctrl]・[Alt]をアップしたとき、スティックキーをオフにする
#define SPI_GETSTICKYKEYS 58            'ユーザー補助機能の固定キーを定義するSTICKYKEYS構造体を取得

' システム全体に関するパラメータを取得・設定
Declare Function Api_SystemParametersInfo& Lib "user32" Alias "SystemParametersInfoA" (ByVal uiAction&, ByVal uiParam&, pvParam As Any, ByVal fWinIni&)

Var Shared List1 As Object
Var Shared Button1 As Object

Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14
List1.Attach GetDlgItem("List1") : List1.SetFontSize 12

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var tsk As tagSTICKYKEYS
    Var Ret As Long

    'リストボックスをクリア
    List1.ResetContent

    '構造体を初期化
    tsk.cbSize = Len(tsk)

    '固定キー機能の情報を取得
    Ret = Api_SystemParametersInfo(SPI_GETSTICKYKEYS, Len(tsk), tsk, 0)

    '固定キー機能の情報を表示
    If (tsk.dwFlags And SKF_STICKYKEYSON) = SKF_STICKYKEYSON Then
        List1.AddString "固定キー機能有効"
    End If

    If (tsk.dwFlags And SKF_AVAILABLE) = SKF_AVAILABLE Then
        List1.AddString "固定キー機能あり"
    End If

    If (tsk.dwFlags And SKF_HOTKEYACTIVE) = SKF_HOTKEYACTIVE Then
        List1.AddString "ショートカットキーを使う"
    End If

    If (tsk.dwFlags And SKF_CONFIRMHOTKEY) = SKF_CONFIRMHOTKEY Then
        List1.AddString "ショートカットキーの有効時に確認"
    End If

    If (tsk.dwFlags And SKF_HOTKEYSOUND) = SKF_HOTKEYSOUND Then
        List1.AddString "ショートカットキーの有効時に音"
    End If

    If (tsk.dwFlags And SKF_INDICATOR) = SKF_INDICATOR Then
        List1.AddString "固定キー機能の状態を表示"
    End If

    If (tsk.dwFlags And SKF_AUDIBLEFEEDBACK) = SKF_AUDIBLEFEEDBACK Then
        List1.AddString "CtrlかAltかShiftを押したとき音"
    End If

    If (tsk.dwFlags And SKF_TRISTATE) = SKF_TRISTATE Then
        List1.AddString "CtrlかAltかShiftを2回押すとロック"
    End If

    If (tsk.dwFlags And SKF_TWOKEYSOFF) = SKF_TWOKEYSOFF Then
        List1.AddString "2つのキーを同時に押すと無効"
    End If

    If (tsk.dwFlags And SKF_LALTLOCKED) = SKF_LALTLOCKED Then
        List1.AddString "左Altキー ロック"
    End If

    If (tsk.dwFlags And SKF_LCTLLOCKED) = SKF_LCTLLOCKED Then
        List1.AddString "左Ctrlキー ロック"
    End If

    If (tsk.dwFlags And SKF_LSHIFTLOCKED) = SKF_LSHIFTLOCKED Then
        List1.AddString "左Shiftキー ロック"
    End If

    If (tsk.dwFlags And SKF_RALTLOCKED) = SKF_RALTLOCKED Then
        List1.AddString "右Altキー ロック"
    End If

    If (tsk.dwFlags And SKF_RCTLLOCKED) = SKF_RCTLLOCKED Then
        List1.AddString "右Ctrlキー ロック"
    End If

    If (tsk.dwFlags And SKF_RSHIFTLOCKED) = SKF_RSHIFTLOCKED Then
        List1.AddString "右Shiftキー ロック"
    End If

    If (tsk.dwFlags And SKF_LWINLOCKED) = SKF_LWINLOCKED Then
        List1.AddString "左Windowsキー ロック"
    End If

    If (tsk.dwFlags And SKF_RWINLOCKED) = SKF_RWINLOCKED Then
        List1.AddString "右Windowsキー ロック"
    End If
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End