dinput: Implement GetDeviceStatus.

This commit is contained in:
Vitaliy Margolen 2008-05-11 13:33:17 -06:00 committed by Alexandre Julliard
parent d7b98841ab
commit a37c60b0f7
2 changed files with 26 additions and 4 deletions

View File

@ -417,8 +417,15 @@ static HRESULT WINAPI IDirectInputWImpl_Initialize(LPDIRECTINPUT7W iface, HINSTA
static HRESULT WINAPI IDirectInputAImpl_GetDeviceStatus(LPDIRECTINPUT7A iface, REFGUID rguid) static HRESULT WINAPI IDirectInputAImpl_GetDeviceStatus(LPDIRECTINPUT7A iface, REFGUID rguid)
{ {
IDirectInputImpl *This = (IDirectInputImpl *)iface; IDirectInputImpl *This = (IDirectInputImpl *)iface;
HRESULT hr;
LPDIRECTINPUTDEVICEA device;
FIXME( "(%p)->(%s): stub\n", This, debugstr_guid(rguid) ); TRACE( "(%p)->(%s)\n", This, debugstr_guid(rguid) );
hr = IDirectInput_CreateDevice( iface, rguid, &device, NULL );
if (hr != DI_OK) return DI_NOTATTACHED;
IUnknown_Release( device );
return DI_OK; return DI_OK;
} }

View File

@ -124,10 +124,13 @@ static BOOL CALLBACK enum_devices(LPCDIDEVICEINSTANCE lpddi, LPVOID pvRef)
LPDIRECTINPUTDEVICE device; LPDIRECTINPUTDEVICE device;
HRESULT hr; HRESULT hr;
hr = IDirectInput_GetDeviceStatus(data->pDI, &lpddi->guidInstance);
ok(hr == DI_OK, "IDirectInput_GetDeviceStatus() failed: %s\n", DXGetErrorString8(hr));
if (hr == DI_OK)
{
hr = IDirectInput_CreateDevice(data->pDI, &lpddi->guidInstance, &device, NULL); hr = IDirectInput_CreateDevice(data->pDI, &lpddi->guidInstance, &device, NULL);
ok(SUCCEEDED(hr), "IDirectInput_CreateDevice() failed: %s\n", DXGetErrorString8(hr)); ok(SUCCEEDED(hr), "IDirectInput_CreateDevice() failed: %s\n", DXGetErrorString8(hr));
if (SUCCEEDED(hr))
{
trace("Testing device \"%s\"\n", lpddi->tszInstanceName); trace("Testing device \"%s\"\n", lpddi->tszInstanceName);
test_object_info(device, data->hwnd); test_object_info(device, data->hwnd);
IUnknown_Release(device); IUnknown_Release(device);
@ -164,6 +167,18 @@ static void device_tests(void)
hr = IDirectInput_EnumDevices(pDI, 0, enum_devices, &data, DIEDFL_ALLDEVICES); hr = IDirectInput_EnumDevices(pDI, 0, enum_devices, &data, DIEDFL_ALLDEVICES);
ok(SUCCEEDED(hr), "IDirectInput_EnumDevices() failed: %s\n", DXGetErrorString8(hr)); ok(SUCCEEDED(hr), "IDirectInput_EnumDevices() failed: %s\n", DXGetErrorString8(hr));
/* If GetDeviceStatus returns DI_OK the device must exist */
hr = IDirectInput_GetDeviceStatus(pDI, &GUID_Joystick);
if (hr == DI_OK)
{
LPDIRECTINPUTDEVICE device = NULL;
hr = IDirectInput_CreateDevice(pDI, &GUID_Joystick, &device, NULL);
ok(SUCCEEDED(hr), "IDirectInput_CreateDevice() failed: %s\n", DXGetErrorString8(hr));
if (device) IUnknown_Release(device);
}
DestroyWindow(hwnd); DestroyWindow(hwnd);
} }
if (pDI) IUnknown_Release(pDI); if (pDI) IUnknown_Release(pDI);