jueves, 14 de enero de 2010

Registrar i desregistrar claus en un arxiu d'entrades de registre

La idea en aquesta nova aportació, és la de facilitar registrar i desenregistrar dades amb l'ajuda d'un arxiu d'entrades de registre. En el meu cas volia registrar una dll en un path de sistema. Per fer això, dins del path es volia afegir una variable de sistema. Per fer això i que el Windows ens tradueixi el path, el tipus de registre ha de ser REG_EXPAND_SZ. Llavors el registre es fa de la següent forma:

%ProgramFiles%\\MyFolder\\Mydll.dll

Guardat en una clau de tipus REG_EXPAND_SZ

El problema que vaig trobar, es que el valor del path en aquests registre ha d'estar en hexadecimal. Per trobar aquest valor, el sistema més senzill es obrir el regedit.exe i generar una clau d'aquest tipus. Un cop tenim la clau amb el path correcte l'exportem i l'afegim en els nostres fitxers .reg










Per comprovar que el path es correcte podem fer servir el UltraEdit. Es un editor molt complet, del que es pot baixar una versió d'avaluació de la pròpia pàgina. Amb ell podrem traduir el path escrit i comparar-lo amb el generat.

http://www.ultraedit.com/

Per trobar aquesta informació he consultat les següents pàgines:

http://msdn.microsoft.com/en-us/library/ms923642.aspx
http://en.wikipedia.org/wiki/Windows_Registry
http://www.pctools.com/forum/showthread.php?t=31388

Pel que fa la part de desenregistrar, solament hem d'afegir el símbol - dabant de la clau. Per exemple:

[-HKEY_CLASSES_ROOT\ObjecteCOM.coObjectCOM]

miércoles, 13 de enero de 2010

Com trobar el path d'un executable

Bones, l'aportació d'avui es molt curta, però no vol dir que no sigui útil. Perqué no sabem quan podem necessitar saber el path de l'executable on estem treballant. Per exemple, ens seria útil per mostrar imatges d'una carpeta que està dins de la carpeta on es troba el nostre executable. La solució es senzilla i parteix del paràmetre amb el que obtenim el path complet de l'executable. El codi és

exeFile := ParamStr(0);

Per obtenir solament el Path ho fem de la següent forma:

pathexeFile := ExtractFilePath(ParamStr(0));

Espero que això us sigui útil.

lunes, 4 de enero de 2010

MSBuild a Delphi 2007

M'he trobat amb el problema de voler moure una sèrie de fitxers dfm dins d'un path concret després de compilar. Com que no tots els fitxers es trobaven dins del mateix path, he optat per crear un Target personalitzat. L'utilització d'aquests targets esta comentada molt per sobre a llibre d'en Marco Cantú, Delph 2007 Handbook. En ell ens comentar un exemple d'afegir el resultat de la compilació en un fitxer .zip.

Tal i com es recomana, el que he fet es crear un nou fitxer .proj, en aquest fitxetr he definit el meu target. En el meu cas he fet servir un target estàndard de copia.

<?xml version="1.0" encoding="utf-8"?>
<
Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<FrontEndFiles Include="..\*.dfm;..\Articles\INTERFICIE\*.dfm;..\Clients\INTERFICIE\*.dfm;..\Colaboradors\*.dfm;..\Colaboradors\INTERFICIE\*.dfm;..\Compres\Interficie\*.dfm;..\ComunicacionsProgramesExterns\INTERFICIE\*.dfm;..\Facturacio\LIB\*.dfm;..\FormesDePagament\INTERFICIE\*.dfm;..\Frames\*.dfm;..\GestioEmpresa\*.dfm;..\HoresColaboradors\INTERFICIE\*.dfm;..\Instalacions\*.dfm;..\Instalacions\INTERFICIE\*.dfm;..\Moviments\INTERFICIE\*.dfm;..\Pressupostos\*.dfm;..\Proveidors\INTERFICIE\*.dfm" />
</ItemGroup>
<Target Name="Copy">
<Copy SourceFiles="@(FrontEndFiles)" DestinationFolder="$(OutputDir)" />
</Target>
<
/Project>



En aquest XML definim un nou target anomenat Copy i al tag FrontEndFiles incloem tots els fitxers i directoris que hem de tractar. Un cop fet això, hem d'afegir al dproj del projecte les següents dades:

<?xml version="1.0" encoding="utf-8"?>
<
Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" InitialTargets="build;Copy">
<Import Project="copy.proj" />



Això farà que s'executi el nostre target en finalitzar l'execució.