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

Вниз

Что я делаю не так при работе с SendMessage?   Найти похожие ветки 

 
Cosinus ©   (2004-03-23 16:04) [0]

SendMessage от одного моего App к другому моему же App...
Фрагмент MainUnit первого приложения :

interface

uses
 ...

 const
 WM_PrMonitorShow= WM_USER + 1001;

Type
 TForm1 = class(TForm)
   ....
   ....
   ....
   procedure FormCreate(Sender: TObject);
  private
   ....
  public
    bExitInProgress: Boolean;
   procedure WMPrMonitorShow(var msg: TMessage); message WM_PrMonitorShow;
  end;

var
 Form1: TForm1;

implementation

uses ....;

{$R *.dfm}

procedure TForm1.WMPrMonitorShow(var msg: TMessage);
begin
 bExitInProgress := True;
 ShowMessage("Ok");
 bExitInProgress := False;
end;


Фрагмент MainUnit второго приложения :

interface

uses
 ...

 const
 WM_PrMonitorShow= WM_USER + 1001;

Type
 TForm1 = class(TForm)
   ....
   ....
   ....
   procedure FormCreate(Sender: TObject);
  private
   ....
  public
   ....
  end;

var
 Form1: TForm1;

implementation

uses ....;

{$R *.dfm}

procedure TForm1.ButtonClick(Sender:Tobject);
begin
 if FindWindow(nil, "MyApp")<> 0 then
 SendMessage(FindWindow(nil, "MyApp"), WM_PrMonitorShow,0,0);
end;

Приведенный код не работает.
Может я неправильно работаю с SendMessage? Подскажите пожалуста, что не так.


 
Digitman ©   (2004-03-23 16:07) [1]

видимо, рез-т работы FindWindow()  равен нулю


 
cosinus ©   (2004-03-23 16:09) [2]

FindWindow не 0, потому что если вместо WM_PrMonitorShow поставить WM_Close, все отлично работает.


 
Digitman ©   (2004-03-23 16:14) [3]


> cosinus


между прочем, SendMessage() - функция (!!)

на мысленку не наводит сей неожиданный факт ?


 
cosinus ©   (2004-03-23 16:26) [4]

Честно говоря не очень. Единственное, что мне приходит в голову, так это то, что возможно необходимо сформировать какой-нибудь результат отработки или что то похожее. Я сильно не прав, да?


 
Verg ©   (2004-03-23 16:28) [5]

WM_APP
The WM_APP constant is used by applications to help define private messages, usually of the form WM_APP+X, where X is an integer value.

#define WM_APP       0x8000
Remarks
The WM_APP constant is used to distinguish between message values that are reserved for use by the system and values that can be used by an application to send messages within a private window class. The following are the ranges of message numbers available.

Range Meaning
0 through WM_USER – 1 Messages reserved for use by the system.
WM_USER through 0x7FFF Integer messages for use by private window classes.
WM_APP through 0xBFFF Messages available for use by applications.
0xC000 through 0xFFFF String messages for use by applications.
Greater than 0xFFFF Reserved by the system for future use.

Message numbers in the first range (0 through WM_USER – 1) are defined by the system. Values in this range that are not explicitly defined are reserved for future use by the system.

Message numbers in the second range (WM_USER through 0x7FFF) can be defined and used by an application to send messages within a private window class. These values cannot be used to define messages that are meaningful throughout an application, because some predefined window classes already define values in this range. For example, predefined control classes such as BUTTON, EDIT, LISTBOX, and COMBOBOX may use these values. Messages in this range should not be sent to other applications unless the applications have been designed to exchange messages and to attach the same meaning to the message numbers.

Message numbers in the third range (0x8000 through 0xBFFF) are available for application to use as private messages. Message in this range do not conflict with system messages.

Message numbers in the fourth range (0xC000 through 0xFFFF) are defined at run time when an application calls the RegisterWindowMessage function to retrieve a message number for a string. All applications that register the same string can use the associated message number for exchanging messages. The actual message number, however, is not a constant and cannot be assumed to be the same between different sessions.

Message numbers in the fifth range (greater than 0xFFFF) are reserved for future use by the system.


 
Digitman ©   (2004-03-23 16:36) [6]

procedure TForm1.WMPrMonitorShow(var msg: TMessage);
begin
msg.Result := -193;
end;
..
procedure TForm1.ButtonClick(Sender:Tobject);
var
 hWnd: THandle;
 sndresult: Integer;
begin
hWnd := FindWindow(nil, "MyApp");
if hWnd <> 0 then
 begin
   sndresult := SendMessage(hWnd, WM_PrMonitorShow,0,0);
   Showmessage("Ждем число -193, а получаем вот такую вот хрень " + IntToStr(sndresult) + " .. следует призадуматься) ..");
 end
else
 ShowMessage("А вот хрен вам ! В текущем дисктопе нет в данный момент окна с именем MyApp !")
end;


 
cosinus ©   (2004-03-23 16:52) [7]

>>Digitman ©   (23.03.04 16:36) [6]
Спасибо, я понял свою ошибку.

>>Verg ©   (23.03.04 16:28) [5]
Спасибо, я в принципе что то такое подозревал...


 
WebErr ©   (2004-03-23 16:56) [8]

Вообще то вместо FindWindow можно со спокойной совестью писать Form1.Handle, если это не противоречит личным убеждениям, типа  "КАК-ЭТА-ПРОГРАММА-ДОЛЖНА-РАБОТАТЬ" :))))


 
Игорь Шевченко ©   (2004-03-23 17:03) [9]

WebErr ©   (23.03.04 16:56)


> Вообще то вместо FindWindow можно со спокойной совестью
> писать Form1.Handle


Если учесть, что Form1 находится в другом приложении, то так писать не надо.

---
LMD



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

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

Наверх




Память: 0.47 MB
Время: 0.033 c
3-1082385329
Vit
2004-04-19 18:35
2004.05.16
Какая функция преобразует Date в String


1-1082984488
Domkrat
2004-04-26 17:01
2004.05.16
Запуск программы с ключами


8-1077726807
Morg
2004-02-25 19:33
2004.05.16
Как можно сделать ScreenShot быстрее


8-1076946984
Grinder
2004-02-16 18:56
2004.05.16
Проиграть мелодию 10 раз


6-1080234997
Ландграф Павел
2004-03-25 20:16
2004.05.16
TWebBrowser





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский