From dced097e44556e667fd2a514db5a002b8aad8f46 Mon Sep 17 00:00:00 2001 From: Sergey Khodych Date: Sun, 20 Apr 2008 23:52:42 +0300 Subject: dinput: Implement DIPROP_KEYNAME property for keyboard device. --- dlls/dinput/keyboard.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++- include/dinput.h | 8 +++++++ 2 files changed, 55 insertions(+), 2 deletions(-) diff --git a/dlls/dinput/keyboard.c b/dlls/dinput/keyboard.c index 87837ff..fdcb68d 100644 --- a/dlls/dinput/keyboard.c +++ b/dlls/dinput/keyboard.c @@ -404,6 +404,51 @@ static HRESULT WINAPI SysKeyboardWImpl_GetDeviceInfo(LPDIRECTINPUTDEVICE8W iface return DI_OK; } +/****************************************************************************** + * GetProperty : Retrieves information about the input device. + */ + +static HRESULT WINAPI SysKeyboardAImpl_GetProperty( + LPDIRECTINPUTDEVICE8A iface, + REFGUID rguid, + LPDIPROPHEADER pdiph) +{ + TRACE("(%p,%s,%p)\n", iface, debugstr_guid(rguid), pdiph); + + _dump_DIPROPHEADER(pdiph); + + if (HIWORD(rguid)) + return DI_OK; + + switch (LOWORD(rguid)) + { + case (DWORD)DIPROP_KEYNAME: + { + HRESULT hr; + LPDIPROPSTRING ps = (LPDIPROPSTRING)pdiph; + DIDEVICEOBJECTINSTANCEW didoi = {0}; + + if ( pdiph->dwSize != sizeof( DIPROPSTRING ) ) + return DIERR_INVALIDPARAM; + + didoi.dwSize = sizeof( DIDEVICEOBJECTINSTANCEW ); + + hr = SysKeyboardWImpl_GetObjectInfo( (LPDIRECTINPUTDEVICE8W)iface , &didoi, + ps->diph.dwObj, ps->diph.dwHow ); + if ( SUCCEEDED( hr ) ) + { + memcpy( ps->wsz, didoi.tszName, + sizeof( ps->wsz )/ sizeof( ps->wsz[0 ] ) ); + } + return hr; + } + default: + return IDirectInputDevice2AImpl_GetProperty( iface, rguid, pdiph ); + } + return DI_OK; +} + + static const IDirectInputDevice8AVtbl SysKeyboardAvt = { IDirectInputDevice2AImpl_QueryInterface, @@ -411,7 +456,7 @@ static const IDirectInputDevice8AVtbl SysKeyboardAvt = IDirectInputDevice2AImpl_Release, SysKeyboardAImpl_GetCapabilities, IDirectInputDevice2AImpl_EnumObjects, - IDirectInputDevice2AImpl_GetProperty, + SysKeyboardAImpl_GetProperty, IDirectInputDevice2AImpl_SetProperty, IDirectInputDevice2AImpl_Acquire, IDirectInputDevice2AImpl_Unacquire, @@ -453,7 +498,7 @@ static const IDirectInputDevice8WVtbl SysKeyboardWvt = XCAST(Release)IDirectInputDevice2AImpl_Release, XCAST(GetCapabilities)SysKeyboardAImpl_GetCapabilities, IDirectInputDevice2WImpl_EnumObjects, - XCAST(GetProperty)IDirectInputDevice2AImpl_GetProperty, + XCAST(GetProperty)SysKeyboardAImpl_GetProperty, XCAST(SetProperty)IDirectInputDevice2AImpl_SetProperty, XCAST(Acquire)IDirectInputDevice2AImpl_Acquire, XCAST(Unacquire)IDirectInputDevice2AImpl_Unacquire, diff --git a/include/dinput.h b/include/dinput.h index 3ee9ab7..de5e035 100644 --- a/include/dinput.h +++ b/include/dinput.h @@ -725,6 +725,12 @@ typedef struct DIPROPGUIDANDPATH { } DIPROPGUIDANDPATH, *LPDIPROPGUIDANDPATH; typedef const DIPROPGUIDANDPATH *LPCDIPROPGUIDANDPATH; +typedef struct DIPROPSTRING { + DIPROPHEADER diph; + WCHAR wsz[MAX_PATH]; +} DIPROPSTRING, *LPDIPROPSTRING; +typedef const DIPROPSTRING *LPCDIPROPSTRING; + /* special property GUIDs */ #ifdef __cplusplus #define MAKEDIPROP(prop) (*(const GUID *)(prop)) @@ -756,6 +762,8 @@ typedef const DIPROPGUIDANDPATH *LPCDIPROPGUIDANDPATH; #define DIPROP_CALIBRATION MAKEDIPROP(11) #define DIPROP_GUIDANDPATH MAKEDIPROP(12) +#define DIPROP_KEYNAME MAKEDIPROP(20) + typedef struct DIDEVCAPS_DX3 { DWORD dwSize; DWORD dwFlags; -- 1.5.3.3