Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2011, 22:10   #1
iCaesy
In progress...
Форумчанин
 
Регистрация: 25.09.2011
Сообщений: 161
По умолчанию Delphi WM_COPYDATA

С первой проги передаю во вторую сообщение, вторая прога при получении ищет директорию винды, и отсылает строку обратно.
Вот код, в чем ошибка, назад не возвращает =((

Отсылаем / Принимаем:


Код:
unit Unit1;

interface

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

  var WM_SUBSCRIBETIME, WM_UNSUBSCRIBETIME : Cardinal;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
  procedure WMCopyData(var msg: TMessage);message WM_COPYDATA;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var srvhandle : THandle;
begin
 srvhandle := FindWindow(nil ,'Server');
 if srvhandle<>0 then begin
   PostMessage(srvhandle,WM_SUBSCRIBETIME,integer(Self.Handle),0);
   Button1.Caption:='Server found !' end
  else
   begin
   PostMessage(srvhandle,WM_UNSUBSCRIBETIME,integer(Self.Handle),0);
   Button1.Caption := 'Server not found !';
   end;
end;

procedure TForm1.WMCopyData(var msg: TMessage);
 var
    WinDir: String;
    m:cardinal;
 begin
 m := PCopyDataStruct(msg.lParam)^.dwData;
 if PCopyDataStruct(msg.lParam)^.lpData <> nil then
  windir :=String(PCopyDataStruct(msg.lParam)^.lpData^);
 Label1.Caption:=windir;
 end;

initialization
  WM_SUBSCRIBETIME := RegisterWindowMessage('WM_SUBSCRIBETIME');
  WM_UNSUBSCRIBETIME:= RegisterWindowMessage('WM_UNSUBSCRIBETIME');
end.
Обрабатываем:


Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Label1: TLabel;
    Label2: TLabel;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  const MaxClients = 32;

  var WM_SUBSCRIBETIME, WM_UNSUBSCRIBETIME: Cardinal;

  var
  Form1: TForm1;
  TimeClientList : array[0..MaxClients-1] of THandle;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
var
  i : Integer;
  var CDS : TCopyDataStruct;
      WinDir: String;
      buffer: array [0..255] of char;
begin
  GetWindowsDirectory(buffer, SizeOf(buffer));
  windir:=buffer;
  Label1.Caption:=windir;
  CDS.dwData := 0;
  CDS.cbData := SizeOf(windir);
  CDS.lpData := @windir;

  for i:=0 to MaxClients-1 do
   begin
   if TimeClientList[i]<>0 then
    SendMessage(TimeClientList[i],WM_COPYDATA,Self.Handle,longint(@CDS) );
   end;
end;

initialization
  FillChar( TimeClientList, SizeOf(TimeClientList), 0);
finalization

end.

Последний раз редактировалось iCaesy; 21.12.2011 в 10:36.
iCaesy вне форума Ответить с цитированием
Старый 21.12.2011, 10:36   #2
iCaesy
In progress...
Форумчанин
 
Регистрация: 25.09.2011
Сообщений: 161
По умолчанию

10символов
iCaesy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Wm_CopyData digital-stream Общие вопросы Delphi 0 19.07.2011 22:07
Wm_CopyData digital-stream Общие вопросы Delphi 1 15.07.2011 22:49
Почему SendMessage -> WM_COPYDATA -> Poka摅皲摺皲8 ? ArtGrek Общие вопросы Delphi 7 18.04.2011 09:43
Проблема получением сообщения WM_COPYDATA kleop Win Api 0 12.03.2010 21:58
Delphi. Как нарисовать в Delphi два движущиеся шара с определенной скоростью? redred Общие вопросы Delphi 10 11.12.2007 10:43