Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-03-2018
malditango malditango is offline
Miembro
 
Registrado: oct 2007
Posts: 12
Poder: 0
malditango Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 11-03-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por malditango Ver Mensaje
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
Recuerda poner las etiquetas al código, porque ahí no se entiende nada.

Responder Con Cita
  #3  
Antiguo 12-03-2018
Dark_Code Dark_Code is offline
Miembro
NULL
 
Registrado: ene 2018
Posts: 11
Poder: 0
Dark_Code Va por buen camino
Cita:
Empezado por malditango Ver Mensaje
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
La función que uso en la Consola es este:

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;
Y en el form utilizo la siguiente función:

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;
Espero de su ayuda, Gracias.
Responder Con Cita
  #4  
Antiguo 12-03-2018
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Código Delphi [-]
function GetWindowText(Handle: THANDLE): AnsiString;
var
  Buffer: array [0..255] of AnsiCHAR;
begin
  SendMessage(Handle, WM_GETTEXT, 255, Cardinal(@Buffer[0]));
  Result:= Buffer;
end;


Saludos.
Responder Con Cita
  #5  
Antiguo 13-03-2018
Dark_Code Dark_Code is offline
Miembro
NULL
 
Registrado: ene 2018
Posts: 11
Poder: 0
Dark_Code Va por buen camino
Cita:
Empezado por escafandra Ver Mensaje
Código Delphi [-]
function GetWindowText(Handle: THANDLE): AnsiString;
var
  Buffer: array [0..255] of AnsiCHAR;
begin
  SendMessage(Handle, WM_GETTEXT, 255, Cardinal(@Buffer[0]));
  Result:= Buffer;
end;


Saludos.
En este caso como usaría la función ?, como haria para que me lea el edit de mi otro form ?

Código:
if hkexample= '1' then
        Pdword(Examen)^:= 456789456;
      end;
En ves de este valor "456789456" quiero que me lea el valor que agrego en mi edit que esta en mi form.
Responder Con Cita
  #6  
Antiguo 13-03-2018
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por Dark_Code Ver Mensaje
En este caso como usaría la función ?, como haria para que me lea el edit de mi otro form ?
Pues depende si ambos formularios son o no se tu aplicación. Si lo son, no es ni cesarario el código que expongo. En caso contrario debes conocer el handle de la ventana cuyo texto quieres leer. ¿Ese Edit es de un programa escrito en Delphi? ¿Como lo distingues? ¿Te sirve encontrarlo con un click de ratón? ¿Que funcionalidad precisas?.
En fin, tu sabes las respuestas y lo que quieres hacer.

Saludos
Responder Con Cita
  #7  
Antiguo 19-03-2018
Dark_Code Dark_Code is offline
Miembro
NULL
 
Registrado: ene 2018
Posts: 11
Poder: 0
Dark_Code Va por buen camino
Cita:
Empezado por escafandra Ver Mensaje
Pues depende si ambos formularios son o no se tu aplicación. Si lo son, no es ni cesarario el código que expongo. En caso contrario debes conocer el handle de la ventana cuyo texto quieres leer. ¿Ese Edit es de un programa escrito en Delphi? ¿Como lo distingues? ¿Te sirve encontrarlo con un click de ratón? ¿Que funcionalidad precisas?.
En fin, tu sabes las respuestas y lo que quieres hacer.

Saludos
Pueden revisar mi source y hacerlo como deseo.

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
Responder Con Cita
  #8  
Antiguo 19-03-2018
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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:
Código Delphi [-]
unit SharedMemory;

interface

uses
  Windows;


type
  TModos = (mServer, mClient);

  TSharedMemory = class
  private
    Modo: TModos;
    hMap: THANDLE;       //Server
    DataMap: THANDLE;    //Client
    Name: array [0..MAX_PATH] of char;

  public
    Buffer: Pointer;
    constructor Create(MappName: PCHAR; SizeData: DWORD = 0);
    destructor  Destroy; override;
  end;

implementation

procedure MessageError(Title: PCHAR);
var
   pBuffer: pointer;
begin
   FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM or FORMAT_MESSAGE_ALLOCATE_BUFFER, nil,
   GetLastError, 0, @pBuffer, 0, nil );
   MessageBox(0, pBuffer, Title, MB_OK);
   LocalFree(Cardinal(pBuffer));
end;


constructor TSharedMemory.Create(MappName: PCHAR; SizeData: DWORD);
begin
  lstrcpy(@Name[0], PCHAR(MappName));
  if SizeData <> 0 then
  begin
    Modo:= mServer;
    hMap:= CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READWRITE, 0, SizeData, Name);

    // Si el fichero de memoria compartida ya existe, lo cierro.
    if (hMap <> 0) and (GetLastError = ERROR_ALREADY_EXISTS) then
    begin
      CloseHandle(hMap);
      hMap:= 0;
    end;
  end
  else
    Modo:= mClient;

  // Inicializa
  Buffer:= nil;
  DataMap:= 0;

  DataMap:= OpenFileMapping(FILE_MAP_ALL_ACCESS, false, Name);
  if DataMap <> 0 then
    Buffer:= MapViewOfFile(DataMap, FILE_MAP_ALL_ACCESS, 0, 0, 0)
  else
    MessageError('ERROR');

end;

destructor TSharedMemory.Destroy;
begin
  if Buffer <> nil then
    UnmapViewOfFile(Buffer);

  CloseHandle(DataMap);

  if (hMap <> 0) and (Modo = mServer) then
    CloseHandle(hMap);
end;


end.

Ahora el código de tu dll:
Código Delphi [-]
library Project1;


uses
  SysUtils,
  Windows,
  Classes,
  Unit2 in 'Unit2.pas',
  SharedMemory in 'SharedMemory.pas';

{$R *.res}
var
  AtProcessobymr: THandle;
  hId:Cardinal;

  Memory: TSharedMemory;


procedure TrainerFarius;
begin
 while(true) do
 begin
   Sleep(100);
   PDWORD($A04569)^:= PDWORD(Memory.Buffer)^;
 end;
end;

begin
  Memory:= TSharedMemory.Create('_Mi_Memoria_', sizeof(Pointer));
  // Creamos un hilo para la ejecución de TrainerFarius
  CreateThread(nil, 0, @TrainerFarius, nil, 0, PDWORD(0)^);
end.

Y el formulario que envía el dato compartido:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,INIFiles,Unit2, SharedMemory, TLHelp32;

type
  TForm1 = class(TForm)
    edt1: TEdit;
    btn1: TButton;
    lbl1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure btn1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    Memory: TSharedMemory;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.FormCreate(Sender: TObject);
var
  Key:Tinifile;
begin
  Memory:= TSharedMemory.Create('_Mi_Memoria_', sizeof(DWORD));
end;

procedure TForm1.btn1Click(Sender: TObject);
var
  Val: DWORD;
begin
  Val:= StrToInt(Edt1.Text);
  CopyMemory(Memory.Buffer, @Val, sizeof(DWORD));
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Memory.Free;
end;

end.

El ejemplo es un esbozo pero es funcional.
Ahora vienes las preguntas del millón ¿Donde quieres inyectar esa dll? ¿Sabes hacerlo?


Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
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


La franja horaria es GMT +2. Ahora son las 15:21:50.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi