Chequear valor en registy y ejecutar programa

17/11/2003 - 14:46 por Eduardo G Silva | Informe spam
Hola a todos, en realidad soy un intruso en este foro, programo hace años en
VB y PHP nunca me habia metido con C++ pero me surguio un problema que no
puedo resolver con vb y hace dos semanas que estoy internado intentando
desmarañar Visual C y si bien estoy facinado tambien estoy a punto del
colapso nervioso.

Hice una aplicacion multimedia en VB y un Instalador de dicha aplicacion
ahora bien mi cliente me pidio que tenga autorun el problema es que no puedo
hacer el autorun en VB porque para ejecutarlo antes tengo que instalar al
menos la vbrun correspondiente a la version.

Por eso comence a hacer una Win32 Console Application que lo unico que tiene
que hacer es ver es si existe una clave en la registy y si la encuentra
ejecutar un exe que se encuentra en el valor de la clave. Si no lo
encuentra tiene que ejecutar el instalador que esta en el cd. Tengo
entendido que este programita que estoy haciendo en VC no va a necesitar
registrar nada para ejecutarse.

Hasta aca todo bien el problema es que no me da la cabeza si tubiese que
hacer esto en VB agregaria una API en un modulo y invocaria la funcion en un
procedimiento.

Encontre un ejemplo navegando por ahi que ve si un valor de la registy
existe pero no entiendo como hace para incluir en el proyecto por ejemplo
RegOpenKeyEx. Creo que estoy cerca de la solucion pero me un empujoncito

Me dan una mano.

Muchas Gracias y gracias por la paciencia






void LeeClave(void)
{
HKEY key;
char subKey[] = "Software\\Mecenas-Brasil\\MuchoGusto";
char valName[] = "Instalacion"; /* ruta del exe instalado */
char val[255];
char valAca[255];
int size = sizeof(val)-1;
DWORD type = REG_SZ;

if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, subKey, 0, KEY_ALL_ACCESS, &key))
MessageBox(NULL, key, "Primer mensaje", MB_OK | MB_ICONERROR);
// return;

if(RegQueryValueEx(key, valName, NULL, &type, val, &size))
{
// wsprintf(val, "%d", "que va");
// RegSetValueEx(key, valName, 0, REG_SZ, val, strlen(val));
MessageBox(NULL, "aca tendria que estar", val, MB_OK | MB_ICONERROR);
}
else
{
MessageBox(NULL, subKey, "No entro en el query", MB_OK | MB_ICONERROR);
}
RegCloseKey(key);
MessageBox(NULL, subKey, "ultimo mens", MB_OK | MB_ICONERROR);
}


begin 666 Eduardo Germán Silva.vcf
M0D5'24XZ5D-!4D0-"E9%4E-)3TXZ,BXQ#0I..E-I;'9A.T5D=6%R9&\[1V5R
M;>%N#0I&3CI%9'5A<F1O($=E<FWA;B!3:6QV80T*3D]413M%3D-/1$E.1SU1
M54]4140M4%))3E1!0DQ%.D=U/45$82!D92!U<V\@9&5L(&9O<F\Z/3!$/3!!
M:'1T<#HO+W!E<G-O+G=A;F%D;V\N97,O<G5B96YV:6=O;B]F;W)O/3!$/3!!
M#0I%34%)3#M04D5&.TE.5$523D54.D5D=6%R9&]3:6QV84!M96-E;F%S+F-O
D;0T*4D56.C(P,#,Q,3$W5#$S-#8R.5H-"D5.1#I60T%21 T*
`
end
 

Leer las respuestas

#1 my name
18/11/2003 - 03:00 | Informe spam
"Eduardo G Silva" wrote in
news::

Hola a todos, en realidad soy un intruso en este foro, programo hace
años en VB y PHP nunca me habia metido con C++ pero me surguio un
problema que no puedo resolver con vb y hace dos semanas que estoy
internado intentando desmarañar Visual C y si bien estoy facinado
tambien estoy a punto del colapso nervioso.

Hice una aplicacion multimedia en VB y un Instalador de dicha
aplicacion ahora bien mi cliente me pidio que tenga autorun el
problema es que no puedo hacer el autorun en VB porque para ejecutarlo
antes tengo que instalar al menos la vbrun correspondiente a la
version.




Para hacer q un CD tenga autorun no necesitas crear una aplicacion en VC,
solo tienes q crear en el directorio raiz del CD un fichero llamado
autorun.inf

[autorun]
open=Instalar.exe
icon=tuicono.ico


Por eso comence a hacer una Win32 Console Application que lo unico que
tiene que hacer es ver es si existe una clave en la registy y si la
encuentra ejecutar un exe que se encuentra en el valor de la clave.
Si no lo encuentra tiene que ejecutar el instalador que esta en el cd.
Tengo entendido que este programita que estoy haciendo en VC no va a
necesitar registrar nada para ejecutarse.

Hasta aca todo bien el problema es que no me da la cabeza si tubiese
que hacer esto en VB agregaria una API en un modulo y invocaria la
funcion en un procedimiento.



Estas funciones en VB serian:

Public Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias
"RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal
ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long

Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias
"RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal
lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As
Long
' Note that if you declare the lpData parameter as String, you must pass it
By Value.

Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias
"RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal
Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As
Long) As Long
' Note that if you declare the lpData parameter as String, you must pass it
By Value.

Public Declare Function RegCloseKey Lib "advapi32.dll" Alias "RegCloseKey"
(ByVal hKey As Long) As Long







Encontre un ejemplo navegando por ahi que ve si un valor de la registy
existe pero no entiendo como hace para incluir en el proyecto por
ejemplo RegOpenKeyEx. Creo que estoy cerca de la solucion pero me un
empujoncito

Me dan una mano.

Muchas Gracias y gracias por la paciencia






void LeeClave(void)
{
HKEY key;
char subKey[] = "Software\\Mecenas-Brasil\\MuchoGusto";
char valName[] = "Instalacion"; /* ruta del exe instalado */
char val[255];
char valAca[255];
int size = sizeof(val)-1;
DWORD type = REG_SZ;

if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, subKey, 0, KEY_ALL_ACCESS, &key))
MessageBox(NULL, key, "Primer mensaje", MB_OK | MB_ICONERROR);
// return;




#define BUFSIZE 1024

HKEY hKey;
TCHAR val[BUFSIZE];
DWORD dwBufLen=BUFSIZE;
LONG lRet;

TCHAR subKey[] = _T("Software\\Mecenas-Brasil\\MuchoGusto");
TCHAR valName[] = _T("Instalacion"); /* ruta del exe instalado */
TCHAR val[BUFSIZE];


lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
subKey),
0,
KEY_QUERY_VALUE,
&hKey );

// encontrada
if( lRet == ERROR_SUCCESS )
{
// Consultar la clave del registro
lRet = RegQueryValueEx( hKey, valName, NULL, NULL,
(LPBYTE) val, &dwBufLen);


if( (lRet == ERROR_SUCCESS) || (dwBufLen < BUFSIZE) )
{

// Ejecutas el programa si se encuentra la clave

RegCloseKey( hKey );
}

}




if(RegQueryValueEx(key, valName, NULL, &type, val, &size))
{
// wsprintf(val, "%d", "que va");
// RegSetValueEx(key, valName, 0, REG_SZ, val, strlen(val));
MessageBox(NULL, "aca tendria que estar", val, MB_OK |
MB_ICONERROR);
}
else
{
MessageBox(NULL, subKey, "No entro en el query", MB_OK |
MB_ICONERROR);
}
RegCloseKey(key);
MessageBox(NULL, subKey, "ultimo mens", MB_OK | MB_ICONERROR);
}


begin 666 Eduardo Germán Silva.vcf
BEGIN:VCARD
VERSION:2.1
N:Silva;Eduardo;Germán
FN:Eduardo Germán Silva
NOTE;ENCODING=QUOTED-PRINTABLE:Guía de uso del
foro:


http://perso.wanadoo.es/rubenvigon/foro

EMAIL;PREF;INTERNET: REV:20031117T134629Z
END:VCARD
Attachment decoded: Eduardo Germán Silva.vcf
`
end





Te mando un ejemplo en VB de acceso al registro por si lo quieres manejar
de ese modo y no con VC.






Saludos

Preguntas similares