WM_COPYDATA & C++Builder 5
примерно такой код:
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR lpCmdLine, int)
{
HWND Wnd = 0;
// нашел хандл нужного окна (если программа уже выполняется)
Wnd = ....
//подготовил сообщение
if(Wnd) {
COPYDATASTRUCT cpd;
cpd.cbData = strlen(lpCmdLine) + 1;
cpd.lpData = lpCmdLine;
cpd.dwData = 0;
SendMessage(Wnd, WM_COPYDATA, unsigned(Wnd), (LPARAM) (PCOPYDATASTRUCT) &cpd);
//вытащим форму на передний план - что-то такого типа...
SendMessage(Wnd, WM_SETFOCUS, unsigned(Wnd), 0);
if(ShowWindow(Wnd, SW_RESTORE))
SetForegroundWindow(Wnd);
return 0;
}
//дальше "стандартный" код:
try {
Application->Initialize();
и так далее...
}
catch(...) {}
return 0;
}
в хидере главной формы:
class TfrmMain : public TForm
{
.....
private:
MESSAGE void OnCopyData(TMessage &Message);
public: // User declarations
__fastcall TfrmMain(TComponent* Owner);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_COPYDATA, TMessage, OnCopyData);
END_MESSAGE_MAP(TForm);
};
в .cpp:
void TfrmMain::OnCopyData(TMessage &Message)
{
ShowMessage("OnCopyData");
}
так вот, запускается вторая копия приложения, первая копия поднимается на передний план, т.е. WM_SETFOCUS сработал. А ShowMessage из обработчика WM_COPYDATA не срабатывает.
Помогите, пожалуйста, разобраться почему не отрабатывает обработчик.