Hi Robert and Michal,
Thanks for your responses.
1. I was hung up the the fact that HKEY_CURRENT_USER appears to be a
constant to me. Heretofore, I never heard of a constant having
methods.
# CODE START
require 'win32/registry'
require 'show'
show %@Win32::Registry::HKEY_CURRENT_USER.class@
# CODE END
# OUTPUT START
Win32::Registry::HKEY_CURRENT_USER.class
=> Win32::Registry
# OUTPUT END
So I now see that this HKEY_CURRENT_USER is an instance of the
Win32::Registry class. OK, this is step 1 of my education.
I've visited the http://www.ruby-doc.org/ for the Win32:Registry
module
as well as the Microsoft site for the Registry API. These two things,
plus the fact that I handled the Registry programatically with VC++/
MFC a decade earlier, means I should be fine now.
I am curious about one thing: I haven't been able to see how the above
construct really works, i.e. where's the code for it? Maybe I didn't
read the RDoc carefully enough. From Robert's inspection statement,
it looks like the expression returns an instance of of Win32::Registry
with an instance variable @key set to HKEY_CURRENT_USER.
Again, thanks for your responses. I did look at the totality of
instance methods, though the Ruby-doc stuff is really what I needed to
look at.
Best wishes,
Richard
P.S. The Microsoft site is http://msdn2.microsoft.com/en-us/library/ms724875.aspx.
On Jun 6, 5:09 am, Robert Klemme <shortcut@googlemail.com> wrote:
> On 06.06.2007 07:13, Richard wrote:
> > Hi,
> > I'd like to be able to search a named hive for keys whose names match
> > a given regular expression.
> > I found, for example:
> > require 'win32/registry'
> > Win32::Registry::HKEY_CURRENT_USER.open('SOFTWARE\\AdwareAlert\
> > \AdwareAlert\\RegInfo') do |reg|
> > puts reg['OrderNo']
> > end
> > which let me specify a specific key in the HKCU hive and print the
> > value of one of its entries.
> > I don't actually know why the foregoing is even syntactically correct
> > becausehttp://www.ruby-doc.org/stdlib/libdoc/Win32API/rdoc/classes/Win32/Reg...
> > says HKEY_CURRENT_USER is a constant in Win32::Registry.
> Why do you think this should disallow the syntax above? It's perfectly
> valid Ruby code. And that does not have to do anything with the fact
> that HKEY_CURRENT_USER is a constant.
> > Therefore,
> > it seems to me that HKEY_CURRENT_USER can't have a method "open".
> The documentation is probably a bit misleading:
> 11:06:11 [~]: ruby -r win32/registry -e
> 'k=Win32::Registry::HKEY_CURRENT_USER; p k, k.class,
> k.instance_variables.map {|v| "#{v}=#{k.instan
> ce_variable_get v}"}'
> #<Win32::Registry key="HKEY_CURRENT_USER">
> Win32::Registry
> ["@keyname=HKEY_CURRENT_USER", "@parent=", "@hkey=2147483649",
> "@disposition=2"]
> Does that fix your irritation? :-)
> Btw, if you do this you'll see some methods that might actually do what
> you need (find for example).
> ruby -r win32/registry -e 'puts Win32::Registry.instance_methods.sort'
> Kind regards
> robert