Solved

small registry function

Posted on 2006-06-20
15
311 Views
Last Modified: 2008-02-01

hello experts,

i am developing an application that has to be as small as possible,
but now i discover i need to write to the registry

what would be the smallest and most portable way?
0
Comment
Question by:Mark_FreeSoftware
  • 6
  • 5
  • 3
  • +1
15 Comments
 
LVL 26

Expert Comment

by:EDDYKT
Comment Utility
what do you mean by small?

Dim WSHShell
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.RegWrite "HKCU\MyRegKey\", "Top level key"


from

http://www.experts-exchange.com/Programming/Programming_Languages/Visual_Basic/Q_11153287.html
0
 
LVL 8

Expert Comment

by:kaliyugkaarjun
Comment Utility

SaveSetting, GetSetting: are 2 functions used in vb6 mostly

SaveSetting= write to registry

GetSetting = read fro mregistry

SaveSetting "MyCompany\MyAppName", "Printers", "Pr1", "def printer"
....or...
SaveSetting "MyCompany", "MyAppName\Printers", "Pr1", "def printer"

Just be sure the args do ~not~ include leading or trailing delimiters.
VB does not filter them and the underlying registry Api chokes on
them.

If you need to go beyond "HKEY_CURRENT_USER\Software\VB and VBA
Program Settings", then you'll need to use the registry Api. There are
a number of free reg classes and code, including one of the more popular at

http://vbaccelerator.com/home/index.asp

0
 
LVL 29

Expert Comment

by:nffvrxqgrcfqvvc
Comment Utility
This depends, do you want to rely on scripting? Do you want to use API?

What exactly do you need? Do you need to write to a part of the registry that already exists or do you need to create your own key? Are you only saving values or are you going to need to query the values as well?

If you only need to write values than it can be done in 4-5 lines using API
0
 
LVL 29

Assisted Solution

by:nffvrxqgrcfqvvc
nffvrxqgrcfqvvc earned 250 total points
Comment Utility
'Assuming you only want to write string values and or create a key to store your information in then API
'Its about 4 lines but how I format it looks larger.

Option Explicit

Private Declare Function RegCreateKeyExA Lib "advapi32" _
    (ByVal hKey As Long, _
    ByVal lpSubKey As String, _
    ByVal Reserved As Long, _
    ByVal lpClass As String, _
    ByVal dwOptions As Long, _
    ByVal samDesired As Long, _
    ByVal lpSecurityAttributes As Long, _
    phkResult As Long, _
    lpdwDisposition As Long) As Long

Private Declare Function RegSetValueExA Lib "advapi32.dll" _
   (ByVal hKey As Long, _
    ByVal lpValueName As String, _
    ByVal Reserved As Long, _
    ByVal dwType As Long, _
    ByVal lpValue As String, _
    ByVal cbData As Long) As Long

Private Declare Function RegCloseKey Lib "advapi32.dll" _
   (ByVal hKey As Long) As Long

Public Enum PHKEY
    HKEY_CURRENT_USER = &H80000001
    HKEY_LOCAL_MACHINE = &H80000002
End Enum

Public Function WriteValue( _
    hKey As PHKEY, _
    sKey As String, _
    vName As String, _
    vData As String) As Long
   
    'Returns 11 - if key created and call successful
    'Returns 12 - if opened existing key and successful
   
    Dim h      As Long
    Dim dp   As Long

    If RegCreateKeyExA(hKey, sKey, _
        0&, 0&, 0&, &H3F, _
        0&, h, dp) = 0 Then
      If RegSetValueExA(h, vName, 0&, _
        1, vData, Len(vData)) = 0 Then
        WriteValue = 1 & dp
      End If
    End If
    RegCloseKey h
End Function




'--- Form1 -----

Dim Success As Long
   
    Success = WriteValue(HKEY_CURRENT_USER, _
        "Software\NEWKEY", _
        "name", _
        "data to write")
0
 
LVL 13

Author Comment

by:Mark_FreeSoftware
Comment Utility

ok some more explanation:


by small i do mean as less bits as possible
(so i don't care about 100 lines code, i do care about the compiled size)

i only have to write to it (now)

most of the times i have to create new keys,
sometimes delete them


i want as few refereces as possible

i do now have references to:
kernel32 (copymem)
comdlg32l (getopenfilename)
user32 (region stuff,and sendmessage)
gdi32 (ExtCreateRegion)




@ EDDYKT :
do i have to include some dll for wscript?


@kaliyugkaarjun :
i have to go beyond the vb/vba key

and the vbaccelerator examples are great, but they are not really "small"
0
 
LVL 26

Expert Comment

by:EDDYKT
Comment Utility
>>do i have to include some dll for wscript?

no, it's already come with the system
0
 
LVL 13

Author Comment

by:Mark_FreeSoftware
Comment Utility

maybey i am doing somthing wrong, but when i use the wscript example,
vb states that "WScript" is an unknow variable
0
Do You Know the 4 Main Threat Actor Types?

Do you know the main threat actor types? Most attackers fall into one of four categories, each with their own favored tactics, techniques, and procedures.

 
LVL 26

Accepted Solution

by:
EDDYKT earned 250 total points
Comment Utility
Oooops

try this

Dim WSHShell
Set WSHShell = CreateObject("WScript.Shell")
WSHShell.RegWrite "HKCU\MyRegKey\", "Top level key"
0
 
LVL 13

Author Comment

by:Mark_FreeSoftware
Comment Utility

thank you!

that is indeed really small, but i don't understand it very good.

please see this question for exaplaining it a bit:
http://www.experts-exchange.com/Programming/Programming_Languages/Visual_Basic/Q_21892807.html




i am thinking about a split between eddykt (350)
and egl1044 (150)


is that ok for both of you?
0
 
LVL 29

Expert Comment

by:nffvrxqgrcfqvvc
Comment Utility
there both the same size in bytes
0
 
LVL 13

Author Comment

by:Mark_FreeSoftware
Comment Utility

not really:

the wscript exe:
16.384 bytes

the api exe:
20.480 bytes

what i did to test it:

open a new default project
now doubleclick on the form to go to the Form_Load
for the wscript i pasted all the code in the form_load (3 lines)

for the api i pasted all code above the form load, exept for the last lines
(Dim Success As Long
    Success = WriteValue(HKEY_CURRENT_USER, _
        "Software\NEWKEY", _
        "name", _
        "data to write"))

compiled the first as wscript.exe
and the second as api.exe

and the filesize is different
0
 
LVL 29

Expert Comment

by:nffvrxqgrcfqvvc
Comment Utility
not if you put the code in a module
0
 
LVL 13

Author Comment

by:Mark_FreeSoftware
Comment Utility

20.480 bytes when i put that code in a module


what are your compiler options?

i have it set to compile for small exe
0
 
LVL 29

Expert Comment

by:nffvrxqgrcfqvvc
Comment Utility
i get 16K for both but this is without using a form
0
 
LVL 13

Author Comment

by:Mark_FreeSoftware
Comment Utility

weird,


then it's a even split between you and eddykt
0

Featured Post

Threat Intelligence Starter Resources

Integrating threat intelligence can be challenging, and not all companies are ready. These resources can help you build awareness and prepare for defense.

Join & Write a Comment

Introduction In a recent article (http://www.experts-exchange.com/A_7811-A-Better-Concatenate-Function.html) for the Excel community, I showed an improved version of the Excel Concatenate() function.  While writing that article I realized that no o…
Background What I'm presenting in this article is the result of 2 conditions in my work area: We have a SQL Server production environment but no development or test environment; andWe have an MS Access front end using tables in SQL Server but we a…
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…

743 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now