Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2012, 09:06   #1
LexGam
Пользователь
 
Регистрация: 13.11.2012
Сообщений: 11
Восклицание Окно не реагирует на SendMessage

Здравствуйте! Написал две простеньких программульки - одна посредством SendMessage отправляет строку другой (Код ниже):

Отправитель:
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HWND hwnd;
hwnd=FindWindow(NULL,"ProjectX");
 if (hwnd == NULL)
        {
        AnsiString Str("D:\\ÒÅÑÒ\\MS\\P2\\Project1.exe");
        WinExec(Str.c_str(),SW_RESTORE);
        return;
        }
COPYDATASTRUCT cd;
const AnsiString sTest = "Testing string";
int i=5;
cd.cbData = sTest.Length() + 1;
cd.lpData = sTest.c_str();

ShowWindow(hwnd, SW_RESTORE);
SetForegroundWindow(hwnd);
SendMessage(hwnd,WM_COPYDATA, (WPARAM) (HWND)this->Handle , (LPARAM) &cd);
}
Приём:
(.h)
Код:
void __fastcall OnWMCopyData(TWMCopyData &Msg);

        BEGIN_MESSAGE_MAP
        MESSAGE_HANDLER(WM_COPYDATA, TWMCopyData, OnWMCopyData);
        END_MESSAGE_MAP(TForm);
(.cpp)
Код:
void __fastcall TForm1::OnWMCopyData(TWMCopyData &Msg)
{
    const AnsiString sTest = (char*)Msg.CopyDataStruct->dwData;
    ShowMessage(sTest);
    ShowMessage("Успех!");
}
Посылаю сообщение, но окно-приёмник не реагирует. Подскажите пожалуйста, где ошибка?

Последний раз редактировалось Stilet; 13.11.2012 в 12:09.
LexGam вне форума Ответить с цитированием
Старый 13.11.2012, 11:20   #2
Mr.Fox
 
Аватар для Mr.Fox
 
Регистрация: 11.11.2012
Сообщений: 6
По умолчанию

Попробуй так
Код:
void __fastcall TForm1::Button1Click(TObject *Sender);
{
HWND hwnd;
hwnd=FindWindow(NULL,"ProjectX");
if (hwnd == NULL);
{
AnsiString Str("D:\\ÒÅÑÒ\\MS\\P2\\Project1.exe ");
WinExec(Str.c_str(),SW_RESTORE);
return;
}
COPYDATASTRUCT cd;
const AnsiString sTest = "Testing string";
int i=5;
cd.cbData = sTest.Length() + 1;
cd.lpData = sTest.c_str();

ShowWindow(hwnd, SW_RESTORE);
SetForegroundWindow(hwnd);
SendMessage(hwnd,WM_COPYDATA, (WPARAM) (HWND)this->Handle , (LPARAM) &cd);
}

PrintF(""):
(.h);
void __fastcall OnWMCopyData(TWMCopyData &Msg);

BEGIN_MESSAGE_MAP;
MESSAGE_HANDLER(WM_COPYDATA, TWMCopyData, OnWMCopyData);
END_MESSAGE_MAP(TForm);

(.cpp);
void __fastcall TForm1::OnWMCopyData(TWMCopyData &Msg);
{
const AnsiString sTest = (char*)Msg.CopyDataStruct->dwData;
ShowMessage(sTest);
ShowMessage("True");
}
Mr.Fox вне форума Ответить с цитированием
Старый 13.11.2012, 14:01   #3
LexGam
Пользователь
 
Регистрация: 13.11.2012
Сообщений: 11
По умолчанию

Называется найди 10 отличий ) Я только непонятно куда поставленный PrintF(""): нашёл ) Это к чему?

Кажется понял в чём дело (благодаря программке InqSoft). Я хенделу присваивал хендел приложения (ProjectX) а оказывается чтобы передать сообщение окну нужно было присваивать хендел окна по его Caption (hwnd=FindWindow(NULL,"Окно"))
Это конечно не очень удобно получается, ведь могут быть окна с одинаковыми названиями и может получиться неразбериха.
Может кто подскажет тогда, как сделать так чтобы сообщение принималось не окном а всем приложением, точнее как поймать сообщение приложением а не окном как выше?

Последний раз редактировалось Stilet; 13.11.2012 в 18:18.
LexGam вне форума Ответить с цитированием
Старый 13.11.2012, 16:41   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,372
По умолчанию

Цитата:
Сообщение от LexGam Посмотреть сообщение
точнее как поймать сообщение приложением а не окном как выше?
Никак... В принципе можно посылать потоку, но найти поток еще труднее. Лучше выбрать другой способ IPC, например named pipe или mailslot.
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SendMessage/PostMessage крашит окно overhandos Общие вопросы C/C++ 2 08.05.2012 21:29
не реагирует снифер megostudent Работа с сетью в Delphi 2 22.04.2012 16:59
Гаснет монитор, PC не реагирует Alter Компьютерное железо 1 21.11.2011 16:33
delphi не реагирует на изменения. voverrr Общие вопросы Delphi 10 01.03.2011 16:32
Неактивное окно не реагирует на сообщения хука. askarchic Общие вопросы Delphi 4 07.02.2011 00:33