Форум: "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