![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
![]() Hola a todos, quisiera que me ayuden con este problema, lo que quiero hacer es que desde una Consola me lea un edit de otro form aparte.
El código que uso en mi consola es este: Código:
try hkexample:= leCadINI ('World','example',''); begin if hkexample= '1' then Pdword(Examen)^:= 456789456; end; Las activaciones en mi form lo hago de esta manera en un botón Código:
procedure TForm1.btn1Click(Sender: TObject); begin esEntINI('World','example',1); end; end. Código:
//Lee un booleano de un INI function leBoolINI (clave, cadena : string; defecto : boolean) : boolean; begin with tinifile.create (changefileext(paramstr(0),'.INI')) do try result := readbool (clave, cadena, defecto); finally free; end; end; //Lee un entero de un INI function leEntINI (clave, cadena : string; defecto : integer) : integer; begin with tinifile.create (changefileext(paramstr(0),'.INI')) do try result := readInteger (clave, cadena, defecto); finally free; end; end; //Lee una cadena de texto de un INI function leCadINI (clave, cadena : string; defecto : string) : string; begin with tinifile.create (changefileext(paramstr(0),'.INI')) do try result := readString (clave, cadena, defecto); finally free; end; end; //lee una fecha de un INI function leFechaINI (clave, cadena : string; defecto : tdatetime) : tdatetime; begin with tinifile.create (changefileext(paramstr(0),'.INI')) do try result := ReadDate (clave, cadena, defecto); finally free; end; end; //lee un valor numérico de un INI function leFloatINI (clave, cadena : string; defecto : double) : double; begin with tinifile.create (changefileext(paramstr(0),'.INI')) do try result := readfloat (clave, cadena, defecto); finally free; end; end; //escribe un Booleano en un INI procedure esBoolINI (clave, cadena : string; valor : boolean); begin with tinifile.create (changefileext(paramstr(0),'.INI')) do try writeBool (clave, cadena, valor); finally free; end; end; //Escribe un entero en un INI procedure esEntINI (clave, cadena : string; valor : integer); begin with tinifile.create (changefileext(paramstr(0),'.INI')) do try writeInteger (clave, cadena, valor); finally free; end; end; //escribe una cadena de texto en un INI procedure esCadINI (clave, cadena, valor : string); begin with tinifile.create (changefileext(paramstr(0),'.INI')) do try writeString (clave, cadena, valor); finally free; end; end; //escribe un número en un INI procedure esFloatINI (clave, cadena : string; valor : double); begin with tinifile.create (changefileext(paramstr(0),'.INI')) do try WriteFloat (clave, cadena, valor); finally free; end; end; //escribe una fecha en un INI procedure esFechaINI (clave, cadena : string; defecto : tdatetime); begin with tinifile.create (changefileext(paramstr(0),'.INI')) do try WriteDate (clave, cadena, defecto); finally free; end; end; |
#2
|
|||
|
|||
en tu code no veo como accedas al fichero, ni leCadINI ni esEntINI
with tinifile.create (changefileext(paramstr(0),'.INI')) do // aqui crea el archivo pero no se en que ubicacion |
#3
|
||||
|
||||
Cita:
![]()
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#4
|
|||
|
|||
Cita:
Código:
function leCadINI (clave, cadena : string; defecto : string) : string; begin with TiniFile.Create ('c:\Fichero.ini') do try result := readString (clave, cadena, defecto); finally free; end; end; Código:
//Lee una cadena de texto de un INI function leCadINI (clave, cadena : string; defecto : string) : string; begin with TiniFile.Create ('c:\Fichero.ini') do try result := readString (clave, cadena, defecto); finally free; end; end; //Escribe un entero en un INI procedure esEntINI (clave, cadena : string; valor : integer); begin with TiniFile.Create ('c:\Fichero.ini') do try writeInteger (clave, cadena, valor); finally free; end; end; |
#6
|
|||
|
|||
Cita:
Código:
if hkexample= '1' then Pdword(Examen)^:= 456789456; end; |
#7
|
||||
|
||||
Cita:
En fin, tu sabes las respuestas y lo que quieres hacer. Saludos |
#8
|
|||
|
|||
Cita:
https://www.sendspace.com/file/evlja6 Disculpen a todos en General por subir el archivo por este medio, solo que no tengo el rango suficiente para subir archivos en este Club. Gracias a todos por su comprensión ![]() Última edición por Casimiro Notevi fecha: 19-03-2018 a las 19:08:10. Razón: Poner URL |
#9
|
||||
|
||||
Una primera aproximación consistiría en usar archivos de memoria compartida y un hilo en tu dll que los lea continuamente. Más sofisticado sería los mensajes entre threads con PostThreadMessage o la inyección directa cosa que no está en este momento a tu alcance.
Vamos a ver un ejemplo sencillo compartiendo memoria: Lo siguiente es una clase para facilitar compartir memoria entre procesos:
Ahora el código de tu dll:
Y el formulario que envía el dato compartido:
El ejemplo es un esbozo pero es funcional. Ahora vienes las preguntas del millón ¿Donde quieres inyectar esa dll? ¿Sabes hacerlo? Saludos. |
#10
|
|||
|
|||
Cita:
Primero creamos un form donde guardaremos el contenido de un Edit en un fichero INI: - Creamos el Fichero INI.
- Guardamos el contenido de un Edit en un INI a traves de un boton.
Para leer el INI del Edit que hemos guardado, hacemos lo siguiente en otro form. -Utilizaremos este Unit.
Ahora colocaremos un Edit para que nos muestre el valor obtenido del INI y un botón.
Todo va perfecto, En el primer exe se guarda muy bien el valor de Edit en un fichero INI, y en el segundo exe se muestra el valor guardado. Ahora lo que quiero hacer es editar con el valor guardado del Edit en una DLL, lo estoy haciendo de esta forma, pero esta mal en la forma de editar , espero de su ayuda.
|
#11
|
||||
|
||||
Cita:
¿Editar qué? ¿Cual es la razón de ser de una dll? ¿Que es esta dirección $A04569? ¿De qué proceso? ¿Es constante? En el caso de que lo que pretendas en cambiar el valor de cierta dirección de cierto proceso ajeno, debes saber algo de inyecciones, conocer si la dirección apuntada es constante cada vez que se cargue ese proceso y en ese caso, y sólo en ese caso, puedes pretender el cambio seguro del valor de dicho puntero. Si esas son la premisas, ahora debes diseñar bien el cómo y cuando se hace. Esto te obliga a comunicarte certeramente con tu dll y el uso de archivos en disco no es una buena opción cuando se requiere precisión cronológica. Tu dll no se carga en ningún sitio, no hay inyección, la ultima linea no tiene sentido:
Dices que no te funciona, la pregunta es ¿Que no funciona? ¿Por qué dices que no funciona? El código que te pasé funciona tal cual, otra cosa es que la idea inicial sea o no correcta PDWORD($A04569)^:= Valor pero debes tener claro algunas cosas de las dll. Cada proceso carga una copia de la dll. La dirección en cuestión, $A04569, solo afecta al proceso que carga la copia de la dll que lee el valor que quieres usar. En un proceso en ejecución, las direcciones no tienen porqué ser constantes y dependen de cómo y donde ha cargado windows ese proceso. Saludos. |
#12
|
||||
|
||||
Cita:
Claramente, la exposición de tu pregunta daba a entender algo muy distinto a lo que querías.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Como leer nodo de archivo xml con Python usando minidom | jourdan | Python | 3 | 09-02-2018 21:23:16 |
problema texto de varios edit a otro edit | rafaelon | Varios | 2 | 29-07-2017 22:49:02 |
Leer un edit | JoseFco | Varios | 12 | 19-03-2008 01:41:45 |
Problema al leer en un edit sobran caracteres | jandres | Varios | 1 | 08-09-2006 22:49:55 |
usando texto de edit | unko! | Internet | 2 | 19-03-2005 04:16:38 |
![]() |
|