Fixed joystick name detection - merged from revision 3226 on SDL 1.2 branch
--HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%402495
This commit is contained in:
parent
53fac91c80
commit
9868189326
1 changed files with 47 additions and 44 deletions
|
@ -78,59 +78,62 @@ GetJoystickName(int index, const char *szRegKey)
|
||||||
index (1-16) listed in the registry
|
index (1-16) listed in the registry
|
||||||
*/
|
*/
|
||||||
char *name = NULL;
|
char *name = NULL;
|
||||||
|
HKEY hTopKey;
|
||||||
HKEY hKey;
|
HKEY hKey;
|
||||||
DWORD regsize;
|
DWORD regsize;
|
||||||
LONG regresult;
|
LONG regresult;
|
||||||
unsigned char regkey[256];
|
char regkey[256];
|
||||||
unsigned char regvalue[256];
|
char regvalue[256];
|
||||||
unsigned char regname[256];
|
char regname[256];
|
||||||
|
|
||||||
SDL_snprintf((char *) regkey, SDL_arraysize(regkey), "%s\\%s\\%s",
|
SDL_snprintf(regkey, SDL_arraysize(regkey), "%s\\%s\\%s",
|
||||||
REGSTR_PATH_JOYCONFIG, szRegKey, REGSTR_KEY_JOYCURR);
|
REGSTR_PATH_JOYCONFIG, szRegKey, REGSTR_KEY_JOYCURR);
|
||||||
regresult = RegOpenKeyExA(HKEY_LOCAL_MACHINE,
|
hTopKey = HKEY_LOCAL_MACHINE;
|
||||||
(LPTSTR) & regkey, 0, KEY_READ, &hKey);
|
regresult = RegOpenKeyExA(hTopKey, regkey, 0, KEY_READ, &hKey);
|
||||||
|
if (regresult != ERROR_SUCCESS) {
|
||||||
|
hTopKey = HKEY_CURRENT_USER;
|
||||||
|
regresult = RegOpenKeyExA(hTopKey, regkey, 0, KEY_READ, &hKey);
|
||||||
|
}
|
||||||
|
if (regresult != ERROR_SUCCESS) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* find the registry key name for the joystick's properties */
|
||||||
|
regsize = sizeof(regname);
|
||||||
|
SDL_snprintf(regvalue, SDL_arraysize(regvalue), "Joystick%d%s", index + 1,
|
||||||
|
REGSTR_VAL_JOYOEMNAME);
|
||||||
|
regresult =
|
||||||
|
RegQueryValueExA(hKey, regvalue, 0, 0, (LPBYTE) regname, ®size);
|
||||||
|
RegCloseKey(hKey);
|
||||||
|
|
||||||
|
if (regresult != ERROR_SUCCESS) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* open that registry key */
|
||||||
|
SDL_snprintf(regkey, SDL_arraysize(regkey), "%s\\%s", REGSTR_PATH_JOYOEM,
|
||||||
|
regname);
|
||||||
|
regresult = RegOpenKeyExA(hTopKey, regkey, 0, KEY_READ, &hKey);
|
||||||
|
if (regresult != ERROR_SUCCESS) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* find the size for the OEM name text */
|
||||||
|
regsize = sizeof(regvalue);
|
||||||
|
regresult =
|
||||||
|
RegQueryValueExA(hKey, REGSTR_VAL_JOYOEMNAME, 0, 0, NULL, ®size);
|
||||||
if (regresult == ERROR_SUCCESS) {
|
if (regresult == ERROR_SUCCESS) {
|
||||||
/*
|
/* allocate enough memory for the OEM name text ... */
|
||||||
find the registry key name for the
|
name = (char *) SDL_malloc(regsize);
|
||||||
joystick's properties
|
if (name) {
|
||||||
*/
|
/* ... and read it from the registry */
|
||||||
regsize = sizeof(regname);
|
regresult = RegQueryValueExA(hKey,
|
||||||
SDL_snprintf((char *) regvalue, SDL_arraysize(regvalue),
|
|
||||||
"Joystick%d%s", index + 1, REGSTR_VAL_JOYOEMNAME);
|
|
||||||
regresult = RegQueryValueExA(hKey,
|
|
||||||
(char *) regvalue, 0, 0,
|
|
||||||
(LPBYTE) & regname, (LPDWORD) & regsize);
|
|
||||||
RegCloseKey(hKey);
|
|
||||||
if (regresult == ERROR_SUCCESS) {
|
|
||||||
/* open that registry key */
|
|
||||||
SDL_snprintf((char *) regkey, SDL_arraysize(regkey),
|
|
||||||
"%s\\%s", REGSTR_PATH_JOYOEM, regname);
|
|
||||||
regresult =
|
|
||||||
RegOpenKeyExA(HKEY_LOCAL_MACHINE, (char *) regkey, 0,
|
|
||||||
KEY_READ, &hKey);
|
|
||||||
if (regresult == ERROR_SUCCESS) {
|
|
||||||
/* find the size for the OEM name text */
|
|
||||||
regsize = sizeof(regvalue);
|
|
||||||
regresult =
|
|
||||||
RegQueryValueExA(hKey,
|
|
||||||
REGSTR_VAL_JOYOEMNAME,
|
|
||||||
0, 0, NULL, (LPDWORD) & regsize);
|
|
||||||
if (regresult == ERROR_SUCCESS) {
|
|
||||||
/*
|
|
||||||
allocate enough memory
|
|
||||||
for the OEM name text ...
|
|
||||||
*/
|
|
||||||
name = (char *) SDL_malloc(regsize);
|
|
||||||
/* ... and read it from the registry */
|
|
||||||
regresult =
|
|
||||||
RegQueryValueExA(hKey,
|
|
||||||
REGSTR_VAL_JOYOEMNAME, 0, 0,
|
REGSTR_VAL_JOYOEMNAME, 0, 0,
|
||||||
(LPBYTE) name, (LPDWORD) & regsize);
|
(LPBYTE) name, ®size);
|
||||||
RegCloseKey(hKey);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
RegCloseKey(hKey);
|
||||||
|
|
||||||
return (name);
|
return (name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue