Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];

Вниз

WM_COPYDATA и скрытое окно   Найти похожие ветки 

 
DinoRay   (2005-05-20 17:23) [0]

Почему скрытое окно не получает сообщение WM_COPYDATA,
когда  
ShowWindow(Application.Handle, SW_RESTORE) получает
так
 ShowWindow(Application.Handle, SW_HIDE) не получает
?


 
Игорь Шевченко ©   (2005-05-20 17:44) [1]

Получает. У тебя ошибка в программе


 
DinoRay   (2005-05-20 17:58) [2]

2 приложения
первое классическое Tray
Определены
   procedure ApplicationMinimize(Sender : TObject);
   procedure ApplicationRestore(Sender : TObject);
   procedure WMCOPYDATA(var Message: TMessage); message WM_COPYDATA;

procedure Tfrm_Main.ApplicationMinimize(Sender : TObject);
begin
 ShowWindow(Application.Handle, SW_HIDE);
end;

procedure Tfrm_Main.ApplicationRestore(Sender : TObject);
begin
 ShowWindow(Application.Handle, SW_RESTORE);
end;

procedure Tfrm_Main.WMCOPYDATA(var Message: TMessage);
var
 pcd: PCopyDataStruct;
begin
 pcd := PCopyDataStruct(Message.LParam);
end;  

в OnCreate главной формы
   Application.OnMinimize := ApplicationMinimize;
   Application.OnRestore := ApplicationRestore;
   ShowWindow(Application.Handle, SW_HIDE);

во втором приложении
procedure TForm1.Button1Click(Sender: TObject);
var
tt:THandle;
cd:TCopyDataStruct;
begin
 tt:=FindWindow(nil,"MainForm");
 ShowMessage(IntToStr(tt));
  cd.cbData := Length("asas") + 1;
  cd.lpData := PChar("asas");
  SendMessage(tt, WM_COPYDATA, 0, Longint(@cd));
end;

при запуске первого окно Minimized, соответственно скрыто,
посылаем из второго месагу Handle находит, месага не приходит,
делаем в первом Restore все приходит


 
alpet ©   (2005-05-20 20:20) [3]

А что Spy++ (winsight32) дает по отношению к скрытому окну ?


 
френк   (2005-05-20 21:24) [4]

однозначно получает. у меня все работает. глюк явно у тебя где-то.


 
DinoRay   (2005-05-26 18:30) [5]

Да фиг там...
переписал в новый проэкт.. не получает
когда visible тогда получает если Hide не получает..
че за ерунда такая?

-----------------------Прога которая принимает
unit U_test;

interface

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

type
 TForm1 = class(TForm)
   RxTrayIcon1: TRxTrayIcon;
   procedure FormCreate(Sender: TObject);
   procedure RxTrayIcon1DblClick(Sender: TObject);
 private
 
 public
   procedure WMCOPYDATA(var Message: TMessage); message WM_COPYDATA;
   procedure ApplicationMinimize(Sender : TObject);
   procedure ApplicationRestore(Sender : TObject);
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ApplicationMinimize(Sender : TObject);
begin
 ShowWindow(Application.Handle, SW_HIDE);
end;

procedure TForm1.ApplicationRestore(Sender : TObject);
begin
 ShowWindow(Handle, SW_RESTORE);
end;

procedure TForm1.WMCOPYDATA(var Message: TMessage);
var
 pcd: PCopyDataStruct;
begin
 pcd := PCopyDataStruct(Message.LParam);
 ShowMessage(PChar(pcd.lpData));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   Application.OnMinimize := ApplicationMinimize;
   Application.OnRestore := ApplicationRestore;
   ApplicationMinimize(Self);
end;

procedure TForm1.RxTrayIcon1DblClick(Sender: TObject);
begin
 Application.Restore;
 Application.BringToFront;
end;

end.
-----------------------
------------------------ Прога которая отправляет
unit Unit14444;

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;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 hwnd:THandle;
 cd:TCopyDataStruct;
 msgtext:String;
begin
 hwnd := FindWindow (nil, "FormTest");
 msgtext:="asd";
 if hwnd <> 0 then
  begin
   cd.cbData := Length(msgtext) + 1;
   cd.lpData := PChar(msgtext);
   SendMessage(hwnd, WM_COPYDATA, 0, LParam(@cd));
  end;
end;

end.


 
alpet ©   (2005-05-26 18:47) [6]

Сравни какое окно находится строкой   "tt:=FindWindow(nil,"MainForm")", при свернутой и не свернутой форме второго приложения.


 
DinoRay   (2005-05-26 18:55) [7]

Ха разобрался...
короче такая хрень происходит если в делфю загружен проект который принимает месаги,
если его выгрузить все нормально ловит...
делфя 6 XP Professional
вот так-то...


 
GrayFace ©   (2005-05-26 20:34) [8]

DinoRay   (26.05.05 18:55) [7]
Тут не в дельфе дело. Любое приложение с формой "MainForm" может начать принимать твои сообщения. Лучше сделать так:
 protected
   procedure CreateParams(var Params: TCreateParams); override;

implementation

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
 inherited CreateParams(Params);
 Params.WinClassName:="Уникальное имя класса";
end;


и, соответственно, tt:=FindWindow("Уникальное имя класса",nil)



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.039 c
6-1113233727
Diesel
2005-04-11 19:35
2005.07.18
Подмена сокета при сборки пакета.


14-1119432614
TohaNik
2005-06-22 13:30
2005.07.18
Полетит или нет? :)


14-1119880085
_Anton
2005-06-27 17:48
2005.07.18
Пустой буфер при GetFieldData


4-1116776874
psa247
2005-05-22 19:47
2005.07.18
EnumObjects


14-1119507619
MacroDenS
2005-06-23 10:20
2005.07.18
Dura lex, sed lex - Закон суров, но закон!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский