Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > WM_User в SendMessage


Автор: heskey 1.8.2005, 17:34
SendMessage(ShareInf^.AppWndHandle, WM_USER, ParamW, Code);

если я посылаю сообщение из библиотеки главному приложению, как мне использовать эту функцию и какой параметр должен быть? всегда ли WM_USER..или это зависит от типа хука? И как потом обработать его в приложении..Расскажите пожалуйста, и если можно пример какой - нибудь. smile

Автор: Song 2.8.2005, 08:29
Чтобы приложения могли обмениваться кустарными сообщениями, их надо зарегистрировать через RegisterWindowMessage
Добавлено @ 08:30
Если нужно передать что-то, то можно просто воспользоваться WM_COPYDATA

Автор: heskey 2.8.2005, 15:10
Не совсем..мне просто нужно из библиотеки вернуться к основному приложению, для этого я и хочу послать сообщение, что б затем обработать его в гланой программе.

Автор: ФЫГ 2.8.2005, 18:27
В библиотеке: SendMessage(MainAppHWnd,WM_YOURMESSAGE{>=WM_USER},wParam,lParam);
В приложении: interface ... type YourForm=class(TYourForm)...private...procedure OnWM_YOURMESSAGE(var Message: TMessage); message WM_YOURMESSAGE;
жмёшь Ктрл+Шифт+Ц и в новоиспечённой процедуре пишешь обработку сообщения WM_YOURMESSAGE (все параметры в передаваемой структуре)

Автор: heskey 4.8.2005, 14:21
спасибо большое за помощь. Все получилось! Я послал из библиотеки сообщение

Код

function SysMsgProc(Code: Integer; WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall;
begin
....
SendMessage(appwnd,WM_USER,wParam,lParam);
....
end;

и обработал его вот так:

Код

Procedure TForm1.WMUser(var Message: TMessage);
Begin
showmessage('сообщение!');
removehook;
reportdate;
End;
а в процедуре reportdate на строчке
....
App := CreateOleObject("excel.application");
...
выскакивает следующая ошибка "Не удается выполнить исходящий вызов, так как приложение обрабатывает входящий синхронный вызов"

в чем я неправ? что делать?

Автор: Romikgy 5.8.2005, 08:33
Мож попытаться вынести reportdate из Procedure TForm1.WMUser(var Message: TMessage);
и выполнять гдет в другой процедуре smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)