Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-05-2015
ElDuc ElDuc is offline
Miembro
 
Registrado: jul 2004
Posts: 197
Poder: 20
ElDuc Va por buen camino
Mandar y recibir mensajes Windows

Hola a todos,

Me imagino que este tema se ha tratado ya en bastantes ocasiones, pero soy incapaz de encontrar los hilos con el buscador del club. Pido disculpas por mi incapacidad manifiesta y os ruego me echéis una mano, sea en este hilo o dirigiéndome a otros de este tema.

En concreto lo que deseo hacer es mandar un mensaje de texto a Windows para que él lo mande a todos los procesos en marcha (digo procesos porque me interesa que los mensajes lleguen a aplicaciones exe y dll)

Por supuesto también necesito un procedimiento o evento que me avise en mi exe o dll de que se ha mandado ese mensaje.

Seria como si en una casa que hay 6 personas alguien grita "Juan, limpia la habitación", las 6 personas oyen la orden, pero sólo "Juan" realizará la tarea. Cuando "Juan" haya terminado la tarea, gritará "Mama, ya he recogido", otra vez todos oyen el mensaje, pero sólo "Mama" hace caso.

En ambos casos el que "grita" el mensaje no sabe en qué habitación está el destinatario, por eso son mensajes que se "gritan" (lanzan para que todos lo oigan)

Seguramente que he utilizado una forma de explicaros lo que necesito un poco cutre y nada técnica, disculpadme por ello.

Trabajo con D10 y W Vista, pero no creo que eso sea una limitación, porque los mensajes de Windos existen en todas las versiones, al menos eso es lo que tengo entendido.

Gracias por vuestra colaboración.
Responder Con Cita
  #2  
Antiguo 19-05-2015
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Creo que tendrás que ser más específico...
si haces una búsqueda en goolge te saldrá una infinidad de resultados:
https://www.google.es/search?q=windo...KxM4S6UYGogcAN

De todos modos es importante que expliques
  • qué es lo que quieres hacer (descripción genéral del proyecto)
  • qué procesos deben escuchar el mensaje
  • qué procesos deseas que actúen
  • cuál es el mensaje


Por ejemplo:
Quiero que mi aplicación envíe un mensaje a windows diciendo que presioné una serie de teclas.
La aplicación que debe escuchar el mensaje es Notepad.exe
Debe escribir el mensaje que le envio
Responder Con Cita
  #3  
Antiguo 19-05-2015
ElDuc ElDuc is offline
Miembro
 
Registrado: jul 2004
Posts: 197
Poder: 20
ElDuc Va por buen camino
Hola duilioisola,

Gracias por responder.

Tengo 1 aplicación y una dll de terceros, en la dll se encuentran unas funciones que utiliza la aplicación.

Lo que deseo hacer es sustituir la dll por una hecha por mi (con D2010), de la que conozco las funciones (incluidos los parámetros) para que desde la nueva dll y mis funciones pueda dar respuesta a la aplicación, hasta aqui no hay problema, ya me funciona.

El tema es que además necesito gestionar la información que el programa pasa a la dll en los parámetros y hacer un seguimiento visual del funcionamiento pero, que yo sepa, las dll son procesos no visuales, por lo que he pensado en que la dll le pase la información a mi programa (exe) con mensajes Windows para que éste procese y muestre la información visual.

Pero no soy capaz de conseguirlo.

Si puedes o alguien puede ayudarme estaré muy agradecido.
Responder Con Cita
  #4  
Antiguo 19-05-2015
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Por lo que entiendo, tienes una dll que quieres que envíe mensajes a un ejecutable.

Puedes utilizar DDE.
También puedes ver esto: http://delphi.about.com/od/windowssh...m_copydata.htm
y esto: http://stackoverflow.com/questions/5...ram-to-another

Y mira esto. Parece el mas simple: http://www.tek-tips.com/viewthread.cfm?qid=1181059
Responder Con Cita
  #5  
Antiguo 19-05-2015
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
ElDuc,

Cita:
Empezado por ElDuc
...las dll son procesos no visuales...


Revisa esta información:
Espero sea útil

Nelson.
Responder Con Cita
  #6  
Antiguo 19-05-2015
ElDuc ElDuc is offline
Miembro
 
Registrado: jul 2004
Posts: 197
Poder: 20
ElDuc Va por buen camino
Muchas gracias a ambos.

Lo miro y os cuento.
Responder Con Cita
  #7  
Antiguo 19-05-2015
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
ElDuc,

Cita:
Empezado por ElDuc
...necesito gestionar la información que el programa pasa a la DLL en los parámetros y hacer un seguimiento visual del funcionamiento pero...las DLL son procesos no visuales...


Revisa este código:
Código Delphi [-]
unit DLLUnit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
   ModalResult := mrOk;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
   ModalResult := mrCancel;
end;

end.
Código Delphi [-]
library DLLForm;

uses
  Windows,
  Messages,
  SysUtils,
  Variants,
  Classes,
  Graphics,
  Controls,
  Forms,
  Dialogs,
  DLLUnit1 in 'DLLUnit1.pas' {Form1};

{$R *.res}

function DLLFormParameters(S1 : Pchar;
                           I1 : Integer;
                           L1 : LongWord;
                           D1 : Double;
                           DT1 : TDateTime) : TModalResult; Stdcall;
var
   F : TForm1;

begin

   F := TForm1.Create(nil);

   with F do
   begin

      ListBox1.Clear;
      ListBox1.Items.Add(S1);
      ListBox1.Items.Add(IntToStr(I1));
      ListBox1.Items.Add(IntToStr(L1));
      ListBox1.Items.Add(FloatToStr(D1));
      ListBox1.Items.Add(DateTimeToStr(DT1));

      if F.ShowModal = mrOk then
         Result := mrOk
      else
         Result := mrCancel;
        
   end;

   F.Free;

end;

exports
   DLLFormParameters;

begin
end.
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  function DLLFormParameters(S1 : PChar;
                             I1 : Integer;
                             L1 : LongWord;
                             D1 : Double;
                             DT1 : TDateTime) : TModalResult; Stdcall; External 'DLLForm.dll';

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
   S1 : PChar;
   I1 : Integer;
   L1 : LongWord;
   D1 : Double;
   DT1 : TDateTime;

begin

   S1 := 'Test de envió de parámetros a un Form en un DLL';
   I1 := MaxInt;
   L1 := High(LongWord);
   D1 := 3.1415927;
   DT1 := Now;

   if DLLFormParameters(S1,I1,L1,D1,DT1) = mrOk then
      MessageDlg('DLLFormParameters Ok',mtInformation,[mbOK],0)
   else
      MessageDlg('DLLFormParameters Cancel',mtError,[mbOK],0)

end;

end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32, Implementa una DLL con un formulario que visualiza los parámetros enviados a esta, como se muestra en la siguiente imagen:



El código del ejemplo esta disponible en : DLLForm.rar

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 20-05-2015 a las 16:11:17.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Mandar mensajes con delphi 2010 jofebas OOP 10 07-06-2011 20:09:12
Recibir mensajes con Indy tec Internet 2 26-02-2010 15:43:46
Recibir Mensajes ANALBA Internet 2 28-07-2008 16:55:13
Recibir Mensajes de Correo marcial Internet 2 11-06-2007 07:30:14
Problema con mandar mensajes... Lester Varios 1 20-11-2003 17:31:30


La franja horaria es GMT +2. Ahora son las 01:57:22.


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