DevX Home    Today's Headlines   Articles Archive   Tip Bank   Forums   

Results 1 to 9 of 9

Thread: REPOST-from VB.dotnet.technical

Hybrid View

  1. #1
    Sachin Guest

    REPOST-from VB.dotnet.technical

    didn't find any answer there so i thot i'll move it here
    -----
    hi all,
    How can i monitor the entire registry using VB.NET with WMI or otherwise and
    then when registry changes being notified what has changed for eg a new
    key,a modified value etc
    thanx
    Sachin
    ----



  2. #2
    L.J. Johnson Guest

    Re: REPOST-from VB.dotnet.technical

    Sachin,

    > How can i monitor the entire registry using VB.NET with WMI or otherwise and
    > then when registry changes being notified what has changed for eg a new
    > key,a modified value etc


    Sure.

    First, you need to make sure the registry provider is registered with MOF.

    Then, the following article from the WMI SDK should help. Note, I haven't done this *specific* thing in VB.Net, but the stuff I have done in VB.Net using WMI seems to work pretty much the same. You must have a reference to System.Management.

    Registering for Registry Events
    To receive notifications from the Registry Provider, a management application must register as a temporary event consumer. Registering as a temporary event consumer involves:

    1.. Implementing the IWbemObjectSink interface. The Registry event provider calls the methods of this interface to deliver event notifications and report status.
    2.. Calling the COM function CoInitializeSecurity to initialize Distributed COM (DCOM) security.
    3.. Calling the IWbemServices::ExecNotificationQueryAsync method to register to be notified of particular the types of registry events.
    The bstrQuery parameter of ExecNotificationQueryAsync must be set to one or more valid event queries that specify an event class that is supported by the Registry event provider. The Registry event provider supports three classes of events.

    Event class Description
    RegistryTreeChangeEvent Monitors changes to a hierarchy of keys.
    RegistryKeyChangeEvent Monitors changes to a single key.
    RegistryValueChangeEvent Monitors changes to a single value.


    All three of these classes have a property called Hive that identifies the hierarchy of keys to be monitored for change, such as HKEY_LOCAL_MACHINE. The location of the tree, key, or value to be monitored is specified in the RootPath property of the RegistryTreeChangeEvent class, the KeyPath property of the RegistryKeyChangeEvent class, and the KeyPath and ValueName properties of the RegistryValueChange class.

    Each event query in the bstrQuery parameter of ExecNotificationQueryAsync must contain a WHERE clause that includes each of the properties in the specified event class. For example, set bstrQuery as follows to register for tree change events in the "HKEY_LOCAL_MACHINE\Software" tree:

    SELECT * FROM RegistryTreeChangeEvent
    WHERE Hive = "HKEY_LOCAL_MACHINE" AND Rootpath = "Software"
    It is important that the event query be explicit. The provider should be able to infer from the query a list of possible values for every property in the event class. For example, the following event query correctly registers for tree change events:

    SELECT * FROM RegistryTreeChangeEvent
    WHERE (hive = "hkey_local_machine" AND rootpath = "software")
    OR (hive = "hkey_current_user" AND rootpath = "console")
    The following query is an example of an incorrect registration:

    SELECT * FROM RegistryTreeChangeEvent
    WHERE hive = hkey_local_machine" OR rootpath ="software"
    Because there is no way to evaluate the possible values for each of the properties, WMI rejects the query with the error WBEM_E_TOO_BROAD. This error is returned if the WHERE clause in an event query is missing or is too broad to be of use.

    The Registry Event Provider attempts to send one notification for every event that occurs, but there is no guarantee. Consumers are guaranteed, however, to receive one notification for each event registration. For example, suppose a consumer registers for two tree change events, each with the same Hive value but a different RootPath value. If keys in both paths change multiple times, the consumer is guaranteed to receive notifications of at least two events, one for each path. Depending on the response time of the registry and the Registry event provider, the consumer may receive as many notifications as there were occurrences of events.

    For more information about registration, see Temporary Event Consumers. For more information about constructing valid queries, see Event Queries.

    --
    L.J. Johnson, Slightly Tilted Software
    Microsoft MVP (Visual Basic)
    LJJohnson@SlightlyTiltedSoftware.com or LJJohnson@mvps.org
    <http://www.SlightlyTiltedSoftware.com>
    Ask The NT Pro at <http://www.devx.com/gethelp>



  3. #3
    Sachin Guest

    Re: REPOST-from VB.dotnet.technical

    This is the documentation that I found at MS site also :-( since it talks only about monitoring a particular KeyTree under a Hive..so does that mean to monitor the *whole* registry I need to fire as many WQL & thus have as many objects as there are KeyTrees under a particular hive ie if there are 10 keytrees under 1 Hive & there are 5 hives,I need to fire 5*10 WQL queries and at the same time know the names of the keytree also???Another documentation at MS Site also suggests that registry events are not always fired :-( and hence you don't recieve the notifications.
    -Sachin


    "L.J. Johnson" <LJJohnson@SlightlyTiltedSoftware.com> wrote in message news:3b992a20@news.devx.com...
    Sachin,

    > How can i monitor the entire registry using VB.NET with WMI or otherwise and
    > then when registry changes being notified what has changed for eg a new
    > key,a modified value etc


    Sure.

    First, you need to make sure the registry provider is registered with MOF.

    Then, the following article from the WMI SDK should help. Note, I haven't done this *specific* thing in VB.Net, but the stuff I have done in VB.Net using WMI seems to work pretty much the same. You must have a reference to System.Management.

    Registering for Registry Events
    To receive notifications from the Registry Provider, a management application must register as a temporary event consumer. Registering as a temporary event consumer involves:

    1.. Implementing the IWbemObjectSink interface. The Registry event provider calls the methods of this interface to deliver event notifications and report status.
    2.. Calling the COM function CoInitializeSecurity to initialize Distributed COM (DCOM) security.
    3.. Calling the IWbemServices::ExecNotificationQueryAsync method to register to be notified of particular the types of registry events.
    The bstrQuery parameter of ExecNotificationQueryAsync must be set to one or more valid event queries that specify an event class that is supported by the Registry event provider. The Registry event provider supports three classes of events.

    Event class Description
    RegistryTreeChangeEvent Monitors changes to a hierarchy of keys.
    RegistryKeyChangeEvent Monitors changes to a single key.
    RegistryValueChangeEvent Monitors changes to a single value.


    All three of these classes have a property called Hive that identifies the hierarchy of keys to be monitored for change, such as HKEY_LOCAL_MACHINE. The location of the tree, key, or value to be monitored is specified in the RootPath property of the RegistryTreeChangeEvent class, the KeyPath property of the RegistryKeyChangeEvent class, and the KeyPath and ValueName properties of the RegistryValueChange class.

    Each event query in the bstrQuery parameter of ExecNotificationQueryAsync must contain a WHERE clause that includes each of the properties in the specified event class. For example, set bstrQuery as follows to register for tree change events in the "HKEY_LOCAL_MACHINE\Software" tree:

    SELECT * FROM RegistryTreeChangeEvent
    WHERE Hive = "HKEY_LOCAL_MACHINE" AND Rootpath = "Software"
    It is important that the event query be explicit. The provider should be able to infer from the query a list of possible values for every property in the event class. For example, the following event query correctly registers for tree change events:

    SELECT * FROM RegistryTreeChangeEvent
    WHERE (hive = "hkey_local_machine" AND rootpath = "software")
    OR (hive = "hkey_current_user" AND rootpath = "console")
    The following query is an example of an incorrect registration:

    SELECT * FROM RegistryTreeChangeEvent
    WHERE hive = hkey_local_machine" OR rootpath ="software"
    Because there is no way to evaluate the possible values for each of the properties, WMI rejects the query with the error WBEM_E_TOO_BROAD. This error is returned if the WHERE clause in an event query is missing or is too broad to be of use.

    The Registry Event Provider attempts to send one notification for every event that occurs, but there is no guarantee. Consumers are guaranteed, however, to receive one notification for each event registration. For example, suppose a consumer registers for two tree change events, each with the same Hive value but a different RootPath value. If keys in both paths change multiple times, the consumer is guaranteed to receive notifications of at least two events, one for each path. Depending on the response time of the registry and the Registry event provider, the consumer may receive as many notifications as there were occurrences of events.

    For more information about registration, see Temporary Event Consumers. For more information about constructing valid queries, see Event Queries.

    --
    L.J. Johnson, Slightly Tilted Software
    Microsoft MVP (Visual Basic)
    LJJohnson@SlightlyTiltedSoftware.com or LJJohnson@mvps.org
    <http://www.SlightlyTiltedSoftware.com>
    Ask The NT Pro at <http://www.devx.com/gethelp>



  4. #4
    L.J. Johnson Guest

    Re: REPOST-from VB.dotnet.technical

    Sachin,

    OK, gotcha now.

    Well, you could get the source for RegMon (which does do what you are
    talking about, plus a lot more) at
    http://www.sysinternals.com/ntw2k/source/regmon.shtml -- but it's probably
    written in some fairly low-level C.

    > This is the documentation that I found at MS site also :-( since it talks

    only about monitoring a
    > particular KeyTree under a Hive..so does that mean to monitor the *whole*

    registry I need to fire
    > as many WQL & thus have as many objects as there are KeyTrees under a

    particular hive ie if
    > there are 10 keytrees under 1 Hive & there are 5 hives,I need to fire 5*10

    WQL queries and at
    > the same time know the names of the keytree also???


    SELECT * FROM RegistryTreeChangeEvent
    WHERE Hive = "HKEY_LOCAL_MACHINE" AND Rootpath = "Software"

    What happens if you leave out the RootPath? If that works, then you'd only
    need 5 or so queries
    (or, maybe you can OR them together). But if it needs a RootPath, then this
    doesn't seem to
    be a good method for your requirement.

    > Another documentation at MS Site also suggests that registry events are

    not always fired
    > :-( and hence you don't recieve the notifications.


    Yea, saw that. That might be a killer for your app??

    --
    L.J. Johnson, Slightly Tilted Software
    Microsoft MVP (Visual Basic)
    LJJohnson@SlightlyTiltedSoftware.com or LJJohnson@mvps.org
    <http://www.SlightlyTiltedSoftware.com>
    Ask The NT Pro at <http://www.devx.com/gethelp>



  5. #5
    Sachin Guest

    Re: REPOST-from VB.dotnet.technical

    hi
    After registering the RegEvent.mof (whichi I found under
    WinNT\System32\Wbem) with MofComp..i still can't see the
    RegistryTreeChangeEvent class :-(....I tried firing a WQL query (select *
    from RegistryTreeChangeEvent) in CIM studio but it gave me invalid class
    error..is there something that i am missing here??
    Also one MS documentation talks about that WLQ regsitry queries shouldn't be
    very broad otherwise it gives an WB_TOO_BROAD (or something like that)
    error..so am not too sure whether I can leave the RootPath part in the query
    Where clause.
    Also one more question how does WMI monitor registry??is it a PULL or a
    PUSH? If its a PULL ie WMI keeps on polling regustry for changes then I
    guess then it will be very resource intensive & actually then its not a good
    solution or does the registry itself PUSHes the event that it has been
    modified??
    -Sachin

    "L.J. Johnson" <LJJohnson@SlightlyTiltedSoftware.com> wrote in message
    news:3b994b89$1@news.devx.com...
    > Sachin,
    >
    > OK, gotcha now.
    >
    > Well, you could get the source for RegMon (which does do what you are
    > talking about, plus a lot more) at
    > http://www.sysinternals.com/ntw2k/source/regmon.shtml -- but it's probably
    > written in some fairly low-level C.
    >
    > > This is the documentation that I found at MS site also :-( since it

    talks
    > only about monitoring a
    > > particular KeyTree under a Hive..so does that mean to monitor the

    *whole*
    > registry I need to fire
    > > as many WQL & thus have as many objects as there are KeyTrees under a

    > particular hive ie if
    > > there are 10 keytrees under 1 Hive & there are 5 hives,I need to fire

    5*10
    > WQL queries and at
    > > the same time know the names of the keytree also???

    >
    > SELECT * FROM RegistryTreeChangeEvent
    > WHERE Hive = "HKEY_LOCAL_MACHINE" AND Rootpath = "Software"
    >
    > What happens if you leave out the RootPath? If that works, then you'd only
    > need 5 or so queries
    > (or, maybe you can OR them together). But if it needs a RootPath, then

    this
    > doesn't seem to
    > be a good method for your requirement.
    >
    > > Another documentation at MS Site also suggests that registry events are

    > not always fired
    > > :-( and hence you don't recieve the notifications.

    >
    > Yea, saw that. That might be a killer for your app??
    >
    > --
    > L.J. Johnson, Slightly Tilted Software
    > Microsoft MVP (Visual Basic)
    > LJJohnson@SlightlyTiltedSoftware.com or LJJohnson@mvps.org
    > <http://www.SlightlyTiltedSoftware.com>
    > Ask The NT Pro at <http://www.devx.com/gethelp>
    >
    >




  6. #6
    L.J. Johnson Guest

    Re: REPOST-from VB.dotnet.technical

    Sachin,

    > How can i monitor the entire registry using VB.NET with WMI or otherwise and
    > then when registry changes being notified what has changed for eg a new
    > key,a modified value etc


    Sure.

    First, you need to make sure the registry provider is registered with MOF.

    Then, the following article from the WMI SDK should help. Note, I haven't done this *specific* thing in VB.Net, but the stuff I have done in VB.Net using WMI seems to work pretty much the same. You must have a reference to System.Management.

    Registering for Registry Events
    To receive notifications from the Registry Provider, a management application must register as a temporary event consumer. Registering as a temporary event consumer involves:

    1.. Implementing the IWbemObjectSink interface. The Registry event provider calls the methods of this interface to deliver event notifications and report status.
    2.. Calling the COM function CoInitializeSecurity to initialize Distributed COM (DCOM) security.
    3.. Calling the IWbemServices::ExecNotificationQueryAsync method to register to be notified of particular the types of registry events.
    The bstrQuery parameter of ExecNotificationQueryAsync must be set to one or more valid event queries that specify an event class that is supported by the Registry event provider. The Registry event provider supports three classes of events.

    Event class Description
    RegistryTreeChangeEvent Monitors changes to a hierarchy of keys.
    RegistryKeyChangeEvent Monitors changes to a single key.
    RegistryValueChangeEvent Monitors changes to a single value.


    All three of these classes have a property called Hive that identifies the hierarchy of keys to be monitored for change, such as HKEY_LOCAL_MACHINE. The location of the tree, key, or value to be monitored is specified in the RootPath property of the RegistryTreeChangeEvent class, the KeyPath property of the RegistryKeyChangeEvent class, and the KeyPath and ValueName properties of the RegistryValueChange class.

    Each event query in the bstrQuery parameter of ExecNotificationQueryAsync must contain a WHERE clause that includes each of the properties in the specified event class. For example, set bstrQuery as follows to register for tree change events in the "HKEY_LOCAL_MACHINE\Software" tree:

    SELECT * FROM RegistryTreeChangeEvent
    WHERE Hive = "HKEY_LOCAL_MACHINE" AND Rootpath = "Software"
    It is important that the event query be explicit. The provider should be able to infer from the query a list of possible values for every property in the event class. For example, the following event query correctly registers for tree change events:

    SELECT * FROM RegistryTreeChangeEvent
    WHERE (hive = "hkey_local_machine" AND rootpath = "software")
    OR (hive = "hkey_current_user" AND rootpath = "console")
    The following query is an example of an incorrect registration:

    SELECT * FROM RegistryTreeChangeEvent
    WHERE hive = hkey_local_machine" OR rootpath ="software"
    Because there is no way to evaluate the possible values for each of the properties, WMI rejects the query with the error WBEM_E_TOO_BROAD. This error is returned if the WHERE clause in an event query is missing or is too broad to be of use.

    The Registry Event Provider attempts to send one notification for every event that occurs, but there is no guarantee. Consumers are guaranteed, however, to receive one notification for each event registration. For example, suppose a consumer registers for two tree change events, each with the same Hive value but a different RootPath value. If keys in both paths change multiple times, the consumer is guaranteed to receive notifications of at least two events, one for each path. Depending on the response time of the registry and the Registry event provider, the consumer may receive as many notifications as there were occurrences of events.

    For more information about registration, see Temporary Event Consumers. For more information about constructing valid queries, see Event Queries.

    --
    L.J. Johnson, Slightly Tilted Software
    Microsoft MVP (Visual Basic)
    LJJohnson@SlightlyTiltedSoftware.com or LJJohnson@mvps.org
    <http://www.SlightlyTiltedSoftware.com>
    Ask The NT Pro at <http://www.devx.com/gethelp>



  7. #7
    Sachin Guest

    Re: REPOST-from VB.dotnet.technical

    This is the documentation that I found at MS site also :-( since it talks only about monitoring a particular KeyTree under a Hive..so does that mean to monitor the *whole* registry I need to fire as many WQL & thus have as many objects as there are KeyTrees under a particular hive ie if there are 10 keytrees under 1 Hive & there are 5 hives,I need to fire 5*10 WQL queries and at the same time know the names of the keytree also???Another documentation at MS Site also suggests that registry events are not always fired :-( and hence you don't recieve the notifications.
    -Sachin


    "L.J. Johnson" <LJJohnson@SlightlyTiltedSoftware.com> wrote in message news:3b992a20@news.devx.com...
    Sachin,

    > How can i monitor the entire registry using VB.NET with WMI or otherwise and
    > then when registry changes being notified what has changed for eg a new
    > key,a modified value etc


    Sure.

    First, you need to make sure the registry provider is registered with MOF.

    Then, the following article from the WMI SDK should help. Note, I haven't done this *specific* thing in VB.Net, but the stuff I have done in VB.Net using WMI seems to work pretty much the same. You must have a reference to System.Management.

    Registering for Registry Events
    To receive notifications from the Registry Provider, a management application must register as a temporary event consumer. Registering as a temporary event consumer involves:

    1.. Implementing the IWbemObjectSink interface. The Registry event provider calls the methods of this interface to deliver event notifications and report status.
    2.. Calling the COM function CoInitializeSecurity to initialize Distributed COM (DCOM) security.
    3.. Calling the IWbemServices::ExecNotificationQueryAsync method to register to be notified of particular the types of registry events.
    The bstrQuery parameter of ExecNotificationQueryAsync must be set to one or more valid event queries that specify an event class that is supported by the Registry event provider. The Registry event provider supports three classes of events.

    Event class Description
    RegistryTreeChangeEvent Monitors changes to a hierarchy of keys.
    RegistryKeyChangeEvent Monitors changes to a single key.
    RegistryValueChangeEvent Monitors changes to a single value.


    All three of these classes have a property called Hive that identifies the hierarchy of keys to be monitored for change, such as HKEY_LOCAL_MACHINE. The location of the tree, key, or value to be monitored is specified in the RootPath property of the RegistryTreeChangeEvent class, the KeyPath property of the RegistryKeyChangeEvent class, and the KeyPath and ValueName properties of the RegistryValueChange class.

    Each event query in the bstrQuery parameter of ExecNotificationQueryAsync must contain a WHERE clause that includes each of the properties in the specified event class. For example, set bstrQuery as follows to register for tree change events in the "HKEY_LOCAL_MACHINE\Software" tree:

    SELECT * FROM RegistryTreeChangeEvent
    WHERE Hive = "HKEY_LOCAL_MACHINE" AND Rootpath = "Software"
    It is important that the event query be explicit. The provider should be able to infer from the query a list of possible values for every property in the event class. For example, the following event query correctly registers for tree change events:

    SELECT * FROM RegistryTreeChangeEvent
    WHERE (hive = "hkey_local_machine" AND rootpath = "software")
    OR (hive = "hkey_current_user" AND rootpath = "console")
    The following query is an example of an incorrect registration:

    SELECT * FROM RegistryTreeChangeEvent
    WHERE hive = hkey_local_machine" OR rootpath ="software"
    Because there is no way to evaluate the possible values for each of the properties, WMI rejects the query with the error WBEM_E_TOO_BROAD. This error is returned if the WHERE clause in an event query is missing or is too broad to be of use.

    The Registry Event Provider attempts to send one notification for every event that occurs, but there is no guarantee. Consumers are guaranteed, however, to receive one notification for each event registration. For example, suppose a consumer registers for two tree change events, each with the same Hive value but a different RootPath value. If keys in both paths change multiple times, the consumer is guaranteed to receive notifications of at least two events, one for each path. Depending on the response time of the registry and the Registry event provider, the consumer may receive as many notifications as there were occurrences of events.

    For more information about registration, see Temporary Event Consumers. For more information about constructing valid queries, see Event Queries.

    --
    L.J. Johnson, Slightly Tilted Software
    Microsoft MVP (Visual Basic)
    LJJohnson@SlightlyTiltedSoftware.com or LJJohnson@mvps.org
    <http://www.SlightlyTiltedSoftware.com>
    Ask The NT Pro at <http://www.devx.com/gethelp>



  8. #8
    L.J. Johnson Guest

    Re: REPOST-from VB.dotnet.technical

    Sachin,

    OK, gotcha now.

    Well, you could get the source for RegMon (which does do what you are
    talking about, plus a lot more) at
    http://www.sysinternals.com/ntw2k/source/regmon.shtml -- but it's probably
    written in some fairly low-level C.

    > This is the documentation that I found at MS site also :-( since it talks

    only about monitoring a
    > particular KeyTree under a Hive..so does that mean to monitor the *whole*

    registry I need to fire
    > as many WQL & thus have as many objects as there are KeyTrees under a

    particular hive ie if
    > there are 10 keytrees under 1 Hive & there are 5 hives,I need to fire 5*10

    WQL queries and at
    > the same time know the names of the keytree also???


    SELECT * FROM RegistryTreeChangeEvent
    WHERE Hive = "HKEY_LOCAL_MACHINE" AND Rootpath = "Software"

    What happens if you leave out the RootPath? If that works, then you'd only
    need 5 or so queries
    (or, maybe you can OR them together). But if it needs a RootPath, then this
    doesn't seem to
    be a good method for your requirement.

    > Another documentation at MS Site also suggests that registry events are

    not always fired
    > :-( and hence you don't recieve the notifications.


    Yea, saw that. That might be a killer for your app??

    --
    L.J. Johnson, Slightly Tilted Software
    Microsoft MVP (Visual Basic)
    LJJohnson@SlightlyTiltedSoftware.com or LJJohnson@mvps.org
    <http://www.SlightlyTiltedSoftware.com>
    Ask The NT Pro at <http://www.devx.com/gethelp>



  9. #9
    Sachin Guest

    Re: REPOST-from VB.dotnet.technical

    hi
    After registering the RegEvent.mof (whichi I found under
    WinNT\System32\Wbem) with MofComp..i still can't see the
    RegistryTreeChangeEvent class :-(....I tried firing a WQL query (select *
    from RegistryTreeChangeEvent) in CIM studio but it gave me invalid class
    error..is there something that i am missing here??
    Also one MS documentation talks about that WLQ regsitry queries shouldn't be
    very broad otherwise it gives an WB_TOO_BROAD (or something like that)
    error..so am not too sure whether I can leave the RootPath part in the query
    Where clause.
    Also one more question how does WMI monitor registry??is it a PULL or a
    PUSH? If its a PULL ie WMI keeps on polling regustry for changes then I
    guess then it will be very resource intensive & actually then its not a good
    solution or does the registry itself PUSHes the event that it has been
    modified??
    -Sachin

    "L.J. Johnson" <LJJohnson@SlightlyTiltedSoftware.com> wrote in message
    news:3b994b89$1@news.devx.com...
    > Sachin,
    >
    > OK, gotcha now.
    >
    > Well, you could get the source for RegMon (which does do what you are
    > talking about, plus a lot more) at
    > http://www.sysinternals.com/ntw2k/source/regmon.shtml -- but it's probably
    > written in some fairly low-level C.
    >
    > > This is the documentation that I found at MS site also :-( since it

    talks
    > only about monitoring a
    > > particular KeyTree under a Hive..so does that mean to monitor the

    *whole*
    > registry I need to fire
    > > as many WQL & thus have as many objects as there are KeyTrees under a

    > particular hive ie if
    > > there are 10 keytrees under 1 Hive & there are 5 hives,I need to fire

    5*10
    > WQL queries and at
    > > the same time know the names of the keytree also???

    >
    > SELECT * FROM RegistryTreeChangeEvent
    > WHERE Hive = "HKEY_LOCAL_MACHINE" AND Rootpath = "Software"
    >
    > What happens if you leave out the RootPath? If that works, then you'd only
    > need 5 or so queries
    > (or, maybe you can OR them together). But if it needs a RootPath, then

    this
    > doesn't seem to
    > be a good method for your requirement.
    >
    > > Another documentation at MS Site also suggests that registry events are

    > not always fired
    > > :-( and hence you don't recieve the notifications.

    >
    > Yea, saw that. That might be a killer for your app??
    >
    > --
    > L.J. Johnson, Slightly Tilted Software
    > Microsoft MVP (Visual Basic)
    > LJJohnson@SlightlyTiltedSoftware.com or LJJohnson@mvps.org
    > <http://www.SlightlyTiltedSoftware.com>
    > Ask The NT Pro at <http://www.devx.com/gethelp>
    >
    >




Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
HTML5 Development Center
 
 
FAQ
Latest Articles
Java
.NET
XML
Database
Enterprise
Questions? Contact us.
C++
Web Development
Wireless
Latest Tips
Open Source


   Development Centers

   -- Android Development Center
   -- Cloud Development Project Center
   -- HTML5 Development Center
   -- Windows Mobile Development Center