'このファイルには、DirectInputをCOMインターフェイスレベルで扱うための関数が定義されています。 '------------------------------------------------- ' DirectInputに必要なヘッダファイルをインクルード '------------------------------------------------- #include Dim dx_lpDI As LPDIRECTINPUT8 'DirectInputインターフェイス 'DirectMusicを初期化する関数 Function dx_InitDInput() As Long Dim hr As DWord hr=DirectInput8Create(GetModuleHandle(0), DIRECTINPUT_VERSION, IID_IDirectInput8, VarPtr(dx_lpDI), NULL ) If hr=S_OK Then dx_InitDInput=TRUE Else dx_InitDInput=FALSE End Function ' DirectMusicを終了するための関数 Sub dx_QuitDInput() If dx_lpDI Then dx_lpDI->Release() End Sub '---------------- ' クラス '---------------- Class CInputKeyboard lpDIDevice As LPDIRECTINPUTDEVICE8 Public Sub CInputKeyboard() 'デバイスを生成 dx_lpDI->CreateDevice(GUID_SysKeyboard,VarPtr(lpDIDevice),NULL) 'データ形式を設定 lpDIDevice->SetDataFormat(VarPtr(c_dfDIKeyboard)) '操作レベルを設定 lpDIDevice->SetCooperativeLevel(hMainWnd, DISCL_FOREGROUND or DISCL_NONEXCLUSIVE) 'アクセス権の取得 lpDIDevice->Acquire() End Sub Sub ~CInputKeyboard() 'アクセス権を放棄 lpDIDevice->Unacquire() 'デバイスを閉じる lpDIDevice->Release() End Sub 'キーボードの状態を取得する関数(pKeyStateは256個のByte領域を持つ配列へのポインタ) Function GetState(pKeyState As *Char) As Long Dim hr As DWord hr=lpDIDevice->GetDeviceState(256,pKeyState) If hr=S_OK Then GetState=TRUE Else GetState=FALSE End Function End Class Class CInputMouse lpDIDevice As LPDIRECTINPUTDEVICE8 Public Sub CInputMouse() 'デバイスを生成 dx_lpDI->CreateDevice(GUID_SysMouse,VarPtr(lpDIDevice),NULL) 'データ形式を設定 lpDIDevice->SetDataFormat(VarPtr(c_dfDIMouse)) '操作レベルを設定 lpDIDevice->SetCooperativeLevel(hMainWnd, DISCL_FOREGROUND or DISCL_NONEXCLUSIVE) 'アクセス権の取得 lpDIDevice->Acquire() End Sub Sub ~CInputMouse() 'アクセス権を放棄 lpDIDevice->Unacquire() 'デバイスを閉じる lpDIDevice->Release() End Sub 'キーボードの状態を取得する関数(pKeyStateは256個のByte領域を持つ配列へのポインタ) Function GetState(pMouseState As *DIMOUSESTATE) As Long Dim hr As DWord hr=lpDIDevice->GetDeviceState(SizeOf(DIMOUSESTATE),pMouseState) If hr=S_OK Then GetState=TRUE Else GetState=FALSE End Function End Class