Как из эксперта ( или из базы MySQL ) оповестить другое приложение Windows? (+)

 

Добрый день.

Извиняюсь, если недоюзал поиск.

Задача выглядит следующим образом:

- эксперт МТ периодически складывает котировки в ( локальную ) базу MySQL.

- на том же компе работает приложение ( если важно, оно написано на VB 2008 ), которое эти котировки обсчитывает.

- как сразу после очередного обновления базы "проинформировать" об этом приложение - не важно, из МТ или MySQL?

Спасибо,

Сергей.

 

в самом простом случае можно послать сообщение окну вашей программы через SendMessage.

если нужно что-нибудь пофункциональнее, то советую посмотреть в сторону .NET remoting (под VB 2008 я понял именно VB.NET)


ЗЫ. Насколько я знаю, то можно подписаться на событие добавления записи в таблицу MS SQL. Хотя для MySql такое врятле возможно

 
GarF1eld писал(а) >>

в самом простом случае можно послать сообщение окну вашей программы через SendMessage.

если нужно что-нибудь пофункциональнее, то советую посмотреть в сторону .NET remoting (под VB 2008 я понял именно VB.NET)

Да, VB.NET

Можно немного подробнее про SendMessage? если это WinApi, то какие могут быть проблемы, как корректно написать обращение?

Например, дескриптор окна программы уникален и меняется при её перезапуске? и тд.

Уже спасибо за идею!, просто раньше не сталкивался, хочется сделать сразу и без граблей.

.net remoting трогать не очень хочется, так как текущая архитектура поставки данных для программы не рассматривается как окончательная - жду MQL5 или буду рассматривать других поставщиков котировок с открытым API. Хочется иметь одну единственную работающую среду, не набор кусков.

 
GarF1eld писал(а) >>

в самом простом случае можно послать сообщение окну вашей программы через SendMessage.

если нужно что-нибудь пофункциональнее, то советую посмотреть в сторону .NET remoting (под VB 2008 я понял именно VB.NET)

ЗЫ. Насколько я знаю, то можно подписаться на событие добавления записи в таблицу MS SQL. Хотя для MySql такое врятле возможно

Вроде раскопал, спасибо огромное за подсказку!

 
Dervish >>:

Вроде раскопал, спасибо огромное за подсказку!

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

реализовали через SendMessage?

 

Ищу, пробую, пока нет.

За пример кода буду дико благодарен!

Как получить класс окна программы для использования функции FindWindowA??

 

Помощь все еще нужна и сильно.

На данный момент получается обратиться из МТ к целевому окну и что-то с ним сделать.

Проблема в том, чтобы последнее "узнало", что с ним что-то сделали.

Написал тест: скрипт МТ меняет заголовок программы, написанной на .NET, при этом обработчик программы Форма_TextChanged не срабатывает...( при тестах из самой программы всё ОК )

Как все-таки всё это добороть? Повторюсь, .net программе нужно всего лишь отправить некоторый аналог event'а, по кторому в ней обработчик этого event'а запустится.

вот тестовый скрипт

#include <WinUser32.mqh>

int start()
{
int wDesc = FindWindowA( "WindowsForms10.Window.8.app.0.378734a", "Form" );
Alert( wDesc );
SetWindowTextA( wDesc, "test" );
return(0);
}

Какое сообщение отправить через SendMessageA и как его принять из .net?

 
Dervish >>:

как его принять из .net?

смотрите в сторону интерфейса IMessageFilter

 

я совсем не настолько знаю программирование, прошу разъяснения ((((((((

Попробовал так - не работает. Не знаю, как это писать в .net (.

<SecurityPermission(SecurityAction.LinkDemand, Flags:=SecurityPermissionFlag.UnmanagedCode)> _

Private Sub frmTst_TextChanged( ByVal sender As Object, ByVal e As System.EventArgs) Handles Me .TextChanged

 

Всё, заработало.

Спасибо огромное еще раз!

 

сделали через обработчик события Form.TextChanged ?

и кстати

#include <WinUser32.mqh>

string null;

int start()
{
   int wDesc = FindWindowA(null, "Form");
   Alert( wDesc );
   SetWindowTextA( wDesc, "test" );
   return(0);
}
Класс окна "WindowsForms10.Window.8.app.0.378734a" будет меняться при перезапуске
Причина обращения: