[CMake] How to read a registry key?

2006-09-06 Thread Anton Deguet
Hello,

I have found that using EXEC_PROGRAM with ${CMAKE_COMMAND} -E I can
write/remove a key in the Windows registry but I haven't figured out how
to read a key.  Is there a simple solution for that?  

Anton

-- 
Anton Deguet <[EMAIL PROTECTED]>
ERC CISST Johns Hopkins University
___
CMake mailing list
CMake@cmake.org
http://www.cmake.org/mailman/listinfo/cmake


Re: [CMake] How to read a registry key?

2006-09-06 Thread William A. Hoffman
At 05:36 PM 9/6/2006, Anton Deguet wrote:
>Hello,
>
>I have found that using EXEC_PROGRAM with ${CMAKE_COMMAND} -E I can
>write/remove a key in the Windows registry but I haven't figured out how
>to read a key.  Is there a simple solution for that?  

Sure, but it seems not to be documented
Several commands including GET_FILENAME_COMPONENT will expand things
like this:

"[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development 
Kit\\2.0;JavaHome]/bin"

You can use this to read registry values.  I will add some docs in
the morning.

-Bill

___
CMake mailing list
CMake@cmake.org
http://www.cmake.org/mailman/listinfo/cmake


Re: [CMake] How to read a registry key?

2006-09-07 Thread Anton Deguet
Bill,

I had some success with the key expansion but I haven't been able to do
what I need.  Basically, I would like to get the un-expanded content of
the user path, i.e. not the expanded path (user and system) which can be
found using $ENV{PATH}.

I tried the following code, i.e. adding two variables, one using the
other:

SET(CISST_PATH ${EXECUTABLE_OUTPUT_PATH} ${LIBRARY_OUTPUT_PATH})
SET(CISST_PATH_REG_KEY "HKEY_CURRENT_USER\\Environment;CISST_PATH")
EXEC_PROGRAM(${CMAKE_COMMAND}
 ARGS "-E write_regv \"${CISST_PATH_REG_KEY}\"
\"${CISST_PATH}\"")

SET(OTHER_PATH_REG_KEY "HKEY_CURRENT_USER\\Environment;OTHER_PATH")
SET(OTHER_PATH "c:/prg;%CISST_PATH%")
EXEC_PROGRAM(${CMAKE_COMMAND}
 ARGS "-E write_regv \"${OTHER_PATH_REG_KEY}\"
\"${OTHER_PATH}\"")

GET_FILENAME_COMPONENT(TMP "[HKEY_CURRENT_USER\
\Environment;OTHER_PATH]/dummy.dum" PATH)

MESSAGE("${TMP}")

At that point, everything looks great and I can check the results with
"reg.exe", the expansion works ...

Now, if I try to retrieve the user path using
GET_FILENAME_COMPONENT(TMP "[HKEY_CURRENT_USER\
\Environment;PATH]/dummy.dum" PATH)

TMP is set to "/registry" ...  Any explanation or better solution to
just retrieve the value as a string?


On Wed, 2006-09-06 at 20:55 -0400, William A. Hoffman wrote:
> At 05:36 PM 9/6/2006, Anton Deguet wrote:
> >Hello,
> >
> >I have found that using EXEC_PROGRAM with ${CMAKE_COMMAND} -E I can
> >write/remove a key in the Windows registry but I haven't figured out how
> >to read a key.  Is there a simple solution for that?  
> 
> Sure, but it seems not to be documented
> Several commands including GET_FILENAME_COMPONENT will expand things
> like this:
> 
> "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development 
> Kit\\2.0;JavaHome]/bin"
> 
> You can use this to read registry values.  I will add some docs in
> the morning.
> 
> -Bill
> 
> ___
> CMake mailing list
> CMake@cmake.org
> http://www.cmake.org/mailman/listinfo/cmake
-- 
Anton Deguet <[EMAIL PROTECTED]>
ERC CISST Johns Hopkins University
___
CMake mailing list
CMake@cmake.org
http://www.cmake.org/mailman/listinfo/cmake


Re: [CMake] How to read a registry key?

2006-09-07 Thread Anton Deguet
I looks like this has something to do with the nature of the key/value.
For values listed as REG_SZ (within regedit.exe), CMake can retrieve the
content but for values stored as REG_EXPAND_SZ I systematically get
"/registry".  I don't know much about the Windows registry but I did a
quick survey of different computers/users in the lab and the user path
can be either one which makes it difficult to implement a robust
solution.  Am I the first one to run into this issue?

Anton


On Thu, 2006-09-07 at 12:13 -0400, Anton Deguet wrote:
> Bill,
> 
> I had some success with the key expansion but I haven't been able to do
> what I need.  Basically, I would like to get the un-expanded content of
> the user path, i.e. not the expanded path (user and system) which can be
> found using $ENV{PATH}.
> 
> I tried the following code, i.e. adding two variables, one using the
> other:
> 
> SET(CISST_PATH ${EXECUTABLE_OUTPUT_PATH} ${LIBRARY_OUTPUT_PATH})
> SET(CISST_PATH_REG_KEY "HKEY_CURRENT_USER\\Environment;CISST_PATH")
> EXEC_PROGRAM(${CMAKE_COMMAND}
>  ARGS "-E write_regv \"${CISST_PATH_REG_KEY}\"
> \"${CISST_PATH}\"")
> 
> SET(OTHER_PATH_REG_KEY "HKEY_CURRENT_USER\\Environment;OTHER_PATH")
> SET(OTHER_PATH "c:/prg;%CISST_PATH%")
> EXEC_PROGRAM(${CMAKE_COMMAND}
>  ARGS "-E write_regv \"${OTHER_PATH_REG_KEY}\"
> \"${OTHER_PATH}\"")
> 
> GET_FILENAME_COMPONENT(TMP "[HKEY_CURRENT_USER\
> \Environment;OTHER_PATH]/dummy.dum" PATH)
> 
> MESSAGE("${TMP}")
> 
> At that point, everything looks great and I can check the results with
> "reg.exe", the expansion works ...
> 
> Now, if I try to retrieve the user path using
> GET_FILENAME_COMPONENT(TMP "[HKEY_CURRENT_USER\
> \Environment;PATH]/dummy.dum" PATH)
> 
> TMP is set to "/registry" ...  Any explanation or better solution to
> just retrieve the value as a string?
> 
> 
> On Wed, 2006-09-06 at 20:55 -0400, William A. Hoffman wrote:
> > At 05:36 PM 9/6/2006, Anton Deguet wrote:
> > >Hello,
> > >
> > >I have found that using EXEC_PROGRAM with ${CMAKE_COMMAND} -E I can
> > >write/remove a key in the Windows registry but I haven't figured out how
> > >to read a key.  Is there a simple solution for that?  
> > 
> > Sure, but it seems not to be documented
> > Several commands including GET_FILENAME_COMPONENT will expand things
> > like this:
> > 
> > "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development 
> > Kit\\2.0;JavaHome]/bin"
> > 
> > You can use this to read registry values.  I will add some docs in
> > the morning.
> > 
> > -Bill
> > 
> > ___
> > CMake mailing list
> > CMake@cmake.org
> > http://www.cmake.org/mailman/listinfo/cmake
-- 
Anton Deguet <[EMAIL PROTECTED]>
ERC CISST Johns Hopkins University
___
CMake mailing list
CMake@cmake.org
http://www.cmake.org/mailman/listinfo/cmake