</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>value = winqueryreg('name', 'rootkey','subkey')
+ <synopsis>
+ value = winqueryreg('name', 'rootkey','subkey')
+ value = winqueryreg('key', 'rootkey','subkey')
value = winqueryreg('rootkey', 'subkey','valname')
value = winqueryreg('rootkey','subkey')
</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
- <para>value = winqueryreg('name', 'rootkey', 'subkey') returns the key names
+ <para>
+ value = winqueryreg('name', 'rootkey', 'subkey') returns the values names
in <literal>rootkey\subkey</literal> in a matrix of strings. The first argument
is the literal quoted string, 'name'.
</para>
- <para>If the value retrieved from the registry is a string, winqueryreg
- returns a string. If the value is a 32-bit integer, winqueryreg returns
- the value as an integer (int32).
+ <para>If the data retrieved from the registry is a string, winqueryreg
+ returns a string. If the data is a 32-bit integer, winqueryreg returns
+ the data as an integer (int32).
+ </para>
+ <para>
+ value = winqueryreg('key', 'rootkey', 'subkey') returns the keys names
+ in <literal>rootkey\subkey</literal> in a matrix of strings. The first argument
+ is the literal quoted string, 'key'.
</para>
- <para>value = winqueryreg('rootkey', 'subkey', 'valname') returns the value
- for key valname in <literal>rootkey\subkey</literal>.
+ <para>value = winqueryreg('rootkey', 'subkey', 'valname') returns the data
+ for value valname in <literal>rootkey\subkey</literal>.
</para>
- <para>value = winqueryreg('rootkey', 'subkey') returns a value in
+ <para>value = winqueryreg('rootkey', 'subkey') returns a data in
<literal>rootkey\subkey</literal> that has no value name property.
</para>
<para>
- <literal>Note</literal>The literal name argument and the rootkey argument
+ <literal>Note</literal>The literal name argument, key argument and the rootkey argument
are case-sensitive. The subkey and valname arguments are not.
</para>
<para>supported root keys are: 'HKEY_CLASSES_ROOT', 'HKEY_CURRENT_USER', 'HKEY_LOCAL_MACHINE', 'HKEY_USERS', 'HKEY_DYN_DATA' and 'HKEY_CURRENT_CONFIG'.</para>
+ <para>and shortcut names: 'HKCR', 'HKCU', 'HKLM', 'HKU', 'HKDD' and 'HKCC'.</para>
</refsection>
<refsection>
<title>Examples</title>
- <programlisting role="example"><![CDATA[
+ <programlisting role="example">
+ <![CDATA[
if getos() == 'Windows' then
- winqueryreg 'HKEY_LOCAL_MACHINE' 'HARDWARE\DESCRIPTION\System\CentralProcessor\0\' 'ProcessorNameString'
- mousechar = winqueryreg('name', 'HKEY_CURRENT_USER','control panel\mouse');
- len=size(mousechar);
- for k=1:len(1)
- setting = winqueryreg('HKEY_CURRENT_USER','control panel\mouse', mousechar(k));
- if (mousechar(k)=='') then mousechar(k)='default';,end
- str = msprintf('%s = %s', mousechar(k), string(setting));
- disp(str);
- end
- winqueryreg('HKEY_CURRENT_CONFIG', 'Software\Fonts\','LogPixels')
+ winqueryreg 'HKEY_LOCAL_MACHINE' 'HARDWARE\DESCRIPTION\System\CentralProcessor\0\' 'ProcessorNameString'
+
+ mousechar = winqueryreg('name', 'HKEY_CURRENT_USER','control panel\mouse');
+ len=size(mousechar);
+ for k=1:len(1)
+ setting = winqueryreg('HKEY_CURRENT_USER','control panel\mouse', mousechar(k));
+ if (mousechar(k)=='') then mousechar(k)='default';,end
+ str = msprintf('%s = %s', mousechar(k), string(setting));
+ disp(str);
+ end
+
+ winqueryreg('HKEY_CURRENT_CONFIG', 'Software\Fonts\','LogPixels')
+ winqueryreg('key' ,'HKLM', 'Software\Microsoft\.NETFramework')
end
- ]]></programlisting>
+ ]]>
+ </programlisting>
</refsection>
<refsection>
<title>History</title>
<revnumber>5.4.0</revnumber>
<revremark>This function also manages 'HKEY_CURRENT_CONFIG' key.</revremark>
</revision>
+ <revision>
+ <revnumber>5.4.1</revnumber>
+ <revremark>Manage shorcut root names.</revremark>
+ <revremark>Can retrieve key list names.</revremark>
+ </revision>
</revhistory>
</refsection>
</refentry>
</refnamediv>
<refsynopsisdiv>
<title>Séquence d'appel</title>
- <synopsis>value = winqueryreg('name', 'rootkey', 'subkey')
+ <synopsis>
+ value = winqueryreg('name', 'rootkey', 'subkey')
+ value = winqueryreg('key', 'rootkey', 'subkey')
value = winqueryreg('rootkey', 'subkey', 'valname')
value = winqueryreg('rootkey', 'subkey')
</synopsis>
est un entier sur 32 bits, winqueryreg retourne la valeur comme un entier
(int32).
</para>
+ <para>
+ value = winqueryreg('key', 'rootkey', 'subkey') retourne les sous clés
+ contenues dans rootkey\subkey dans une matrice de chaines de caracteres.
+ Le premier argument doit etre la chaine de caracteres, 'key'.
+ </para>
<para>value = winqueryreg('rootkey', 'subkey', 'valname') retourne la valeur
pour la clef valname dans rootkey\subkey.
</para>
défaut" de la clef rootkey\subkey.
</para>
<para>
- <literal>Note</literal>Les arguments 'name' et 'rootkey' sont
+ <literal>Note</literal>Les arguments 'name', 'key et 'rootkey' sont
"case-sensitive". Les arguments 'subkey' et 'valname' ne le sont pas.
</para>
<para>Les clefs racine supportées sont: 'HKEY_CLASSES_ROOT', 'HKEY_CURRENT_USER', 'HKEY_LOCAL_MACHINE', 'HKEY_USERS', 'HKEY_DYN_DATA' and 'HKEY_CURRENT_CONFIG'.</para>
+ <para>Leurs raccourcis peuvent aussi être utilisé 'HKCR', 'HKCU', 'HKLM', 'HKU', 'HKDD' and 'HKCC'</para>
</refsection>
<refsection>
<title>Exemples</title>
- <programlisting role="example"><![CDATA[
+ <programlisting role="example">
+ <![CDATA[
if getos() == 'Windows' then
- winqueryreg 'HKEY_LOCAL_MACHINE' 'HARDWARE\DESCRIPTION\System\CentralProcessor\0\' 'ProcessorNameString'
- mousechar = winqueryreg('name', 'HKEY_CURRENT_USER','control panel\mouse');
- len=size(mousechar);
- for k=1:len(1)
- setting = winqueryreg('HKEY_CURRENT_USER','control panel\mouse', mousechar(k));
- if (mousechar(k)=='') then mousechar(k)='default';,end
- str = msprintf('%s = %s', mousechar(k), string(setting));
- disp(str);
- end
- winqueryreg('HKEY_CURRENT_CONFIG', 'Software\Fonts\','LogPixels')
+ winqueryreg 'HKEY_LOCAL_MACHINE' 'HARDWARE\DESCRIPTION\System\CentralProcessor\0\' 'ProcessorNameString'
+
+ mousechar = winqueryreg('name', 'HKEY_CURRENT_USER','control panel\mouse');
+ len=size(mousechar);
+ for k=1:len(1)
+ setting = winqueryreg('HKEY_CURRENT_USER','control panel\mouse', mousechar(k));
+ if (mousechar(k)=='') then mousechar(k)='default';,end
+ str = msprintf('%s = %s', mousechar(k), string(setting));
+ disp(str);
+ end
+
+ winqueryreg('HKEY_CURRENT_CONFIG', 'Software\Fonts\','LogPixels')
+ winqueryreg('key' ,'HKLM', 'Software\Microsoft\.NETFramework')
end
- ]]></programlisting>
+ ]]>
+ </programlisting>
</refsection>
<refsection>
<title>History</title>
<revnumber>5.4.0</revnumber>
<revremark>Cette fonction gére également la clé 'HKEY_CURRENT_CONFIG'.</revremark>
</revision>
+ <revision>
+ <revnumber>5.4.1</revnumber>
+ <revremark>Accepte les raccourcis de clés racine.</revremark>
+ <revremark>Peut renvoyer la liste des noms de clés.</revremark>
+ </revision>
</revhistory>
</refsection>
</refentry>
#include "PATH_MAX.h"
#include "freeArrayOfString.h"
/*--------------------------------------------------------------------------*/
-int sci_winqueryreg(char *fname,unsigned long l)
+int sci_winqueryreg(char *fname, unsigned long l)
{
SciErr sciErr;
int *piAddressVarOne = NULL;
if (Rhs == 3)
{
sciErr = getVarAddressFromPosition(pvApiCtx, 3, &piAddressVarThree);
- if(sciErr.iErr)
+ if (sciErr.iErr)
{
printError(&sciErr, 0);
Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 3);
if (!isStringType(pvApiCtx, piAddressVarThree))
{
- Scierror(999,_("%s: Wrong type for input argument #%d: String expected.\n"), fname, 3);
+ Scierror(999, _("%s: Wrong type for input argument #%d: String expected.\n"), fname, 3);
return 0;
}
if (!isScalar(pvApiCtx, piAddressVarThree))
{
- Scierror(999,_("%s: Wrong size for input argument #%d: String expected.\n"), fname, 3);
+ Scierror(999, _("%s: Wrong size for input argument #%d: String expected.\n"), fname, 3);
return 0;
}
if (getAllocatedSingleString(pvApiCtx, piAddressVarThree, &pStrParamThree) != 0)
{
- Scierror(999,_("%s: Memory allocation error.\n"), fname);
+ Scierror(999, _("%s: Memory allocation error.\n"), fname);
return 0;
}
}
sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddressVarOne);
- if(sciErr.iErr)
+ if (sciErr.iErr)
{
printError(&sciErr, 0);
Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
if (!isStringType(pvApiCtx, piAddressVarOne))
{
- Scierror(999,_("%s: Wrong type for input argument #%d: String expected.\n"), fname, 1);
+ Scierror(999, _("%s: Wrong type for input argument #%d: String expected.\n"), fname, 1);
return 0;
}
if (!isScalar(pvApiCtx, piAddressVarOne))
{
- Scierror(999,_("%s: Wrong size for input argument #%d: String expected.\n"), fname, 1);
+ Scierror(999, _("%s: Wrong size for input argument #%d: String expected.\n"), fname, 1);
return 0;
}
sciErr = getVarAddressFromPosition(pvApiCtx, 2, &piAddressVarTwo);
- if(sciErr.iErr)
+ if (sciErr.iErr)
{
printError(&sciErr, 0);
Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 2);
if (!isStringType(pvApiCtx, piAddressVarTwo))
{
- Scierror(999,_("%s: Wrong type for input argument #%d: String expected.\n"), fname, 2);
+ Scierror(999, _("%s: Wrong type for input argument #%d: String expected.\n"), fname, 2);
return 0;
}
if (!isScalar(pvApiCtx, piAddressVarTwo))
{
- Scierror(999,_("%s: Wrong size for input argument #%d: String expected.\n"), fname, 2);
+ Scierror(999, _("%s: Wrong size for input argument #%d: String expected.\n"), fname, 2);
return 0;
}
freeAllocatedSingleString(pStrParamThree);
pStrParamThree = NULL;
}
- Scierror(999,_("%s: Memory allocation error.\n"), fname);
+ Scierror(999, _("%s: Memory allocation error.\n"), fname);
return 0;
}
pStrParamTwo = NULL;
}
- Scierror(999,_("%s: Memory allocation error.\n"), fname);
+ Scierror(999, _("%s: Memory allocation error.\n"), fname);
return 0;
}
if (Rhs == 3)
{
- if (strcmp(pStrParamOne, "name") == 0)
+ BOOL bKey = strcmp(pStrParamOne, "key") == 0;
+ BOOL bValue = strcmp(pStrParamOne, "name") == 0;
+
+ if (bValue || bKey)
{
int NumbersElm = 0;
- WindowsQueryRegistryNumberOfElementsInList(pStrParamTwo, pStrParamThree, &NumbersElm);
+ if (bValue)
+ {
+ WindowsQueryRegistryNumberOfValuesInList(pStrParamTwo, pStrParamThree, &NumbersElm);
+ }
+ else
+ {
+ WindowsQueryRegistryNumberOfKeysInList(pStrParamTwo, pStrParamThree, &NumbersElm);
+ }
+
if (NumbersElm)
{
- #define MAX_ELMT_REGLIST 255
+ BOOL bResult = FALSE;
+#define MAX_ELMT_REGLIST 255
char **ListKeysName = NULL;
int i = 0;
- if (NumbersElm > MAX_ELMT_REGLIST) NumbersElm = MAX_ELMT_REGLIST;
+ if (NumbersElm > MAX_ELMT_REGLIST)
+ {
+ NumbersElm = MAX_ELMT_REGLIST;
+ }
ListKeysName = (char **)MALLOC(sizeof(char*) * NumbersElm);
for (i = 0; i < NumbersElm; i++)
{
ListKeysName[i] = NULL;
}
- if (WindowsQueryRegistryList(pStrParamTwo, pStrParamThree, NumbersElm, ListKeysName))
+ if (bValue)
+ {
+ bResult = WindowsQueryRegistryValuesList(pStrParamTwo, pStrParamThree, NumbersElm, ListKeysName);
+ }
+ else
+ {
+ bResult = WindowsQueryRegistryKeysList(pStrParamTwo, pStrParamThree, NumbersElm, ListKeysName);
+ }
+
+ if (bResult)
{
int nOne = 1;
sciErr = createMatrixOfString(pvApiCtx, Rhs + 1, NumbersElm, nOne, ListKeysName);
if (sciErr.iErr)
{
printError(&sciErr, 0);
- Scierror(999,_("%s: Memory allocation error.\n"), fname);
+ Scierror(999, _("%s: Memory allocation error.\n"), fname);
}
else
{
}
else
{
- Scierror(999,_("%s: Cannot open Windows registry.\n"), fname);
+ Scierror(999, _("%s: Cannot open Windows registry.\n"), fname);
}
freeArrayOfString(ListKeysName, NumbersElm);
}
createScalarDouble(pvApiCtx, Rhs + 1, (double)iOutput);
}
- LhsVar(1) = Rhs+1;
+ LhsVar(1) = Rhs + 1;
PutLhsVar();
}
else
{
- Scierror(999,_("%s: Cannot query value of this type.\n"),fname);
+ Scierror(999, _("%s: Cannot query value of this type.\n"), fname);
}
FREE( pStrOutput);
}
else
{
- Scierror(999,_("%s: Memory allocation error.\n"), fname);
+ Scierror(999, _("%s: Memory allocation error.\n"), fname);
}
if (pStrParamThree)
#define MAX_KEY_LENGTH 255
#define MAX_VALUE_NAME 16383
/*--------------------------------------------------------------------------*/
-BOOL WindowsQueryRegistry(char *ParamIn1, char *ParamIn2, char *ParamIn3, char *ParamOut1, int *ParamOut2, BOOL *OuputIsREG_SZ)
+
+static BOOL WindowsOpenRegistry(char* _pstRoot, char* _pstKey, HKEY* _pKeyOut)
{
- BOOL bOK = TRUE;
- HKEY key;
- HKEY hKeyToOpen = NULL;
DWORD OpensKeyOptions = 0;
- DWORD type = 0;
+ HKEY hKeyToOpen = NULL;
- hKeyToOpen = GetHkeyrootFromString(ParamIn1);
+ hKeyToOpen = GetHkeyrootFromString(_pstRoot);
+ if (hKeyToOpen == NULL)
+ {
+ return FALSE;
+ }
#ifdef _WIN64 /* Scilab x64 on x64 windows */
- OpensKeyOptions = KEY_QUERY_VALUE | KEY_WOW64_64KEY;
- if ( RegOpenKeyEx(hKeyToOpen, ParamIn2, 0, OpensKeyOptions, &key) != ERROR_SUCCESS)
+ OpensKeyOptions = KEY_ENUMERATE_SUB_KEYS | KEY_QUERY_VALUE | KEY_WOW64_64KEY;
+ if ( RegOpenKeyEx(hKeyToOpen, _pstKey, 0, OpensKeyOptions, _pKeyOut) != ERROR_SUCCESS)
{
- OpensKeyOptions = KEY_QUERY_VALUE | KEY_WOW64_32KEY;
- if ( RegOpenKeyEx(hKeyToOpen, ParamIn2, 0, OpensKeyOptions, &key) != ERROR_SUCCESS)
+ OpensKeyOptions = KEY_ENUMERATE_SUB_KEYS | KEY_QUERY_VALUE | KEY_WOW64_32KEY;
+ if ( RegOpenKeyEx(hKeyToOpen, _pstKey, 0, OpensKeyOptions, _pKeyOut) != ERROR_SUCCESS)
{
return FALSE;
}
#else
if (IsWow64()) /* Scilab 32 bits on x64 windows */
{
- OpensKeyOptions = KEY_QUERY_VALUE | KEY_WOW64_64KEY;
- if ( RegOpenKeyEx(hKeyToOpen, ParamIn2, 0, OpensKeyOptions, &key) != ERROR_SUCCESS)
+ OpensKeyOptions = KEY_ENUMERATE_SUB_KEYS | KEY_QUERY_VALUE | KEY_WOW64_64KEY;
+ if ( RegOpenKeyEx(hKeyToOpen, _pstKey, 0, OpensKeyOptions, _pKeyOut) != ERROR_SUCCESS)
{
- OpensKeyOptions = KEY_QUERY_VALUE | KEY_WOW64_32KEY;
- if ( RegOpenKeyEx(hKeyToOpen, ParamIn2, 0, OpensKeyOptions, &key) != ERROR_SUCCESS)
+ OpensKeyOptions = KEY_ENUMERATE_SUB_KEYS | KEY_QUERY_VALUE | KEY_WOW64_32KEY;
+ if ( RegOpenKeyEx(hKeyToOpen, _pstKey, 0, OpensKeyOptions, _pKeyOut) != ERROR_SUCCESS)
{
return FALSE;
}
}
else /* Scilab 32 bits on windows 32 bits */
{
- OpensKeyOptions = KEY_QUERY_VALUE;
- if ( RegOpenKeyEx(hKeyToOpen, ParamIn2, 0, OpensKeyOptions, &key) != ERROR_SUCCESS)
+ OpensKeyOptions = KEY_ENUMERATE_SUB_KEYS | KEY_QUERY_VALUE;
+ if ( RegOpenKeyEx(hKeyToOpen, _pstKey, 0, OpensKeyOptions, _pKeyOut) != ERROR_SUCCESS)
{
return FALSE;
}
}
#endif
+ return TRUE;
+}
+
+BOOL WindowsQueryRegistry(char *ParamIn1, char *ParamIn2, char *ParamIn3, char *ParamOut1, int *ParamOut2, BOOL *OuputIsREG_SZ)
+{
+ BOOL bOK = TRUE;
+ HKEY key;
+ DWORD type = 0;
+
+ if (WindowsOpenRegistry(ParamIn1, ParamIn2, &key) == FALSE)
+ {
+ return FALSE;
+ }
if ( RegQueryValueEx(key, ParamIn3, NULL, &type, NULL, NULL) == ERROR_SUCCESS )
{
return bOK;
}
/*--------------------------------------------------------------------------*/
-BOOL WindowsQueryRegistryList(char *ParamIn1, char *ParamIn2, int dimMax, char **ListKeys)
+BOOL WindowsQueryRegistryValuesList(char *ParamIn1, char *ParamIn2, int dimMax, char **ListKeys)
{
- BOOL bOK = TRUE;
HKEY key;
- HKEY hKeyToOpen = NULL;
- DWORD OpensKeyOptions = 0;
int i = 0;
- hKeyToOpen = GetHkeyrootFromString(ParamIn1);
-
-#ifdef _WIN64 /* Scilab x64 on x64 windows */
- OpensKeyOptions = KEY_READ | KEY_WOW64_64KEY;
- if ( RegOpenKeyEx(hKeyToOpen, ParamIn2, 0, OpensKeyOptions, &key) != ERROR_SUCCESS )
- {
- OpensKeyOptions = KEY_READ | KEY_WOW64_32KEY;
- if ( RegOpenKeyEx(hKeyToOpen, ParamIn2, 0, OpensKeyOptions, &key) != ERROR_SUCCESS )
- {
- return FALSE;
- }
- }
-#else
- if (IsWow64()) /* Scilab 32 bits on x64 windows */
+ if (WindowsOpenRegistry(ParamIn1, ParamIn2, &key) == FALSE)
{
- OpensKeyOptions = KEY_READ | KEY_WOW64_64KEY;
- if ( RegOpenKeyEx(hKeyToOpen, ParamIn2, 0, OpensKeyOptions, &key) != ERROR_SUCCESS )
- {
- OpensKeyOptions = KEY_READ | KEY_WOW64_32KEY;
- if ( RegOpenKeyEx(hKeyToOpen, ParamIn2, 0, OpensKeyOptions, &key) != ERROR_SUCCESS )
- {
- return FALSE;
- }
- }
- }
- else /* Scilab 32 bits on windows 32 bits */
- {
- OpensKeyOptions = KEY_READ ;
- if ( RegOpenKeyEx(hKeyToOpen, ParamIn2, 0, OpensKeyOptions, &key) != ERROR_SUCCESS )
- {
- return FALSE;
- }
+ return FALSE;
}
-#endif
-
for (i = 0; i < dimMax; i++)
{
TCHAR achKey[MAX_KEY_LENGTH];
if (retCode != ERROR_SUCCESS)
{
- bOK = FALSE;
RegCloseKey(key);
- return bOK;
+ return FALSE;
}
else
{
RegCloseKey(key);
- return bOK;
+ return TRUE;
+}
+
+BOOL WindowsQueryRegistryKeysList(char *ParamIn1, char *ParamIn2, int dimMax, char **ListKeys)
+{
+ HKEY key;
+ int i = 0;
+
+ if (WindowsOpenRegistry(ParamIn1, ParamIn2, &key) == FALSE)
+ {
+ return FALSE;
+ }
+
+ for (i = 0; i < dimMax; i++)
+ {
+ TCHAR achKey[MAX_KEY_LENGTH];
+ DWORD cbName = MAX_KEY_LENGTH;
+
+ LONG Err = RegEnumKey(key, i, achKey, cbName);
+ if (Err != ERROR_SUCCESS)
+ {
+ RegCloseKey(key);
+ return FALSE;
+ }
+ else
+ {
+ ListKeys[i] = strdup(achKey);
+ }
+ }
+
+ RegCloseKey(key);
+
+ return TRUE;
}
/*--------------------------------------------------------------------------*/
HKEY GetHkeyrootFromString(char *string)
return NULL;
}
/*--------------------------------------------------------------------------*/
-BOOL WindowsQueryRegistryNumberOfElementsInList(char *ParamIn1, char *ParamIn2, int *Number)
+static BOOL WindowsQueryRegistryNumberOfItemsInList(char *ParamIn1, char *ParamIn2, int* _piKeyNumber, int* _piValueNumber)
{
BOOL bOK = TRUE;
- HKEY hKeyToOpen;
- HKEY hTestKey;
- DWORD OpensKeyOptions = 0;
-
+ HKEY key;
DWORD retCode = 0;
- TCHAR achClass[PATH_MAX] = TEXT(""); // buffer for class name
- DWORD cchClassName = PATH_MAX; // size of class string
- DWORD cSubKeys = 0; // number of subkeys
- DWORD cbMaxSubKey = 0; // longest subkey size
- DWORD cchMaxClass = 0; // longest class string
- DWORD cValues = 0; // number of values for key
- DWORD cchMaxValue = 0; // longest value name
- DWORD cbMaxValueData = 0; // longest value data
- DWORD cbSecurityDescriptor = 0; // size of security descriptor
- FILETIME ftLastWriteTime; // last write time
-
- hKeyToOpen = GetHkeyrootFromString(ParamIn1);
+ TCHAR achClass[PATH_MAX] = TEXT(""); // buffer for class name
+ DWORD cchClassName = PATH_MAX; // size of class string
+ DWORD cSubKeys = 0; // number of subkeys
+ DWORD cbMaxSubKey = 0; // longest subkey size
+ DWORD cchMaxClass = 0; // longest class string
+ DWORD cValues = 0; // number of values for key
+ DWORD cchMaxValue = 0; // longest value name
+ DWORD cbMaxValueData = 0; // longest value data
+ DWORD cbSecurityDescriptor = 0; // size of security descriptor
+ FILETIME ftLastWriteTime; // last write time
-#ifdef _WIN64 /* Scilab x64 on x64 windows */
- OpensKeyOptions = KEY_READ | KEY_WOW64_64KEY;
- if ( RegOpenKeyEx(hKeyToOpen, ParamIn2, 0, OpensKeyOptions, &hTestKey) != ERROR_SUCCESS )
+ if (WindowsOpenRegistry(ParamIn1, ParamIn2, &key) == FALSE)
{
- OpensKeyOptions = KEY_READ | KEY_WOW64_32KEY;
- if ( RegOpenKeyEx(hKeyToOpen, ParamIn2, 0, OpensKeyOptions, &hTestKey) != ERROR_SUCCESS )
- {
- return FALSE;
- }
+ return FALSE;
}
-#else
- if (IsWow64()) /* Scilab 32 bits on x64 windows */
- {
- OpensKeyOptions = KEY_READ | KEY_WOW64_64KEY;
- if ( RegOpenKeyEx(hKeyToOpen, ParamIn2, 0, OpensKeyOptions, &hTestKey) != ERROR_SUCCESS )
- {
- OpensKeyOptions = KEY_READ | KEY_WOW64_32KEY;
- if ( RegOpenKeyEx(hKeyToOpen, ParamIn2, 0, OpensKeyOptions, &hTestKey) != ERROR_SUCCESS )
- {
- return FALSE;
- }
- }
- }
- else /* Scilab 32 bits on windows 32 bits */
- {
- OpensKeyOptions = KEY_READ ;
- if ( RegOpenKeyEx(hKeyToOpen, ParamIn2, 0, OpensKeyOptions, &hTestKey) != ERROR_SUCCESS )
- {
- return FALSE;
- }
- }
-#endif
+
retCode = RegQueryInfoKey(
- hTestKey, // key handle
- achClass, // buffer for class name
- &cchClassName, // size of class string
- NULL, // reserved
- &cSubKeys, // number of subkeys
- &cbMaxSubKey, // longest subkey size
- &cchMaxClass, // longest class string
- &cValues, // number of values for this key
- &cchMaxValue, // longest value name
- &cbMaxValueData, // longest value data
- &cbSecurityDescriptor, // security descriptor
- &ftLastWriteTime); // last write time
+ key, // key handle
+ achClass, // buffer for class name
+ &cchClassName, // size of class string
+ NULL, // reserved
+ &cSubKeys, // number of subkeys
+ &cbMaxSubKey, // longest subkey size
+ &cchMaxClass, // longest class string
+ &cValues, // number of values for this key
+ &cchMaxValue, // longest value name
+ &cbMaxValueData, // longest value data
+ &cbSecurityDescriptor, // security descriptor
+ &ftLastWriteTime); // last write time
if (retCode != ERROR_SUCCESS)
{
}
else
{
- *Number = cValues;
+ *_piValueNumber = cValues;
+ *_piKeyNumber = cSubKeys;
}
- RegCloseKey(hKeyToOpen);
+ RegCloseKey(key);
return bOK;
}
/*--------------------------------------------------------------------------*/
+BOOL WindowsQueryRegistryNumberOfValuesInList(char *ParamIn1, char *ParamIn2, int *Number)
+{
+ int iKey = 0;
+ return WindowsQueryRegistryNumberOfItemsInList(ParamIn1, ParamIn2, &iKey, Number);
+}
+/*--------------------------------------------------------------------------*/
+BOOL WindowsQueryRegistryNumberOfKeysInList(char *ParamIn1, char *ParamIn2, int *Number)
+{
+ int iValue = 0;
+ return WindowsQueryRegistryNumberOfItemsInList(ParamIn1, ParamIn2, Number, &iValue);
+}
+/*--------------------------------------------------------------------------*/
/*
* Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
* Copyright (C) INRIA - Allan CORNET
-*
+*
* This file must be used under the terms of the CeCILL.
* This source file is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
-* are also available at
+* are also available at
* http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
*
*/
* @param[out] OuputIsREG_SZ
* @return TRUE or FALSE
*/
-BOOL WindowsQueryRegistry(char *ParamIn1,char *ParamIn2,char *ParamIn3,char *ParamOut1,int *ParamOut2,BOOL *OuputIsREG_SZ);
+BOOL WindowsQueryRegistry(char *ParamIn1, char *ParamIn2, char *ParamIn3, char *ParamOut1, int *ParamOut2, BOOL *OuputIsREG_SZ);
/**
-* WindowsQueryRegistryList
+* WindowsQueryRegistryValuesList
* Query a list of values in a registry key
* @param[in] ParamIn1 (HKEY)
* @param[in] ParamIn2 (SUBKEY)
-* @param[in] dimMax
+* @param[in] dimMax
* @param[out] ListKeys (values)
* @return TRUE or FALSE
*/
-BOOL WindowsQueryRegistryList(char *ParamIn1,char *ParamIn2,int dimMax,char **ListKeys);
+BOOL WindowsQueryRegistryValuesList(char *ParamIn1, char *ParamIn2, int dimMax, char **ListKeys);
+
+/**
+* WindowsQueryRegistryKeysList
+* Query a list of values in a registry key
+* @param[in] ParamIn1 (HKEY)
+* @param[in] ParamIn2 (SUBKEY)
+* @param[in] dimMax
+* @param[out] ListKeys (values)
+* @return TRUE or FALSE
+*/
+BOOL WindowsQueryRegistryKeysList(char *ParamIn1, char *ParamIn2, int dimMax, char **ListKeys);
+
/**
* WindowsQueryRegistryNumberOfElementsInList
* @param[out] Number
* @return TRUE or FALSE
*/
-BOOL WindowsQueryRegistryNumberOfElementsInList(char *ParamIn1,char *ParamIn2,int *Number);
+BOOL WindowsQueryRegistryNumberOfValuesInList(char *ParamIn1, char *ParamIn2, int *Number);
+
+/**
+* WindowsQueryRegistryNumberOfKeysInList
+* get numbers of Key in a list
+* @param[in] ParamIn1 (HKEY)
+* @param[in] ParamIn2 (SUBKEY)
+* @param[out] Number
+* @return TRUE or FALSE
+*/
+BOOL WindowsQueryRegistryNumberOfKeysInList(char *ParamIn1, char *ParamIn2, int *Number);
/**
* GetHkeyrootFromString
//
// This file is distributed under the same license as the Scilab package.
// =============================================================================
-ierr = execstr('winqueryreg()','errcatch');
-if ierr <> 77 then bugmes();quit;end
-ierr = execstr('winqueryreg(''name'', ''HKEY_CURRENT_USER'')','errcatch');
-if ierr <> 999 then bugmes();quit;end
+//
+// <-- WINDOWS ONLY -->
+assert_checkerror('winqueryreg()', [], 77);
+assert_checkerror('winqueryreg(''name'', ''HKEY_CURRENT_USER'')', [], 999);
mousechar = winqueryreg('name', 'HKEY_CURRENT_USER','control panel\mouse');
-if size(mousechar,'*') <> 18 then bugmes();quit;end
+assert_checktrue(size(mousechar,'*') <> 0);
cpu = winqueryreg('HKEY_LOCAL_MACHINE','HARDWARE\DESCRIPTION\System\CentralProcessor\0\','ProcessorNameString');
-if length(cpu) == 0 then bugmes();quit;end
+assert_checktrue(length(cpu) <> 0);
+software1 = winqueryreg('key', 'HKEY_LOCAL_MACHINE','Software');
+assert_checktrue(size(software1, "*") <> 0);
+software2 = winqueryreg('key', 'HKLM','Software');
+assert_checktrue(size(software2, "*") <> 0);
+assert_checkequal(software1, software2);
//
// This file is distributed under the same license as the Scilab package.
// =============================================================================
+//
+// <-- WINDOWS ONLY -->
-ierr = execstr('winqueryreg()','errcatch');
-if ierr <> 77 then pause,end
-ierr = execstr('winqueryreg(''name'', ''HKEY_CURRENT_USER'')','errcatch');
-if ierr <> 999 then pause,end
+assert_checkerror('winqueryreg()', [], 77);
+assert_checkerror('winqueryreg(''name'', ''HKEY_CURRENT_USER'')', [], 999);
mousechar = winqueryreg('name', 'HKEY_CURRENT_USER','control panel\mouse');
-if size(mousechar,'*') <> 18 then pause,end
+assert_checktrue(size(mousechar,'*') <> 0);
cpu = winqueryreg('HKEY_LOCAL_MACHINE','HARDWARE\DESCRIPTION\System\CentralProcessor\0\','ProcessorNameString');
-if length(cpu) == 0 then pause,end
+assert_checktrue(length(cpu) <> 0);
+
+software1 = winqueryreg('key', 'HKEY_LOCAL_MACHINE','Software');
+assert_checktrue(size(software1, "*") <> 0);
+
+software2 = winqueryreg('key', 'HKLM','Software');
+assert_checktrue(size(software2, "*") <> 0);
+assert_checkequal(software1, software2);