Home     |     .Net Programming    |     cSharp Home    |     Sql Server Home    |     Javascript / Client Side Development     |     Ajax Programming

Ruby on Rails Development     |     Perl Programming     |     C Programming Language     |     C++ Programming     |     IT Jobs

Python Programming Language     |     Laptop Suggestions?    |     TCL Scripting     |     Fortran Programming     |     Scheme Programming Language


 
 
Cervo Technologies
The Right Source to Outsource

MS Dynamics CRM 3.0

Ruby Programming Language

Finding entries in Windows Registry matching a RE


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
because http://www.ruby-doc.org/stdlib/libdoc/Win32API/rdoc/classes/Win32/Reg...
says HKEY_CURRENT_USER is a constant in Win32::Registry.  Therefore,
it seems to me that HKEY_CURRENT_USER can't have a method "open".

Any ideas?
TIA,
Richard

On 06.06.2007 07:13, Richard wrote:

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

Hi Robert,

Thanks for your response.  I'm studying the issue and will respond
with either "Eureka" or a (hopefully) more sophisticated or nuanced
question.

Best wishes,
Richard

On Jun 6, 5:09 am, Robert Klemme <shortcut@googlemail.com> wrote:

On 07/06/07, Richard <RichardDummyMailbox58@uscomputergurus.com> wrote:
> Hi Robert,

> Thanks for your response.  I'm studying the issue and will respond
> with either "Eureka" or a (hopefully) more sophisticated or nuanced
> question.

Hello,

I believe that 'key' in registry is that thing that would correspond
to directory, and things that actually contain something (like file)
are called 'value'. There should be functions to list subkeys and
values of a given key (at least once you open it). Unfortunately,
ruby-doc.org fails to index the win32 stuff properly so your best
source of information is the ri/extension sources shipped with your
Windows build of ruby.
Trying something like (Win32::Registry::HKEY_CURRENT_USER.methods -
methods).sort or (Win32::Registry::HKEY_CURRENT_USER.methods.open("")
- methods).sort in irb may give you some idea.

Thanks

Michal

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:

In Ruby, "constant" means that it's value should not change (that's
actually just a syntactical convention - you'll only get a value if
you try A=8; A=9). It also means that it will be stored in a different
table (or at least treated like it was, with different methods to
access it etc' - I'm not familiar enough with the MRI to comment).

Constants are still Ruby variables, which means that they can store a
reference to any Ruby object.

E.g.:

ERROR_STREAM = File.open("log.txt")

If you're interested in great uses of constants (and class methods
that behave like it was just a constant) try learning how to use
_why's ingenious Camping. It is full of amazing uses for those. It's
an afternoon to learn, especially if you're familiar with Rails.

Aur

Add to del.icio.us | Digg this | Stumble it | Powered by Megasolutions Inc